]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/dc/TokenView.js
ui: add Token Panel + Edit Window
[pve-manager.git] / www / manager6 / dc / TokenView.js
CommitLineData
c831fbde
FG
1/*jslint confusion: true */
2Ext.define('PVE.dc.TokenView', {
3 extend: 'Ext.grid.GridPanel',
4
5 alias: ['widget.pveTokenView'],
6
7 onlineHelp: 'chapter_user_management',
8
9 stateful: true,
10 stateId: 'grid-tokens',
11
12 // use fixed user
13 userid: undefined,
14
15 initComponent : function() {
16 var me = this;
17
18 var caps = Ext.state.Manager.get('GuiCap');
19
20 var store = new Ext.data.Store({
21 id: "tokens",
22 model: 'pve-tokens',
23 sorters: [
24 {
25 property: 'userid',
26 order: 'ASC'
27 },
28 {
29 property: 'tokenid',
30 order: 'ASC',
31 }
32 ]
33 });
34
35 var reload = function() {
36 Proxmox.Utils.API2Request({
37 url: '/access/users/?full=1',
38 method: 'GET',
39 failure: function(response, opts) {
40 Proxmox.Utils.setErrorMask(me, response.htmlStatus);
41 me.load_task.delay(me.load_delay);
42 },
43 success: function(response, opts) {
44 Proxmox.Utils.setErrorMask(me, false);
45 var result = Ext.decode(response.responseText);
46 var data = result.data || [];
47 var records = [];
48 Ext.Array.each(data, function(user) {
49 tokens = user.tokens || [];
50 Ext.Array.each(tokens, function(token) {
51 var r = {};
52 r.id = user.userid + '!' + token.tokenid;
53 r.userid = user.userid;
54 r.tokenid = token.tokenid;
55 r.comment = token.comment;
56 r.expire = token.expire;
57 r.privsep = token.privsep === 1 ? true : false;
58 records.push(r);
59 });
60 });
61 store.loadData(records);
62 },
63 });
64 };
65
66 var sm = Ext.create('Ext.selection.RowModel', {});
67
68 var remove_btn = Ext.create('Proxmox.button.StdRemoveButton', {
69 selModel: sm,
70 enableFn: function(rec) {
71 return !!caps.access['User.Modify'];
72 },
73 callback: function() {
74 reload();
75 },
76 getUrl: function(rec) {
77 return '/access/users/' + encodeURIComponent(rec.data.userid) + '/token/' + encodeURIComponent(rec.data.tokenid);
78 }
79 });
80
81 var run_editor = function() {
82 var rec = sm.getSelection()[0];
83 if (!rec || !caps.access['User.Modify']) {
84 return;
85 }
86
87 var win = Ext.create('PVE.dc.TokenEdit', {
88 userid: rec.data.userid,
89 tokenid: rec.data.tokenid
90 });
91 win.on('destroy', reload);
92 win.show();
93 };
94
95 var edit_btn = new Proxmox.button.Button({
96 text: gettext('Edit'),
97 disabled: true,
98 enableFn: function(rec) {
99 return !!caps.access['User.Modify'];
100 },
101 selModel: sm,
102 handler: run_editor
103 });
104
105 var perm_btn = new Proxmox.button.Button({
106 text: gettext('Permissions'),
107 disabled: false,
108 selModel: sm,
109 handler: function(btn, event, rec) {
110 var rec = sm.getSelection()[0];
111 var win = Ext.create('PVE.dc.PermissionView', {
112 userid: rec.data.id
113 });
114 win.show();
115 }
116 });
117
118 var tbar = [
119 {
120 text: gettext('Add'),
121 disabled: !caps.access['User.Modify'],
122 handler: function() {
123 var rec = sm.getSelection()[0];
124 var data = {};
125 if (rec && rec.data) {
126 data.userid = rec.data.userid;
127 }
128 var win = Ext.create('PVE.dc.TokenEdit', data);
129 win.on('destroy', reload);
130 win.show();
131 }
132 },
133 edit_btn, remove_btn, perm_btn
134 ];
135
136 var render_username = function(userid) {
137 return userid.match(/^(.+)(@[^@]+)$/)[1];
138 };
139
140 var render_realm = function(userid) {
141 return userid.match(/@([^@]+)$/)[1];
142 };
143
144
145 Ext.apply(me, {
146 store: store,
147 selModel: sm,
148 tbar: tbar,
149 viewConfig: {
150 trackOver: false
151 },
152 columns: [
153 {
154 header: gettext('User name'),
155 width: 200,
156 sortable: true,
157 renderer: render_username,
158 dataIndex: 'userid'
159 },
160 {
161 header: gettext('Realm'),
162 width: 100,
163 sortable: true,
164 renderer: render_realm,
165 dataIndex: 'userid'
166 },
167 {
168 header: gettext('Token name'),
169 width: 100,
170 sortable: true,
171 dataIndex: 'tokenid'
172 },
173 {
174 header: gettext('Expire'),
175 width: 80,
176 sortable: true,
177 renderer: Proxmox.Utils.format_expire,
178 dataIndex: 'expire'
179 },
180 {
181 header: gettext('Comment'),
182 sortable: false,
183 renderer: Ext.String.htmlEncode,
184 dataIndex: 'comment',
185 flex: 1
186 },
187 {
188 header: gettext('Privilege Separation'),
189 width: 80,
190 sortable: true,
191 renderer: Proxmox.Utils.format_boolean,
192 dataIndex: 'privsep'
193 },
194 ],
195 listeners: {
196 activate: reload,
197 itemdblclick: run_editor
198 }
199 });
200
201 me.callParent();
202 }
203});