]>
git.proxmox.com Git - pve-manager.git/blob - www/manager6/node/Certificates.js
1 Ext
.define('PVE.node.CertificateView', {
2 extend
: 'Ext.container.Container',
3 xtype
: 'pveCertificatesView',
5 onlineHelp
: 'sysadmin_certificate_management',
7 mixins
: ['Proxmox.Mixin.CBind'],
14 nodename
: '{nodename}',
21 nodename
: '{nodename}',
28 Ext
.define('PVE.node.CertificateViewer', {
29 extend
: 'Proxmox.window.Edit',
31 title
: gettext('Certificate'),
41 xtype
: 'displayfield',
42 fieldLabel
: gettext('Name'),
46 xtype
: 'displayfield',
47 fieldLabel
: gettext('Fingerprint'),
51 xtype
: 'displayfield',
52 fieldLabel
: gettext('Issuer'),
56 xtype
: 'displayfield',
57 fieldLabel
: gettext('Subject'),
61 xtype
: 'displayfield',
62 fieldLabel
: gettext('Public Key Type'),
63 name
: 'public-key-type',
66 xtype
: 'displayfield',
67 fieldLabel
: gettext('Public Key Size'),
68 name
: 'public-key-bits',
71 xtype
: 'displayfield',
72 fieldLabel
: gettext('Valid Since'),
73 renderer
: Proxmox
.Utils
.render_timestamp
,
77 xtype
: 'displayfield',
78 fieldLabel
: gettext('Expires'),
79 renderer
: Proxmox
.Utils
.render_timestamp
,
83 xtype
: 'displayfield',
84 fieldLabel
: gettext('Subject Alternative Names'),
86 renderer
: PVE
.Utils
.render_san
,
93 fieldLabel
: gettext('Certificate'),
98 initComponent: function() {
102 throw "no cert given";
105 throw "no nodename given";
108 me
.url
= `/nodes/${me.nodename}/certificates/info`;
111 // hide OK/Reset button, because we just want to show data
112 me
.down('toolbar[dock=bottom]').setVisible(false);
115 success: function(response
) {
116 if (Ext
.isArray(response
.result
.data
)) {
117 for (const item
of response
.result
.data
) {
118 if (item
.filename
=== me
.cert
) {
129 Ext
.define('PVE.node.CertUpload', {
130 extend
: 'Proxmox.window.Edit',
131 xtype
: 'pveCertUpload',
133 title
: gettext('Upload Custom Certificate'),
136 submitText
: gettext('Upload'),
140 apiCallDone: function(success
, response
, options
) {
144 let txt
= gettext('API server will be restarted to use new certificates, please reload web-interface!');
145 Ext
.getBody().mask(txt
, ['pve-static-mask']);
146 Ext
.defer(() => window
.location
.reload(true), 10000); // reload after 10 seconds automatically
151 fieldLabel
: gettext('Private Key (Optional)'),
153 emptyText
: gettext('No change'),
159 text
: gettext('From File'),
161 change: function(btn
, e
, value
) {
162 let form
= this.up('form');
163 for (const file
of e
.event
.target
.files
) {
164 PVE
.Utils
.loadFile(file
, res
=> form
.down('field[name=key]').setValue(res
));
175 fieldLabel
: gettext('Certificate Chain'),
178 name
: 'certificates',
183 text
: gettext('From File'),
185 change: function(btn
, e
, value
) {
186 let form
= this.up('form');
187 for (const file
of e
.event
.target
.files
) {
188 PVE
.Utils
.loadFile(file
, res
=> form
.down('field[name=certificates]').setValue(res
));
206 initComponent: function() {
209 throw "no nodename given";
211 me
.url
= `/nodes/${me.nodename}/certificates/custom`;
217 Ext
.define('pve-certificate', {
218 extend
: 'Ext.data.Model',
219 fields
: ['filename', 'fingerprint', 'issuer', 'notafter', 'notbefore', 'subject', 'san', 'public-key-bits', 'public-key-type'],
220 idProperty
: 'filename',
223 Ext
.define('PVE.node.Certificates', {
224 extend
: 'Ext.grid.Panel',
225 xtype
: 'pveCertView',
230 text
: gettext('Upload Custom Certificate'),
231 handler: function() {
232 let view
= this.up('grid');
233 Ext
.create('PVE.node.CertUpload', {
234 nodename
: view
.nodename
,
236 destroy
: () => view
.reload(),
243 xtype
: 'proxmoxStdRemoveButton',
245 text
: gettext('Delete Custom Certificate'),
248 getUrl: function(rec
) {
249 let view
= this.up('grid');
250 return `/nodes/${view.nodename}/certificates/custom?restart=1`;
252 confirmMsg
: gettext('Delete custom certificate and switch to generated one?'),
253 callback: function(options
, success
, response
) {
255 let txt
= gettext('API server will be restarted to use new certificates, please reload web-interface!');
256 Ext
.getBody().mask(txt
, ['pve-static-mask']);
257 // reload after 10 seconds automatically
258 Ext
.defer(() => window
.location
.reload(true), 10000);
264 xtype
: 'proxmoxButton',
267 text
: gettext('View Certificate'),
268 handler: function() {
269 this.up('grid').viewCertificate();
276 header
: gettext('File'),
278 dataIndex
: 'filename',
281 header
: gettext('Issuer'),
286 header
: gettext('Subject'),
288 dataIndex
: 'subject',
291 header
: gettext('Public Key Alogrithm'),
293 dataIndex
: 'public-key-type',
297 header
: gettext('Public Key Size'),
299 dataIndex
: 'public-key-bits',
303 header
: gettext('Valid Since'),
305 dataIndex
: 'notbefore',
306 renderer
: Proxmox
.Utils
.render_timestamp
,
309 header
: gettext('Expires'),
311 dataIndex
: 'notafter',
312 renderer
: Proxmox
.Utils
.render_timestamp
,
315 header
: gettext('Subject Alternative Names'),
318 renderer
: PVE
.Utils
.render_san
,
321 header
: gettext('Fingerprint'),
322 dataIndex
: 'fingerprint',
326 header
: gettext('PEM'),
336 viewCertificate: function() {
338 let selection
= me
.getSelection();
339 if (!selection
|| selection
.length
< 1) {
342 var win
= Ext
.create('PVE.node.CertificateViewer', {
343 cert
: selection
[0].data
.filename
,
344 nodename
: me
.nodename
,
350 itemdblclick
: 'viewCertificate',
353 initComponent: function() {
357 throw "no nodename given";
360 me
.rstore
= Ext
.create('Proxmox.data.UpdateStore', {
361 storeid
: 'certs-' + me
.nodename
,
362 model
: 'pve-certificate',
365 url
: '/api2/json/nodes/' + me
.nodename
+ '/certificates/info',
376 me
.mon(me
.rstore
, 'load', store
=> me
.down('#deletebtn').setDisabled(!store
.getById('pveproxy-ssl.pem')));
377 me
.rstore
.startUpdate();
378 me
.on('destroy', me
.rstore
.stopUpdate
, me
.rstore
);