]>
git.proxmox.com Git - pve-manager.git/blob - www/manager6/node/Certificates.js
29c173595d7cb5e5275bc97b8790641a19215564
1 Ext
.define('PVE.node.CertificateView', {
2 extend
: 'Ext.container.Container',
3 xtype
: 'pveCertificatesView',
5 onlineHelp
: 'sysadmin_certificate_management',
7 mixins
: ['Proxmox.Mixin.CBind'],
15 nodename
: '{nodename}',
22 nodename
: '{nodename}',
29 Ext
.define('PVE.node.CertificateViewer', {
30 extend
: 'Proxmox.window.Edit',
32 title
: gettext('Certificate'),
45 xtype
: 'displayfield',
46 fieldLabel
: gettext('Name'),
50 xtype
: 'displayfield',
51 fieldLabel
: gettext('Fingerprint'),
55 xtype
: 'displayfield',
56 fieldLabel
: gettext('Issuer'),
60 xtype
: 'displayfield',
61 fieldLabel
: gettext('Subject'),
67 xtype
: 'displayfield',
68 fieldLabel
: gettext('Public Key Type'),
69 name
: 'public-key-type',
72 xtype
: 'displayfield',
73 fieldLabel
: gettext('Public Key Size'),
74 name
: 'public-key-bits',
79 xtype
: 'displayfield',
80 fieldLabel
: gettext('Valid Since'),
81 renderer
: Proxmox
.Utils
.render_timestamp
,
85 xtype
: 'displayfield',
86 fieldLabel
: gettext('Expires'),
87 renderer
: Proxmox
.Utils
.render_timestamp
,
93 xtype
: 'displayfield',
94 fieldLabel
: gettext('Subject Alternative Names'),
96 renderer
: PVE
.Utils
.render_san
,
100 title
: gettext('Raw Certificate'),
110 'white-space': 'pre-wrap',
111 'font-family': 'monospace',
118 initComponent: function() {
122 throw "no cert given";
125 throw "no nodename given";
128 me
.url
= `/nodes/${me.nodename}/certificates/info`;
131 // hide OK/Reset button, because we just want to show data
132 me
.down('toolbar[dock=bottom]').setVisible(false);
135 success: function(response
) {
136 if (Ext
.isArray(response
.result
.data
)) {
137 for (const item
of response
.result
.data
) {
138 if (item
.filename
=== me
.cert
) {
149 Ext
.define('PVE.node.CertUpload', {
150 extend
: 'Proxmox.window.Edit',
151 xtype
: 'pveCertUpload',
153 title
: gettext('Upload Custom Certificate'),
156 submitText
: gettext('Upload'),
160 apiCallDone: function(success
, response
, options
) {
164 let txt
= gettext('API server will be restarted to use new certificates, please reload web-interface!');
165 Ext
.getBody().mask(txt
, ['pve-static-mask']);
166 Ext
.defer(() => window
.location
.reload(true), 10000); // reload after 10 seconds automatically
171 onGetValues: function(values
) {
178 fieldLabel
: gettext('Private Key (Optional)'),
180 emptyText
: gettext('No change'),
186 text
: gettext('From File'),
188 change: function(btn
, e
, value
) {
189 let form
= this.up('form');
190 for (const file
of e
.event
.target
.files
) {
191 PVE
.Utils
.loadFile(file
, res
=> form
.down('field[name=key]').setValue(res
));
198 fieldLabel
: gettext('Certificate Chain'),
201 name
: 'certificates',
206 text
: gettext('From File'),
208 change: function(btn
, e
, value
) {
209 let form
= this.up('form');
210 for (const file
of e
.event
.target
.files
) {
211 PVE
.Utils
.loadFile(file
, res
=> form
.down('field[name=certificates]').setValue(res
));
220 initComponent: function() {
223 throw "no nodename given";
225 me
.url
= `/nodes/${me.nodename}/certificates/custom`;
231 Ext
.define('pve-certificate', {
232 extend
: 'Ext.data.Model',
233 fields
: ['filename', 'fingerprint', 'issuer', 'notafter', 'notbefore', 'subject', 'san', 'public-key-bits', 'public-key-type'],
234 idProperty
: 'filename',
237 Ext
.define('PVE.node.Certificates', {
238 extend
: 'Ext.grid.Panel',
239 xtype
: 'pveCertView',
244 text
: gettext('Upload Custom Certificate'),
245 handler: function() {
246 let view
= this.up('grid');
247 Ext
.create('PVE.node.CertUpload', {
248 nodename
: view
.nodename
,
250 destroy
: () => view
.reload(),
257 xtype
: 'proxmoxStdRemoveButton',
259 text
: gettext('Delete Custom Certificate'),
262 getUrl: function(rec
) {
263 let view
= this.up('grid');
264 return `/nodes/${view.nodename}/certificates/custom?restart=1`;
266 confirmMsg
: gettext('Delete custom certificate and switch to generated one?'),
267 callback: function(options
, success
, response
) {
269 let txt
= gettext('API server will be restarted to use new certificates, please reload web-interface!');
270 Ext
.getBody().mask(txt
, ['pve-static-mask']);
271 // reload after 10 seconds automatically
272 Ext
.defer(() => window
.location
.reload(true), 10000);
278 xtype
: 'proxmoxButton',
281 text
: gettext('View Certificate'),
282 handler: function() {
283 this.up('grid').viewCertificate();
290 header
: gettext('File'),
292 dataIndex
: 'filename',
295 header
: gettext('Issuer'),
300 header
: gettext('Subject'),
302 dataIndex
: 'subject',
305 header
: gettext('Public Key Alogrithm'),
307 dataIndex
: 'public-key-type',
311 header
: gettext('Public Key Size'),
313 dataIndex
: 'public-key-bits',
317 header
: gettext('Valid Since'),
319 dataIndex
: 'notbefore',
320 renderer
: Proxmox
.Utils
.render_timestamp
,
323 header
: gettext('Expires'),
325 dataIndex
: 'notafter',
326 renderer
: Proxmox
.Utils
.render_timestamp
,
329 header
: gettext('Subject Alternative Names'),
332 renderer
: PVE
.Utils
.render_san
,
335 header
: gettext('Fingerprint'),
336 dataIndex
: 'fingerprint',
340 header
: gettext('PEM'),
350 viewCertificate: function() {
352 let selection
= me
.getSelection();
353 if (!selection
|| selection
.length
< 1) {
356 var win
= Ext
.create('PVE.node.CertificateViewer', {
357 cert
: selection
[0].data
.filename
,
358 nodename
: me
.nodename
,
364 itemdblclick
: 'viewCertificate',
367 initComponent: function() {
371 throw "no nodename given";
374 me
.rstore
= Ext
.create('Proxmox.data.UpdateStore', {
375 storeid
: 'certs-' + me
.nodename
,
376 model
: 'pve-certificate',
379 url
: '/api2/json/nodes/' + me
.nodename
+ '/certificates/info',
390 me
.mon(me
.rstore
, 'load', store
=> me
.down('#deletebtn').setDisabled(!store
.getById('pveproxy-ssl.pem')));
391 me
.rstore
.startUpdate();
392 me
.on('destroy', me
.rstore
.stopUpdate
, me
.rstore
);