]>
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";
106 throw "no nodename given";
109 me
.url
= '/nodes/' + me
.nodename
+ '/certificates/info';
112 // hide OK/Reset button, because we just want to show data
113 me
.down('toolbar[dock=bottom]').setVisible(false);
116 success: function(response
) {
117 if (Ext
.isArray(response
.result
.data
)) {
118 Ext
.Array
.each(response
.result
.data
, function(item
) {
119 if (item
.filename
=== me
.cert
) {
130 Ext
.define('PVE.node.CertUpload', {
131 extend
: 'Proxmox.window.Edit',
132 xtype
: 'pveCertUpload',
134 title
: gettext('Upload Custom Certificate'),
137 submitText
: gettext('Upload'),
141 apiCallDone: function(success
, response
, options
) {
146 var txt
= gettext('pveproxy will be restarted with new certificates, please reload the GUI!');
147 Ext
.getBody().mask(txt
, ['pve-static-mask']);
148 // reload after 10 seconds automatically
149 Ext
.defer(function() {
150 window
.location
.reload(true);
156 fieldLabel
: gettext('Private Key (Optional)'),
158 emptyText
: gettext('No change'),
164 text
: gettext('From File'),
166 change: function(btn
, e
, value
) {
167 var me
= this.up('form');
169 Ext
.Array
.each(e
.target
.files
, function(file
) {
170 PVE
.Utils
.loadSSHKeyFromFile(file
, function(res
) {
171 me
.down('field[name=key]').setValue(res
);
183 fieldLabel
: gettext('Certificate Chain'),
186 name
: 'certificates',
191 text
: gettext('From File'),
193 change: function(btn
, e
, value
) {
194 var me
= this.up('form');
196 Ext
.Array
.each(e
.target
.files
, function(file
) {
197 PVE
.Utils
.loadSSHKeyFromFile(file
, function(res
) {
198 me
.down('field[name=certificates]').setValue(res
);
217 initComponent: function() {
221 throw "no nodename given";
224 me
.url
= '/nodes/' + me
.nodename
+ '/certificates/custom';
230 Ext
.define('pve-certificate', {
231 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 var me
= this.up('grid');
247 var win
= Ext
.create('PVE.node.CertUpload', {
248 nodename
: me
.nodename
251 win
.on('destroy', me
.reload
, me
);
257 text
: gettext('Delete Custom Certificate'),
258 handler: function() {
259 var me
= this.up('grid');
260 Proxmox
.Utils
.API2Request({
261 url
: '/nodes/' + me
.nodename
+ '/certificates/custom?restart=1',
263 success: function(response
, opt
) {
264 var txt
= gettext('pveproxy will be restarted with new certificates, please reload the GUI!');
265 Ext
.getBody().mask(txt
, ['pve-static-mask']);
266 // reload after 10 seconds automatically
267 Ext
.defer(function() {
268 window
.location
.reload(true);
271 failure: function(response
, opt
) {
272 Ext
.Msg
.alert(gettext('Error'), response
.htmlStatus
);
279 xtype
: 'proxmoxButton',
282 text
: gettext('View Certificate'),
283 handler: function() {
284 var me
= this.up('grid');
285 me
.view_certificate();
292 header
: gettext('File'),
294 dataIndex
: 'filename'
297 header
: gettext('Issuer'),
302 header
: gettext('Subject'),
307 header
: gettext('Public Key Alogrithm'),
309 dataIndex
: 'public-key-type',
313 header
: gettext('Public Key Size'),
315 dataIndex
: 'public-key-bits',
319 header
: gettext('Valid Since'),
321 dataIndex
: 'notbefore',
322 renderer
: Proxmox
.Utils
.render_timestamp
325 header
: gettext('Expires'),
327 dataIndex
: 'notafter',
328 renderer
: Proxmox
.Utils
.render_timestamp
331 header
: gettext('Subject Alternative Names'),
334 renderer
: PVE
.Utils
.render_san
337 header
: gettext('Fingerprint'),
338 dataIndex
: 'fingerprint',
342 header
: gettext('PEM'),
353 set_button_status: function() {
355 var rec
= me
.rstore
.getById('pveproxy-ssl.pem');
357 me
.down('#deletebtn').setDisabled(!rec
);
360 view_certificate: function() {
362 var selection
= me
.getSelection();
363 if (!selection
|| selection
.length
< 1) {
366 var win
= Ext
.create('PVE.node.CertificateViewer', {
367 cert
: selection
[0].data
.filename
,
368 nodename
: me
.nodename
374 itemdblclick
: 'view_certificate'
377 initComponent: function() {
381 throw "no nodename given";
384 me
.rstore
= Ext
.create('Proxmox.data.UpdateStore', {
385 storeid
: 'certs-' + me
.nodename
,
386 model
: 'pve-certificate',
389 url
: '/api2/json/nodes/' + me
.nodename
+ '/certificates/info'
400 me
.mon(me
.rstore
, 'load', me
.set_button_status
, me
);
401 me
.rstore
.startUpdate();