]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/dc/TokenEdit.js
3edf18cc9034e4501c3bb4d878a0695933b8d3ae
[pve-manager.git] / www / manager6 / dc / TokenEdit.js
1 Ext.define('PVE.dc.TokenEdit', {
2 extend: 'Proxmox.window.Edit',
3 alias: ['widget.pveDcTokenEdit'],
4 mixins: ['Proxmox.Mixin.CBind'],
5
6 subject: gettext('Token'),
7 onlineHelp: 'pveum_tokens',
8
9 isAdd: true,
10 isCreate: false,
11 fixedUser: false,
12
13 method: 'POST',
14 url: '/api2/extjs/access/users/',
15
16 defaultFocus: 'field[disabled=false][hidden=false][name=tokenid]',
17
18 items: {
19 xtype: 'inputpanel',
20 onGetValues: function(values) {
21 let me = this;
22 let win = me.up('pveDcTokenEdit');
23 win.url = '/api2/extjs/access/users/';
24 if (win.isCreate) {
25 let uid = encodeURIComponent(values.userid);
26 let tid = encodeURIComponent(values.tokenid);
27 delete values.userid;
28 delete values.tokenid;
29
30 win.url += `${uid}/token/${tid}`;
31 }
32 return values;
33 },
34 column1: [
35 {
36 xtype: 'pmxDisplayEditField',
37 cbind: {
38 editable: (get) => get('isCreate') && !get('fixedUser'),
39 submitValue: (get) => get('isCreate') || get('fixedUser'),
40 },
41 editConfig: {
42 xtype: 'pveUserSelector',
43 allowBlank: false,
44 },
45 name: 'userid',
46 value: Proxmox.UserName,
47 renderer: Ext.String.htmlEncode,
48 fieldLabel: gettext('User'),
49 },
50 {
51 xtype: 'pmxDisplayEditField',
52 cbind: {
53 editable: '{isCreate}',
54 },
55 name: 'tokenid',
56 fieldLabel: gettext('Token ID'),
57 minLength: 2,
58 allowBlank: false,
59 },
60 ],
61 column2: [
62 {
63 xtype: 'proxmoxcheckbox',
64 name: 'privsep',
65 checked: true,
66 uncheckedValue: 0,
67 fieldLabel: gettext('Privilege Separation'),
68 },
69 {
70 xtype: 'pmxExpireDate',
71 name: 'expire',
72 },
73 ],
74 columnB: [
75 {
76 xtype: 'textfield',
77 name: 'comment',
78 fieldLabel: gettext('Comment'),
79 },
80 ],
81 },
82
83 initComponent: function() {
84 let me = this;
85
86 me.callParent();
87
88 if (!me.isCreate) {
89 me.load({
90 success: function(response, options) {
91 me.setValues(response.result.data);
92 },
93 });
94 }
95 },
96 apiCallDone: function(success, response, options) {
97 let res = response.result.data;
98 if (!success || !res.value) {
99 return;
100 }
101
102 Ext.create('PVE.dc.TokenShow', {
103 autoShow: true,
104 tokenid: res['full-tokenid'],
105 secret: res.value,
106 });
107 },
108 });
109
110 Ext.define('PVE.dc.TokenShow', {
111 extend: 'Ext.window.Window',
112 alias: ['widget.pveTokenShow'],
113 mixins: ['Proxmox.Mixin.CBind'],
114
115 width: 600,
116 modal: true,
117 resizable: false,
118 title: gettext('Token Secret'),
119
120 items: [
121 {
122 xtype: 'container',
123 layout: 'form',
124 bodyPadding: 10,
125 border: false,
126 fieldDefaults: {
127 labelWidth: 100,
128 anchor: '100%',
129 },
130 padding: '0 10 10 10',
131 items: [
132 {
133 xtype: 'textfield',
134 fieldLabel: gettext('Token ID'),
135 cbind: {
136 value: '{tokenid}',
137 },
138 editable: false,
139 },
140 {
141 xtype: 'textfield',
142 fieldLabel: gettext('Secret'),
143 inputId: 'token-secret-value',
144 cbind: {
145 value: '{secret}',
146 },
147 editable: false,
148 },
149 ],
150 },
151 {
152 xtype: 'component',
153 border: false,
154 padding: '10 10 10 10',
155 userCls: 'pmx-hint',
156 html: gettext('Please record the API token secret - it will only be displayed now'),
157 },
158 ],
159 buttons: [
160 {
161 handler: function(b) {
162 document.getElementById('token-secret-value').select();
163 document.execCommand("copy");
164 },
165 text: gettext('Copy Secret Value'),
166 iconCls: 'fa fa-clipboard',
167 },
168 ],
169 });