X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=js%2FUtils.js;h=852f653bb14a608ba33d969326672be71c9ae33d;hb=74901b37dff8e0c25d5a3d64daa253ad6e4598b8;hp=200a50ea93dc711d5018c9742ab1fd3036f6f898;hpb=cc6b80b6c860858f20f95c7858a46bb1b21ce734;p=pmg-gui.git diff --git a/js/Utils.js b/js/Utils.js index 200a50e..852f653 100644 --- a/js/Utils.js +++ b/js/Utils.js @@ -1,3 +1,4 @@ +/*global Proxmox */ Ext.ns('PMG'); console.log("Starting PMG Manager"); @@ -12,6 +13,18 @@ Ext.define('PMG.Utils', { receiverText: gettext('Receiver'), scoreText: gettext('Score'), + user_role_text: { + root: gettext('Superuser'), + admin: gettext('Administrator'), + helpdesk: gettext('Help Desk'), + qmanager: gettext('Quarantine Manager'), + audit: gettext('Auditor') + }, + + format_user_role: function(role) { + return PMG.Utils.user_role_text[role] || role; + }, + oclass_text: { who: gettext('Who Objects'), what: gettext('What Objects'), @@ -30,6 +43,41 @@ Ext.define('PMG.Utils', { to: ' ' }, + mail_status_map: { + 2: 'delivered', + 4: 'deferred', + 5: 'bounced', + N: 'rejected', + G: 'greylisted', + A: 'accepted', + B: 'blocked', + Q: 'quarantine' + }, + + icon_status_map_class: { + 2: 'check-circle', + 4: 'clock-o', + 5: 'mail-reply', + N: 'times-circle', + G: 'list', + A: 'check', + B: 'ban', + Q: 'cube' + }, + + icon_status_map_color: { + 2: 'green', + 5: 'gray', + A: 'green', + B: 'red' + }, + + format_status_icon: function(status) { + var icon = PMG.Utils.icon_status_map_class[status] || 'question-circle'; + var color = PMG.Utils.icon_status_map_color[status] || ''; + return ' '; + }, + format_oclass: function(oclass) { var icon = PMG.Utils.oclass_icon[oclass] || ''; var text = PMG.Utils.oclass_text[oclass] || oclass; @@ -56,10 +104,13 @@ Ext.define('PMG.Utils', { format_otype: function(otype) { var editor = PMG.Utils.object_editors[otype]; + var iconCls = 'fa fa-question-circle'; if (editor) { - return editor.subject; + var icon = ' '; + return icon + editor.subject; } - return 'unknown'; + + return ' unknown'; }, format_ldap_protocol: function(p) { @@ -69,8 +120,13 @@ Ext.define('PMG.Utils', { return 'unknown'; }, + convert_field_to_per_min: function(value, record) { + return (value/(record.data.timespan/60)); + }, + object_editors: { 1000: { + iconCls: 'fa fa-filter', xtype: 'proxmoxWindowEdit', subdir: 'regex', subject: gettext("Regular Expression"), @@ -80,21 +136,31 @@ Ext.define('PMG.Utils', { xtype: 'textfield', name: 'regex', labelWidth: 150, + reference: 'regex', fieldLabel: gettext("Regular Expression") + }, + { + labelWidth: 150, + fieldLabel: gettext('Test String'), + xtype: 'pmgRegexTester', + regexFieldReference: 'regex' } ] }, 1005: { + iconCls: 'fa fa-users', xtype: 'pmgLDAPGroupEditor', subdir: 'ldap', subject: gettext("LDAP Group") }, 1006: { + iconCls: 'fa fa-user', xtype: 'pmgLDAPUserEditor', subdir: 'ldapuser', subject: gettext("LDAP User") }, 1009: { + iconCls: 'fa fa-filter', xtype: 'proxmoxWindowEdit', subdir: 'receiver_regex', subject: gettext("Regular Expression"), @@ -110,33 +176,36 @@ Ext.define('PMG.Utils', { ] }, 1001: { + iconCls: 'fa fa-envelope-o', xtype: 'proxmoxWindowEdit', subdir: 'email', - subject: gettext("Email"), + subject: gettext("E-Mail"), width: 400, items: [ { xtype: 'textfield', name: 'email', - fieldLabel: gettext("Email") + fieldLabel: gettext("E-Mail") } ] }, 1007: { + iconCls: 'fa fa-envelope-o', xtype: 'proxmoxWindowEdit', subdir: 'receiver', - subject: gettext("Email"), + subject: gettext("E-Mail"), receivertest: true, width: 400, items: [ { xtype: 'textfield', name: 'email', - fieldLabel: gettext("Email") + fieldLabel: gettext("E-Mail") } ] }, 1002: { + iconCls: 'fa fa-globe', xtype: 'proxmoxWindowEdit', subdir: 'domain', subject: gettext("Domain"), @@ -150,6 +219,7 @@ Ext.define('PMG.Utils', { ] }, 1008: { + iconCls: 'fa fa-globe', xtype: 'proxmoxWindowEdit', subdir: 'receiver_domain', subject: gettext("Domain"), @@ -164,6 +234,7 @@ Ext.define('PMG.Utils', { ] }, 1003: { + iconCls: 'fa fa-globe', xtype: 'proxmoxWindowEdit', subdir: 'ip', subject: gettext("IP Address"), @@ -177,6 +248,7 @@ Ext.define('PMG.Utils', { ] }, 1004: { + iconCls: 'fa fa-globe', xtype: 'proxmoxWindowEdit', subdir: 'network', subject: gettext("IP Network"), @@ -190,6 +262,7 @@ Ext.define('PMG.Utils', { ] }, 2000: { + iconCls: 'fa fa-clock-o', xtype: 'proxmoxWindowEdit', subdir: 'timeframe', subject: gettext("TimeFrame"), @@ -209,6 +282,7 @@ Ext.define('PMG.Utils', { ] }, 3000: { + iconCls: 'fa fa-bullhorn', xtype: 'proxmoxWindowEdit', subdir: 'spamfilter', subject: gettext('Spam Filter'), @@ -222,7 +296,21 @@ Ext.define('PMG.Utils', { } ] }, + 3001: { + iconCls: 'fa fa-bug', + xtype: 'proxmoxWindowEdit', + subdir: 'virusfilter', + subject: gettext('Virus Filter'), + uneditable: true, + // there are no parameters to give, so we simply submit it + listeners: { + show: function(win) { + win.submit(); + } + } + }, 3002: { + iconCls: 'fa fa-code', xtype: 'proxmoxWindowEdit', subdir: 'matchfield', subject: gettext('Match Field'), @@ -252,6 +340,7 @@ Ext.define('PMG.Utils', { ] }, 3003: { + iconCls: 'fa fa-file-image-o', xtype: 'proxmoxWindowEdit', subdir: 'contenttype', width: 400, @@ -292,6 +381,7 @@ Ext.define('PMG.Utils', { ] }, 3004: { + iconCls: 'fa fa-file-o', xtype: 'proxmoxWindowEdit', subdir: 'filenamefilter', width: 400, @@ -315,6 +405,7 @@ Ext.define('PMG.Utils', { ] }, 3005: { + iconCls: 'fa fa-file-archive-o', xtype: 'proxmoxWindowEdit', subdir: 'archivefilter', width: 400, @@ -354,6 +445,94 @@ Ext.define('PMG.Utils', { } ] }, + 4002: { + xtype: 'proxmoxWindowEdit', + subdir: 'notification', + subject: gettext('Notification'), + width: 400, + items: [ + { + xtype: 'textfield', + name: 'name', + allowBlank: false, + fieldLabel: gettext('Name') + }, + { + xtype: 'textareafield', + name: 'info', + fieldLabel: gettext("Description") + }, + { + xtype: 'textfield', + name: 'to', + allowBlank: false, + value: '__ADMIN__', + fieldLabel: gettext('Receiver') + }, + { + xtype: 'textfield', + name: 'subject', + allowBlank: false, + value: 'Notification: __SUBJECT__', + fieldLabel: gettext('Subject') + }, + { + xtype: 'textarea', + name: 'body', + allowBlank: false, + grow: true, + growMax: 250, + value: + "Proxmox Notifcation:\n\n" + + "Sender: __SENDER__\n" + + "Receiver: __RECEIVERS__\n" + + "Targets: __TARGETS__\n\n" + + "Subject: __SUBJECT__\n\n" + + "Matching Rule: __RULE__\n\n" + + "__RULE_INFO__\n\n" + + "__VIRUS_INFO__\n" + + "__SPAM_INFO__\n", + fieldLabel: gettext('Body') + }, + { + xtype: 'proxmoxcheckbox', + name: 'attach', + fieldLabel: gettext("Attach orig. Mail") + } + ] + }, + 4003: { + xtype: 'proxmoxWindowEdit', + subdir: 'field', + subject: gettext('Header Attribute'), + width: 400, + items: [ + { + xtype: 'textfield', + name: 'name', + allowBlank: false, + fieldLabel: gettext('Name') + }, + { + xtype: 'textareafield', + name: 'info', + fieldLabel: gettext("Description") + }, + { + xtype: 'textfield', + name: 'field', + allowBlank: false, + fieldLabel: gettext('Field') + }, + { + xtype: 'textfield', + reference: 'value', + name: 'value', + allowBlank: false, + fieldLabel: gettext('Value') + } + ] + }, 4005: { xtype: 'proxmoxWindowEdit', subdir: 'bcc', @@ -385,20 +564,70 @@ Ext.define('PMG.Utils', { } ] + }, + 4007: { + xtype: 'proxmoxWindowEdit', + subdir: 'removeattachments', + subject: gettext('Remove Attachments'), + width: 500, + fieldDefaults: { + labelWidth: 150 + }, + items: [ + { + xtype: 'textfield', + name: 'name', + allowBlank: false, + fieldLabel: gettext('Name') + }, + { + xtype: 'textareafield', + name: 'info', + fieldLabel: gettext("Description") + }, + { + xtype: 'textareafield', + name: 'text', + grow: true, + growMax: 250, + fieldLabel: gettext("Text Replacement") + }, + { + xtype: 'proxmoxcheckbox', + checked: true, + name: 'all', + fieldLabel: gettext("Remove all attachments") + } + ] + }, + 4009: { + xtype: 'proxmoxWindowEdit', + subdir: 'disclaimer', + subject: gettext('Disclaimer'), + width: 400, + items: [ + { + xtype: 'textfield', + name: 'name', + allowBlank: false, + fieldLabel: gettext('Name') + }, + { + xtype: 'textareafield', + name: 'info', + fieldLabel: gettext("Description") + }, + { + xtype: 'textareafield', + name: 'disclaimer', + grow: true, + growMax: 250, + fieldLabel: gettext("Disclaimer") + } + ] } }, - openVNCViewer: function(consoletype, nodename) { - var url = Ext.urlEncode({ - console: consoletype, // upgrade or shell - novnc: 1, - node: nodename - }); - var nw = window.open("?" + url, '_blank', - "innerWidth=745,innerheight=427"); - nw.focus(); - }, - updateLoginData: function(data) { Proxmox.CSRFPreventionToken = data.CSRFPreventionToken; Proxmox.UserName = data.username; @@ -418,10 +647,22 @@ Ext.define('PMG.Utils', { var cselect = qs.cselect; var action = qs.action; var ticket = qs.ticket; + var dateString = qs.date; + + if (dateString) { + var date = new Date(dateString).getTime()/1000; + + // set from date for QuarantineList + /*jslint confusion: true*/ + /*from is a string above and number here */ + PMG.QuarantineList.from = date; + /*jslint confusion: false*/ + } delete qs.cselect; delete qs.action; delete qs.ticket; + delete qs.date; var newsearch = Ext.Object.toQueryString(qs); @@ -433,11 +674,63 @@ Ext.define('PMG.Utils', { window.history.pushState({ path:newurl }, '', newurl); } - if (action && cselect) { + if (action || cselect) { return { action: action, cselect: cselect }; } }, + doQuarantineAction: function(action, id, callback) { + var count = id.split(';').length; + var successMessage = "Action '{0}'"; + if (count > 1) { + successMessage += " for '{1}' items"; + } + successMessage += " successful"; + + /*jslint confusion: true*/ + /*format is string and function*/ + Proxmox.Utils.API2Request({ + url: '/quarantine/content/', + params: { + action: action, + id: id + }, + method: 'POST', + failure: function(response, opts) { + Ext.Msg.alert(gettext('Error'), response.htmlStatus); + }, + success: function(response, opts) { + var win = Ext.create('Ext.window.MessageBox',{ + closeAction: 'destroy' + }).show({ + title: gettext('Info'), + message: Ext.String.format(successMessage, action, count), + buttons: Ext.Msg.OK, + icon: Ext.MessageBox.INFO + }); + + if (Ext.isFunction(callback)) { + callback(); + } + } + }); + /*jslint confusion: false*/ + }, + + sender_renderer: function(value, metaData, rec) { + var subject = Ext.htmlEncode(value); + var from = Ext.htmlEncode(rec.data.from); + var sender = Ext.htmlEncode(rec.data.sender); + if (sender) { + /*jslint confusion: true*/ + /*format is a string above*/ + from = Ext.String.format(gettext("{0} on behalf of {1}"), + sender, from); + /*jslint confusion: false*/ + } + return '' + from + '
' + subject; + }, + constructor: function() { var me = this;