class CControllerProxyCreate extends CController {
protected function checkInput() {
'host' => 'db hosts.host',
'status' => 'db hosts.status|in '.HOST_STATUS_PROXY_ACTIVE.','.HOST_STATUS_PROXY_PASSIVE,
'dns' => 'db interface.dns',
'ip' => 'db interface.ip',
'useip' => 'db interface.useip|in 0,1',
'port' => 'db interface.port',
'proxy_address' => 'db hosts.proxy_address',
'description' => 'db hosts.description',
'tls_connect' => 'db hosts.tls_connect|in '.HOST_ENCRYPTION_NONE.','.HOST_ENCRYPTION_PSK.','.
HOST_ENCRYPTION_CERTIFICATE,
'tls_accept' => 'db hosts.tls_accept|in 0,'.HOST_ENCRYPTION_NONE.','.HOST_ENCRYPTION_PSK.','.
(HOST_ENCRYPTION_NONE | HOST_ENCRYPTION_PSK).','.
HOST_ENCRYPTION_CERTIFICATE.','.
(HOST_ENCRYPTION_NONE | HOST_ENCRYPTION_CERTIFICATE).','.
(HOST_ENCRYPTION_PSK | HOST_ENCRYPTION_CERTIFICATE).','.
(HOST_ENCRYPTION_NONE | HOST_ENCRYPTION_PSK | HOST_ENCRYPTION_CERTIFICATE),
'tls_psk' => 'db hosts.tls_psk',
'tls_psk_identity' => 'db hosts.tls_psk_identity',
'psk_edit_mode' => 'in 0,1',
'tls_issuer' => 'db hosts.tls_issuer',
'tls_subject' => 'db hosts.tls_subject',
'clone_proxyid' => 'db hosts.hostid',
'form_refresh' => 'int32'
$ret = $this->validateInput($fields);
switch ($this->GetValidationError()) {
case self::VALIDATION_ERROR:
$response = new CControllerResponseRedirect('zabbix.php?action=proxy.edit');
$response->setFormData($this->getInputAll());
CMessageHelper::setErrorTitle(_('Cannot add proxy'));
$this->setResponse($response);
case self::VALIDATION_FATAL_ERROR:
$this->setResponse(new CControllerResponseFatal());
protected function checkPermissions() {
if (!$this->checkAccess(CRoleHelper::UI_ADMINISTRATION_PROXIES)) {
$clone_psk = $this->hasInput('clone_proxyid') && $this->getInput('psk_edit_mode', 0) == 0;
$clone_psk = $this->getInput('tls_connect', HOST_ENCRYPTION_NONE) == HOST_ENCRYPTION_PSK
|| ($this->getInput('tls_accept', HOST_ENCRYPTION_NONE) & HOST_ENCRYPTION_PSK);
$this->clone_proxy = API::Proxy()->get([
'output' => ['tls_psk_identity', 'tls_psk'],
'proxyids' => $this->getInput('clone_proxyid')