]> git.proxmox.com Git - pve-manager.git/blobdiff - www/manager6/qemu/CloudInit.js
ui: cloudinit: match backend privilege checks
[pve-manager.git] / www / manager6 / qemu / CloudInit.js
index 1f7631f79ad0bc23e581dae24eed39333eaa9acb..bb0a7a45844a5461c1cbc496f58ea7aef715efe9 100644 (file)
@@ -10,20 +10,20 @@ Ext.define('PVE.qemu.CloudInit', {
            disabled: true,
            dangerous: true,
            confirmMsg: function(rec) {
-               var me = this.up('grid');
+               let view = this.up('grid');
                var warn = gettext('Are you sure you want to remove entry {0}');
 
                var entry = rec.data.key;
                var msg = Ext.String.format(warn, "'"
-                   + me.renderKey(entry, {}, rec) + "'");
+                   + view.renderKey(entry, {}, rec) + "'");
 
                return msg;
            },
            enableFn: function(record) {
-               var me = this.up('grid');
+               let view = this.up('grid');
                var caps = Ext.state.Manager.get('GuiCap');
-               if (me.rows[record.data.key].never_delete ||
-                   !caps.vms['VM.Config.Network']) {
+               let caps_ci = caps.vms['VM.Config.Network'] || caps.vms['VM.Config.Cloudinit'];
+               if (view.rows[record.data.key].never_delete || !caps_ci) {
                    return false;
                }
 
@@ -33,9 +33,9 @@ Ext.define('PVE.qemu.CloudInit', {
                return true;
            },
            handler: function() {
-               var me = this.up('grid');
-               var records = me.getSelection();
-               if (!records ||  !records.length) {
+               let view = this.up('grid');
+               let records = view.getSelection();
+               if (!records || !records.length) {
                    return;
                }
 
@@ -46,34 +46,34 @@ Ext.define('PVE.qemu.CloudInit', {
                }
 
                var params = {};
-               params['delete'] = id;
+               params.delete = id;
                Proxmox.Utils.API2Request({
-                   url: me.baseurl + '/config',
-                   waitMsgTarget: me,
+                   url: view.baseurl + '/config',
+                   waitMsgTarget: view,
                    method: 'PUT',
                    params: params,
                    failure: function(response, opts) {
                        Ext.Msg.alert('Error', response.htmlStatus);
                    },
                    callback: function() {
-                       me.reload();
-                   }
+                       view.reload();
+                   },
                });
            },
-           text: gettext('Remove')
+           text: gettext('Remove'),
        },
        {
            xtype: 'proxmoxButton',
            disabled: true,
            enableFn: function(rec) {
-               let me = this.up('pveCiPanel');
-               return !!me.rows[rec.data.key].editor;
+               let view = this.up('pveCiPanel');
+               return !!view.rows[rec.data.key].editor;
            },
            handler: function() {
-               var me = this.up('grid');
-               me.run_editor();
+               let view = this.up('grid');
+               view.run_editor();
            },
-           text: gettext('Edit')
+           text: gettext('Edit'),
        },
        '-',
        {
@@ -81,43 +81,43 @@ Ext.define('PVE.qemu.CloudInit', {
            itemId: 'savebtn',
            text: gettext('Regenerate Image'),
            handler: function() {
-               var me = this.up('grid');
+               let view = this.up('grid');
                var eject_params = {};
                var insert_params = {};
-               var disk = PVE.Parser.parseQemuDrive(me.ciDriveId, me.ciDrive);
+               let disk = PVE.Parser.parseQemuDrive(view.ciDriveId, view.ciDrive);
                var storage = '';
-               var stormatch = disk.file.match(/^([^\:]+)\:/);
+               var stormatch = disk.file.match(/^([^:]+):/);
                if (stormatch) {
                    storage = stormatch[1];
                }
-               eject_params[me.ciDriveId] = 'none,media=cdrom';
-               insert_params[me.ciDriveId] = storage + ':cloudinit';
+               eject_params[view.ciDriveId] = 'none,media=cdrom';
+               insert_params[view.ciDriveId] = storage + ':cloudinit';
 
                var failure = function(response, opts) {
                    Ext.Msg.alert('Error', response.htmlStatus);
                };
 
                Proxmox.Utils.API2Request({
-                   url: me.baseurl + '/config',
-                   waitMsgTarget: me,
+                   url: view.baseurl + '/config',
+                   waitMsgTarget: view,
                    method: 'PUT',
                    params: eject_params,
                    failure: failure,
                    callback: function() {
                        Proxmox.Utils.API2Request({
-                           url: me.baseurl + '/config',
-                           waitMsgTarget: me,
+                           url: view.baseurl + '/config',
+                           waitMsgTarget: view,
                            method: 'PUT',
                            params: insert_params,
                            failure: failure,
                            callback: function() {
-                               me.reload();
-                           }
+                               view.reload();
+                           },
                        });
-                   }
+                   },
                });
-           }
-       }
+           },
+       },
     ],
 
     border: false,
@@ -164,14 +164,14 @@ Ext.define('PVE.qemu.CloudInit', {
     },
 
     listeners: {
-       activate: function () {
+       activate: function() {
            var me = this;
            me.rstore.startUpdate();
        },
        itemdblclick: function() {
            var me = this;
            me.run_editor();
-       }
+       },
     },
 
     initComponent: function() {
@@ -188,12 +188,11 @@ Ext.define('PVE.qemu.CloudInit', {
        }
        var caps = Ext.state.Manager.get('GuiCap');
        me.baseurl = '/api2/extjs/nodes/' + nodename + '/qemu/' + vmid;
-       me.url =  me.baseurl + '/pending';
+       me.url = me.baseurl + '/pending';
        me.editorConfig.url = me.baseurl + '/config';
        me.editorConfig.pveSelNode = me.pveSelNode;
 
-       let caps_ci = caps.vms['VM.Config.Cloudinit'];
-           || caps.vms['VM.Config.Network'];
+       let caps_ci = caps.vms['VM.Config.Cloudinit'] || caps.vms['VM.Config.Network'];
        /* editor is string and object */
        me.rows = {
            ciuser: {
@@ -210,13 +209,13 @@ Ext.define('PVE.qemu.CloudInit', {
                            deleteEmpty: true,
                            emptyText: Proxmox.Utils.defaultText,
                            fieldLabel: gettext('User'),
-                           name: 'ciuser'
-                       }
-                   ]
+                           name: 'ciuser',
+                       },
+                   ],
                } : undefined,
                renderer: function(value) {
                    return value || Proxmox.Utils.defaultText;
-               }
+               },
            },
            cipassword: {
                header: gettext('Password'),
@@ -232,27 +231,27 @@ Ext.define('PVE.qemu.CloudInit', {
                            deleteEmpty: true,
                            emptyText: Proxmox.Utils.noneText,
                            fieldLabel: gettext('Password'),
-                           name: 'cipassword'
-                       }
-                   ]
+                           name: 'cipassword',
+                       },
+                   ],
                } : undefined,
                renderer: function(value) {
                    return value || Proxmox.Utils.noneText;
-               }
+               },
            },
            searchdomain: {
                header: gettext('DNS domain'),
                iconCls: 'fa fa-globe',
-               editor: caps.vms['VM.Config.Network'] ? 'PVE.lxc.DNSEdit' : undefined,
+               editor: caps_ci ? 'PVE.lxc.DNSEdit' : undefined,
                never_delete: true,
-               defaultValue: gettext('use host settings')
+               defaultValue: gettext('use host settings'),
            },
            nameserver: {
                header: gettext('DNS servers'),
                iconCls: 'fa fa-globe',
-               editor: caps.vms['VM.Config.Network'] ? 'PVE.lxc.DNSEdit' : undefined,
+               editor: caps_ci ? 'PVE.lxc.DNSEdit' : undefined,
                never_delete: true,
-               defaultValue: gettext('use host settings')
+               defaultValue: gettext('use host settings'),
            },
            sshkeys: {
                header: gettext('SSH public key'),
@@ -265,13 +264,10 @@ Ext.define('PVE.qemu.CloudInit', {
                    var text = [];
                    keys.forEach(function(key) {
                        if (key.length) {
-                           // First erase all quoted strings (eg. command="foo"
-                           var v = key.replace(/"(?:\\.|[^"\\])*"/g, '');
-                           // Now try to detect the comment:
-                           var res = v.match(/^\s*(\S+\s+)?(?:ssh-(?:dss|rsa|ed25519)|ecdsa-sha2-nistp\d+)\s+\S+\s+(.*?)\s*$/, '');
+                           let res = PVE.Parser.parseSSHKey(key);
                            if (res) {
-                               key = Ext.String.htmlEncode(res[2]);
-                               if (res[1]) {
+                               key = Ext.String.htmlEncode(res.comment);
+                               if (res.options) {
                                    key += ' <span style="color:gray">(' + gettext('with options') + ')</span>';
                                }
                                text.push(key);
@@ -288,8 +284,8 @@ Ext.define('PVE.qemu.CloudInit', {
                        return Proxmox.Utils.noneText;
                    }
                },
-               defaultValue: ''
-           }
+               defaultValue: '',
+           },
        };
        var i;
        var ipconfig_renderer = function(value, md, record, ri, ci, store, pending) {
@@ -307,21 +303,21 @@ Ext.define('PVE.qemu.CloudInit', {
            me.rows['net' + i.toString()] = {
                multiKey: ['ipconfig' + i.toString(), 'net' + i.toString()],
                header: gettext('IP Config') + ' (net' + i.toString() +')',
-               editor: caps.vms['VM.Config.Network'] ? 'PVE.qemu.IPConfigEdit' : undefined,
+               editor: caps_ci ? 'PVE.qemu.IPConfigEdit' : undefined,
                iconCls: 'fa fa-exchange',
-               renderer: ipconfig_renderer
+               renderer: ipconfig_renderer,
            };
            me.rows['ipconfig' + i.toString()] = {
-               visible: false
+               visible: false,
            };
        }
 
        PVE.Utils.forEachBus(['ide', 'scsi', 'sata'], function(type, id) {
            me.rows[type+id] = {
-               visible: false
+               visible: false,
            };
        });
        me.callParent();
        me.mon(me.rstore, 'load', me.set_button_status, me);
-    }
+    },
 });