]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/node/Subscription.js
ui: cert upload: fix private key field sending empty string
[pve-manager.git] / www / manager6 / node / Subscription.js
CommitLineData
0bef095a 1Ext.define('PVE.node.SubscriptionKeyEdit', {
9fccc702 2 extend: 'Proxmox.window.Edit',
f2833f5f
DC
3 title: gettext('Upload Subscription Key'),
4 width: 300,
5 items: {
6 xtype: 'textfield',
7 name: 'key',
8 value: '',
dc54cdf8 9 fieldLabel: gettext('Subscription Key'),
f2833f5f 10 },
dc54cdf8 11 initComponent: function() {
0bef095a
DM
12 var me = this;
13
0bef095a
DM
14 me.callParent();
15
16 me.load();
dc54cdf8 17 },
0bef095a
DM
18});
19
20Ext.define('PVE.node.Subscription', {
8ea2c870 21 extend: 'Proxmox.grid.ObjectGrid',
0bef095a
DM
22
23 alias: ['widget.pveNodeSubscription'],
24
ba93a9c6
DC
25 onlineHelp: 'getting_help',
26
e83795f5 27 viewConfig: {
dc54cdf8 28 enableTextSelection: true,
e83795f5 29 },
0bef095a
DM
30
31 showReport: function() {
32 var me = this;
0bef095a 33
a764c5f7 34 var getReportFileName = function() {
0bef095a 35 var now = Ext.Date.format(new Date(), 'D-d-F-Y-G-i');
dc54cdf8 36 return `${me.nodename}-pve-report-${now}.txt`;
a764c5f7 37 };
0bef095a
DM
38
39 var view = Ext.createWidget('component', {
40 itemId: 'system-report-view',
f2833f5f 41 scrollable: true,
0bef095a 42 style: {
0bef095a
DM
43 'white-space': 'pre',
44 'font-family': 'monospace',
dc54cdf8
TL
45 padding: '5px',
46 },
0bef095a
DM
47 });
48
49 var reportWindow = Ext.create('Ext.window.Window', {
50 title: gettext('System Report'),
51 width: 1024,
52 height: 600,
53 layout: 'fit',
54 modal: true,
55 buttons: [
bc12fba5
TL
56 '->',
57 {
58 text: gettext('Download'),
59 handler: function() {
60 var fileContent = Ext.String.htmlDecode(reportWindow.getComponent('system-report-view').html);
61 var fileName = getReportFileName();
62
63 // Internet Explorer
64 if (window.navigator.msSaveOrOpenBlob) {
65 navigator.msSaveOrOpenBlob(new Blob([fileContent]), fileName);
66 } else {
67 var element = document.createElement('a');
dc54cdf8
TL
68 element.setAttribute('href', 'data:text/plain;charset=utf-8,' +
69 encodeURIComponent(fileContent));
bc12fba5
TL
70 element.setAttribute('download', fileName);
71 element.style.display = 'none';
72 document.body.appendChild(element);
73 element.click();
74 document.body.removeChild(element);
22f2f9d6 75 }
dc54cdf8
TL
76 },
77 },
bc12fba5 78 ],
dc54cdf8 79 items: view,
0bef095a
DM
80 });
81
e7ade592 82 Proxmox.Utils.API2Request({
0bef095a
DM
83 url: '/api2/extjs/nodes/' + me.nodename + '/report',
84 method: 'GET',
85 waitMsgTarget: me,
86 failure: function(response) {
87 Ext.Msg.alert(gettext('Error'), response.htmlStatus);
88 },
89 success: function(response) {
90 var report = Ext.htmlEncode(response.result.data);
91 reportWindow.show();
92 view.update(report);
dc54cdf8 93 },
0bef095a
DM
94 });
95 },
96
dc54cdf8 97 initComponent: function() {
0bef095a
DM
98 var me = this;
99
100 if (!me.nodename) {
101 throw "no node name specified";
102 }
103
104 var reload = function() {
105 me.rstore.load();
106 };
107
108 var baseurl = '/nodes/' + me.nodename + '/subscription';
109
110 var render_status = function(value) {
0bef095a 111 var message = me.getObjectValue('message');
0bef095a
DM
112 if (message) {
113 return value + ": " + message;
114 }
115 return value;
116 };
117
118 var rows = {
119 productname: {
dc54cdf8 120 header: gettext('Type'),
0bef095a
DM
121 },
122 key: {
dc54cdf8 123 header: gettext('Subscription Key'),
0bef095a
DM
124 },
125 status: {
126 header: gettext('Status'),
dc54cdf8 127 renderer: render_status,
0bef095a
DM
128 },
129 message: {
dc54cdf8 130 visible: false,
0bef095a
DM
131 },
132 serverid: {
dc54cdf8 133 header: gettext('Server ID'),
0bef095a
DM
134 },
135 sockets: {
dc54cdf8 136 header: gettext('Sockets'),
0bef095a
DM
137 },
138 checktime: {
139 header: gettext('Last checked'),
dc54cdf8 140 renderer: Proxmox.Utils.render_timestamp,
0bef095a
DM
141 },
142 nextduedate: {
dc54cdf8
TL
143 header: gettext('Next due date'),
144 },
dc17baee
FG
145 signature: {
146 header: gettext('Signed/Offline'),
147 renderer: (value) => {
148 if (value) {
149 return gettext('Yes');
150 } else {
151 return gettext('No');
152 }
153 },
154 },
0bef095a
DM
155 };
156
f2833f5f 157 Ext.apply(me, {
0bef095a
DM
158 url: '/api2/json' + baseurl,
159 cwidth1: 170,
dc54cdf8 160 tbar: [
0bef095a
DM
161 {
162 text: gettext('Upload Subscription Key'),
163 handler: function() {
164 var win = Ext.create('PVE.node.SubscriptionKeyEdit', {
dc54cdf8 165 url: '/api2/extjs/' + baseurl,
0bef095a
DM
166 });
167 win.show();
168 win.on('destroy', reload);
dc54cdf8 169 },
0bef095a
DM
170 },
171 {
172 text: gettext('Check'),
173 handler: function() {
e7ade592 174 Proxmox.Utils.API2Request({
0bef095a
DM
175 params: { force: 1 },
176 url: baseurl,
177 method: 'POST',
178 waitMsgTarget: me,
179 failure: function(response, opts) {
180 Ext.Msg.alert(gettext('Error'), response.htmlStatus);
181 },
dc54cdf8 182 callback: reload,
0bef095a 183 });
dc54cdf8 184 },
0bef095a 185 },
b8af8f2d
TL
186 {
187 text: gettext('Remove Subscription'),
188 xtype: 'proxmoxStdRemoveButton',
4de2b2e7 189 confirmMsg: gettext('Are you sure you want to remove the subscription key?'),
b8af8f2d
TL
190 baseurl: baseurl,
191 dangerous: true,
192 selModel: false,
193 callback: reload,
194 },
195 '-',
0bef095a
DM
196 {
197 text: gettext('System Report'),
198 handler: function() {
dc54cdf8
TL
199 Proxmox.Utils.checked_command(function() { me.showReport(); });
200 },
201 },
0bef095a
DM
202 ],
203 rows: rows,
204 listeners: {
dc54cdf8
TL
205 activate: reload,
206 },
0bef095a
DM
207 });
208
209 me.callParent();
dc54cdf8 210 },
0bef095a 211});