Source
'username' => ['type' => API_STRING_UTF8, 'flags' => API_REQUIRED | API_NOT_EMPTY, 'length' => DB::getFieldLength('users', 'username')],
<?php
/*
** Copyright (C) 2001-2025 Zabbix SIA
**
** This program is free software: you can redistribute it and/or modify it under the terms of
** the GNU Affero General Public License as published by the Free Software Foundation, version 3.
**
** This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
** without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
** See the GNU Affero General Public License for more details.
**
** You should have received a copy of the GNU Affero General Public License along with this program.
** If not, see <https://www.gnu.org/licenses/>.
**/
use Duo\DuoUniversal\Client;
use Duo\DuoUniversal\DuoException;
use PragmaRX\Google2FA\Google2FA;
use PragmaRX\Google2FA\Support\Constants;
/**
* Class containing methods for operations with users.
*/
class CUser extends CApiService {
/**
* Acceptable execution time of user verification process in seconds and nanoseconds.
*
* @var array
*/
public const ACCEPTABLE_USER_VERIFICATION_TIME = [1, 0];
public const ACCESS_RULES = [
'get' => ['min_user_type' => USER_TYPE_ZABBIX_USER],
'create' => ['min_user_type' => USER_TYPE_SUPER_ADMIN],
'update' => ['min_user_type' => USER_TYPE_ZABBIX_USER],
'delete' => ['min_user_type' => USER_TYPE_SUPER_ADMIN],
'checkauthentication' => [],
'login' => [],
'logout' => ['min_user_type' => USER_TYPE_ZABBIX_USER],
'unblock' => ['min_user_type' => USER_TYPE_SUPER_ADMIN],
'provision' => ['min_user_type' => USER_TYPE_SUPER_ADMIN],
'resettotp' => ['min_user_type' => USER_TYPE_SUPER_ADMIN]
];
protected $tableName = 'users';
protected $tableAlias = 'u';
protected $sortColumns = ['userid', 'username'];
public const OUTPUT_FIELDS = ['userid', 'username', 'name', 'surname', 'passwd', 'url', 'autologin', 'autologout',
'lang', 'refresh', 'theme', 'attempt_failed', 'attempt_ip', 'attempt_clock', 'rows_per_page', 'timezone',
'roleid', 'userdirectoryid', 'ts_provisioned'
];
private const PROVISIONED_FIELDS = ['username', 'name', 'surname', 'usrgrps', 'medias', 'roleid'];
private static $user_verification_start_time;
/**
* Get users data.
*
* @param array $options
* @param array $options['usrgrpids'] filter by UserGroup IDs
* @param array $options['userids'] filter by User IDs
* @param bool $options['type'] filter by User type [USER_TYPE_ZABBIX_USER: 1, USER_TYPE_ZABBIX_ADMIN: 2, USER_TYPE_SUPER_ADMIN: 3]
* @param bool $options['selectUsrgrps'] extend with UserGroups data for each User
* @param bool $options['getAccess'] extend with access data for each User
* @param bool $options['count'] output only count of objects in result. (result returned in property 'rowscount')
* @param string $options['pattern'] filter by Host name containing only give pattern
* @param int $options['limit'] output will be limited to given number
* @param string $options['sortfield'] output will be sorted by given property ['userid', 'username']
* @param string $options['sortorder'] output will be sorted in given order ['ASC', 'DESC']
*
* @return array
*/
public function get($options = []) {
$result = [];
$sqlParts = [
'select' => ['users' => 'u.userid'],
'from' => ['users' => 'users u'],
'where' => [],
'order' => [],
'limit' => null
];
$defOptions = [
'usrgrpids' => null,
'userids' => null,
'mediaids' => null,