1<?php declare(strict_types=1);
2/*
3** Zabbix
4** Copyright (C) 2001-2021 Zabbix SIA
5**
6** This program is free software; you can redistribute it and/or modify
7** it under the terms of the GNU General Public License as published by
8** the Free Software Foundation; either version 2 of the License, or
9** (at your option) any later version.
10**
11** This program is distributed in the hope that it will be useful,
12** but WITHOUT ANY WARRANTY; without even the implied warranty of
13** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14** GNU General Public License for more details.
15**
16** You should have received a copy of the GNU General Public License
17** along with this program; if not, write to the Free Software
18** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
19**/
20
21
22/**
23 * @var CView $this
24 */
25
26if ($data['uncheck']) {
27	uncheckTableRows('user.token');
28}
29
30$this->includeJsFile('administration.user.token.list.js.php');
31
32$filter = (new CFilter((new CUrl('zabbix.php'))->setArgument('action', 'user.token.list')));
33$filter
34	->addVar('action', 'user.token.list')
35	->setProfile($data['profileIdx'])
36	->setActiveTab($data['active_tab'])
37	->addFilterTab(_('Filter'), [
38		(new CFormList())
39			->addRow(_('Name'),
40				(new CTextBox('filter_name', $data['filter']['name']))
41					->setWidth(ZBX_TEXTAREA_FILTER_STANDARD_WIDTH)
42					->setAttribute('autofocus', 'autofocus')
43			)
44			->addRow(_('Expires in less than'), [
45				(new CCheckBox('filter_expires_state'))
46					->setChecked($data['filter']['expires_state'])
47					->setId('filter-expires-state'),
48				(new CDiv())->addClass(ZBX_STYLE_FORM_INPUT_MARGIN),
49				(new CNumericBox('filter_expires_days', $data['filter']['expires_days'], 3, false, false, false))
50					->setId('filter-expires-days')
51					->setEnabled($data['filter']['expires_state'])
52					->setWidth(ZBX_TEXTAREA_NUMERIC_STANDARD_WIDTH),
53				(new CDiv())->addClass(ZBX_STYLE_FORM_INPUT_MARGIN),
54				_('days')
55			]),
56		(new CFormList())
57			->addRow(_('Status'),
58				(new CRadioButtonList('filter_status', (int) $data['filter']['status']))
59					->addValue(_('Any'), -1)
60					->addValue(_('Enabled'), ZBX_AUTH_TOKEN_ENABLED)
61					->addValue(_('Disabled'), ZBX_AUTH_TOKEN_DISABLED)
62					->setModern(true)
63			)
64	]);
65
66$widget = (new CWidget())
67	->setTitle(_('API tokens'))
68	->setTitleSubmenu(getUserSettingsSubmenu())
69	->setControls(
70		(new CTag('nav', true,
71			(new CList())->addItem(new CRedirectButton(_('Create API token'),
72				(new CUrl('zabbix.php'))->setArgument('action', 'user.token.edit'))
73			)
74		))->setAttribute('aria-label', _('Content controls'))
75	)
76	->addItem($filter);
77
78$token_form = (new CForm('get'))
79	->addVar('action_src', 'user.token.list')
80	->setName('token_form');
81
82$token_table = (new CTableInfo())
83	->setHeader([
84		(new CColHeader(
85			(new CCheckBox('all_tokens'))
86				->onClick("checkAll('".$token_form->getName()."', 'all_tokens', 'tokenids');")
87		))->addClass(ZBX_STYLE_CELL_WIDTH),
88		make_sorting_header(_('Name'), 'name', $data['sort'], $data['sortorder'],
89			(new CUrl('zabbix.php'))
90				->setArgument('action', 'user.token.list')
91				->getUrl()
92		),
93		make_sorting_header(_('Expires at'), 'expires_at', $data['sort'], $data['sortorder'],
94			(new CUrl('zabbix.php'))
95				->setArgument('action', 'user.token.list')
96				->getUrl()
97		),
98		_('Created at'),
99		make_sorting_header(_('Last accessed at'), 'lastaccess', $data['sort'], $data['sortorder'],
100			(new CUrl('zabbix.php'))
101				->setArgument('action', 'user.token.list')
102				->getUrl()
103		),
104		make_sorting_header(_('Status'), 'status', $data['sort'], $data['sortorder'],
105			(new CUrl('zabbix.php'))
106				->setArgument('action', 'user.token.list')
107				->getUrl()
108		)
109	]);
110
111foreach ($data['tokens'] as $token) {
112	$name = new CLink($token['name'], (new CUrl('zabbix.php'))
113		->setArgument('action', 'user.token.edit')
114		->setArgument('tokenid', $token['tokenid'])
115	);
116
117	$token_table->addRow([
118		new CCheckBox('tokenids['.$token['tokenid'].']', $token['tokenid']),
119		(new CCol($name))->addClass(ZBX_STYLE_NOWRAP),
120		(new CSpan(zbx_date2str(DATE_TIME_FORMAT_SECONDS, $token['expires_at'])))->addClass(
121			$token['is_expired'] ? ZBX_STYLE_RED : ZBX_STYLE_GREEN
122		),
123		zbx_date2str(DATE_TIME_FORMAT_SECONDS, $token['created_at']),
124		zbx_date2str(DATE_TIME_FORMAT_SECONDS, $token['lastaccess']),
125		($token['status'] == ZBX_AUTH_TOKEN_ENABLED)
126			? (new CLink(_('Enabled'), (new CUrl('zabbix.php'))
127					->setArgument('action_src', 'user.token.list')
128					->setArgument('action', 'token.disable')
129					->setArgument('tokenids', (array) $token['tokenid'])
130					->getUrl()
131			))
132				->addClass(ZBX_STYLE_LINK_ACTION)
133				->addClass(ZBX_STYLE_GREEN)
134				->addSID()
135			: (new CLink(_('Disabled'), (new CUrl('zabbix.php'))
136					->setArgument('action_src', 'user.token.list')
137					->setArgument('action', 'token.enable')
138					->setArgument('tokenids', (array) $token['tokenid'])
139					->getUrl()
140			))
141				->addClass(ZBX_STYLE_LINK_ACTION)
142				->addClass(ZBX_STYLE_RED)
143				->addSID()
144	]);
145}
146
147$token_form->addItem([
148	$token_table,
149	$data['paging'],
150	new CActionButtonList('action', 'tokenids', [
151		'token.enable' => ['name' => _('Enable'), 'confirm' => _('Enable selected API tokens?')],
152		'token.disable' => ['name' => _('Disable'), 'confirm' => _('Disable selected API tokens?')],
153		'token.delete' => ['name' => _('Delete'), 'confirm' => _('Delete selected API tokens?')]
154	], 'user.token')
155]);
156
157$widget
158	->addItem($token_form)
159	->show();
160