]>
git.proxmox.com Git - proxmox-widget-toolkit.git/blob - src/panel/Certificates.js
1 Ext
.define('Proxmox.panel.Certificates', {
2 extend
: 'Ext.grid.Panel',
3 xtype
: 'pmxCertificates',
5 // array of { name, id (=filename), url, deletable, reloadUi }
6 uploadButtons
: undefined,
8 // The /info path for the current node.
13 header
: gettext('File'),
15 dataIndex
: 'filename',
18 header
: gettext('Issuer'),
23 header
: gettext('Subject'),
28 header
: gettext('Public Key Alogrithm'),
30 dataIndex
: 'public-key-type',
34 header
: gettext('Public Key Size'),
36 dataIndex
: 'public-key-bits',
40 header
: gettext('Valid Since'),
42 dataIndex
: 'notbefore',
43 renderer
: Proxmox
.Utils
.render_timestamp
,
46 header
: gettext('Expires'),
48 dataIndex
: 'notafter',
49 renderer
: Proxmox
.Utils
.render_timestamp
,
52 header
: gettext('Subject Alternative Names'),
55 renderer
: Proxmox
.Utils
.render_san
,
58 header
: gettext('Fingerprint'),
59 dataIndex
: 'fingerprint',
63 header
: gettext('PEM'),
74 delete_certificate: function() {
77 let rec
= me
.selModel
.getSelection()[0];
82 let cert
= me
.certById
[rec
.id
];
84 Proxmox
.Utils
.API2Request({
85 url
: `/api2/extjs/${url}?restart=1`,
87 success: function(response
, opt
) {
90 gettext('GUI will be restarted with new certificates, please reload!');
91 Ext
.getBody().mask(txt
, ['x-mask-loading']);
92 // reload after 10 seconds automatically
93 Ext
.defer(function() {
94 window
.location
.reload(true);
98 failure: function(response
, opt
) {
99 Ext
.Msg
.alert(gettext('Error'), response
.htmlStatus
);
105 xclass
: 'Ext.app.ViewController',
106 view_certificate: function() {
108 let view
= me
.getView();
110 let selection
= view
.getSelection();
111 if (!selection
|| selection
.length
< 1) {
114 let win
= Ext
.create('Proxmox.window.CertificateViewer', {
115 cert
: selection
[0].data
.filename
,
116 url
: `/api2/extjs/${view.infoUrl}`,
123 itemdblclick
: 'view_certificate',
126 initComponent: function() {
130 // only used for the store name
131 me
.nodename
= "_all";
134 if (!me
.uploadButtons
) {
135 throw "no upload buttons defined";
139 throw "no certificate store url given";
142 me
.rstore
= Ext
.create('Proxmox.data.UpdateStore', {
143 storeid
: 'certs-' + me
.nodename
,
144 model
: 'proxmox-certificate',
147 url
: `/api2/extjs/${me.infoUrl}`,
158 me
.deletableCertIds
= {};
160 if (me
.uploadButtons
.length
=== 1) {
161 let cert
= me
.uploadButtons
[0];
164 throw "missing certificate url";
167 me
.certById
[cert
.id
] = cert
;
169 if (cert
.deletable
) {
170 me
.deletableCertIds
[cert
.id
] = true;
176 text
: gettext('Upload Custom Certificate'),
177 handler: function() {
178 let grid
= this.up('grid');
179 let win
= Ext
.create('Proxmox.window.CertificateUpload', {
180 url
: `/api2/extjs/${cert.url}`,
181 reloadUi
: cert
.reloadUi
,
184 win
.on('destroy', grid
.reload
, grid
);
191 me
.selModel
= Ext
.create('Ext.selection.RowModel', {});
193 for (const cert
of me
.uploadButtons
) {
195 throw "missing id in certificate entry";
199 throw "missing url in certificate entry";
203 throw "missing name in certificate entry";
206 me
.certById
[cert
.id
] = cert
;
208 if (cert
.deletable
) {
209 me
.deletableCertIds
[cert
.id
] = true;
213 text
: Ext
.String
.format('Upload {0} Certificate', cert
.name
),
214 handler: function() {
215 let grid
= this.up('grid');
216 let win
= Ext
.create('Proxmox.window.CertificateUpload', {
217 url
: `/api2/extjs/${cert.url}`,
218 reloadUi
: cert
.reloadUi
,
221 win
.on('destroy', grid
.reload
, grid
);
228 text
: gettext('Upload Custom Certificate'),
239 xtype
: 'proxmoxButton',
240 text
: gettext('Delete Custom Certificate'),
241 confirmMsg
: rec
=> Ext
.String
.format(
242 gettext('Are you sure you want to remove the certificate used for {0}'),
243 me
.certById
[rec
.id
].name
,
245 callback
: () => me
.reload(),
246 selModel
: me
.selModel
,
248 enableFn
: rec
=> !!me
.deletableCertIds
[rec
.id
],
249 handler: function() { me
.delete_certificate(); },
253 xtype
: 'proxmoxButton',
256 text
: gettext('View Certificate'),
257 handler
: 'view_certificate',
260 Ext
.apply(me
, { tbar
});
264 me
.rstore
.startUpdate();
265 me
.on('destroy', me
.rstore
.stopUpdate
, me
.rstore
);