X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=js%2FUtils.js;h=ce15d06ebbe0d9a1443cb4a1e8fa12c73e399e18;hb=4eab05c2737dd769748cb837803f847cfce034c5;hp=4569ce752dd837dd81d277e694a9bd511e291dd3;hpb=ad88af09eebbd644c66a6afffd95998bcc0cea40;p=pmg-gui.git diff --git a/js/Utils.js b/js/Utils.js index 4569ce7..ce15d06 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'), @@ -27,7 +40,42 @@ Ext.define('PMG.Utils', { when: ' ', action: ' ', from: ' ', - to: ' ', + 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) { @@ -56,21 +104,30 @@ 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) { - if (p === undefined) return 'LDAP'; - if (p === 'ldap') return 'LDAP'; - if (p === 'ldaps') return 'LDAPS'; + if (p === undefined) { return 'LDAP'; } + if (p === 'ldap') { return 'LDAP'; } + if (p === 'ldaps') { return 'LDAPS'; } return 'unknown'; }, + convert_field_to_per_min: function(value, record) { + return (value/(record.data.timespan/60)); + }, + object_editors: { 1000: { + onlineHelp: 'pmg_mailfilter_regex', + iconCls: 'fa fa-filter', xtype: 'proxmoxWindowEdit', subdir: 'regex', subject: gettext("Regular Expression"), @@ -80,21 +137,35 @@ Ext.define('PMG.Utils', { xtype: 'textfield', name: 'regex', labelWidth: 150, + reference: 'regex', fieldLabel: gettext("Regular Expression") + }, + { + labelWidth: 150, + fieldLabel: gettext('Test String'), + xtype: 'pmgRegexTester', + wholeMatch: true, + regexFieldReference: 'regex' } ] }, 1005: { + onlineHelp: 'pmgconfig_ldap', + iconCls: 'fa fa-users', xtype: 'pmgLDAPGroupEditor', subdir: 'ldap', subject: gettext("LDAP Group") }, 1006: { + onlineHelp: 'pmgconfig_ldap', + iconCls: 'fa fa-user', xtype: 'pmgLDAPUserEditor', subdir: 'ldapuser', subject: gettext("LDAP User") }, 1009: { + onlineHelp: 'pmg_mailfilter_regex', + iconCls: 'fa fa-filter', xtype: 'proxmoxWindowEdit', subdir: 'receiver_regex', subject: gettext("Regular Expression"), @@ -110,33 +181,39 @@ Ext.define('PMG.Utils', { ] }, 1001: { + onlineHelp: 'pmg_mailfilter_who', + 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: { + onlineHelp: 'pmg_mailfilter_who', + 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: { + onlineHelp: 'pmg_mailfilter_who', + iconCls: 'fa fa-globe', xtype: 'proxmoxWindowEdit', subdir: 'domain', subject: gettext("Domain"), @@ -150,6 +227,8 @@ Ext.define('PMG.Utils', { ] }, 1008: { + onlineHelp: 'pmg_mailfilter_who', + iconCls: 'fa fa-globe', xtype: 'proxmoxWindowEdit', subdir: 'receiver_domain', subject: gettext("Domain"), @@ -164,6 +243,8 @@ Ext.define('PMG.Utils', { ] }, 1003: { + onlineHelp: 'pmg_mailfilter_who', + iconCls: 'fa fa-globe', xtype: 'proxmoxWindowEdit', subdir: 'ip', subject: gettext("IP Address"), @@ -177,6 +258,8 @@ Ext.define('PMG.Utils', { ] }, 1004: { + onlineHelp: 'pmg_mailfilter_who', + iconCls: 'fa fa-globe', xtype: 'proxmoxWindowEdit', subdir: 'network', subject: gettext("IP Network"), @@ -190,6 +273,8 @@ Ext.define('PMG.Utils', { ] }, 2000: { + onlineHelp: 'pmg_mailfilter_when', + iconCls: 'fa fa-clock-o', xtype: 'proxmoxWindowEdit', subdir: 'timeframe', subject: gettext("TimeFrame"), @@ -208,7 +293,268 @@ Ext.define('PMG.Utils', { } ] }, + 3000: { + onlineHelp: 'pmg_mailfilter_what', + iconCls: 'fa fa-bullhorn', + xtype: 'proxmoxWindowEdit', + subdir: 'spamfilter', + subject: gettext('Spam Filter'), + items: [ + { + xtype: 'proxmoxintegerfield', + name: 'spamlevel', + allowBlank: false, + minValue: 0, + fieldLabel: gettext('Level') + } + ] + }, + 3001: { + onlineHelp: 'pmg_mailfilter_what', + 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: { + onlineHelp: 'pmg_mailfilter_regex', + iconCls: 'fa fa-code', + xtype: 'proxmoxWindowEdit', + subdir: 'matchfield', + subject: gettext('Match Field'), + width: 400, + items: [ + { + xtype: 'textfield', + name: 'field', + labelWidth: 150, + allowBlank: false, + fieldLabel: gettext('Field') + }, + { + xtype: 'textfield', + reference: 'value', + name: 'value', + labelWidth: 150, + allowBlank: false, + fieldLabel: gettext('Value') + }, + { + labelWidth: 150, + fieldLabel: gettext('Test String'), + xtype: 'pmgRegexTester', + regexFieldReference: 'value' + } + ] + }, + 3003: { + onlineHelp: 'pmg_mailfilter_what', + iconCls: 'fa fa-file-image-o', + xtype: 'proxmoxWindowEdit', + subdir: 'contenttype', + width: 400, + subject: gettext('Content Type Filter'), + items: [ + { + xtype: 'combobox', + displayField: 'text', + labelWidth: 150, + valueField: 'mimetype', + name: 'contenttype', + editable: true, + queryMode: 'local', + store: { + autoLoad: true, + proxy: { + type: 'proxmox', + url: '/api2/json/config/mimetypes' + } + }, + fieldLabel: gettext('Content Type'), + anyMatch: true, + matchFieldWidth: false, + listeners: { + change: function(cb, value) { + var me = this; + me.up().down('displayfield').setValue(value); + } + } + }, + { + xtype: 'displayfield', + fieldLabel: gettext('Value'), + labelWidth: 150, + allowBlank: false, + reset: Ext.emptyFn + } + ] + }, + 3004: { + onlineHelp: 'pmg_mailfilter_regex', + iconCls: 'fa fa-file-o', + xtype: 'proxmoxWindowEdit', + subdir: 'filenamefilter', + width: 400, + subject: gettext('Match Filename'), + items: [ + { + xtype: 'textfield', + name: 'filename', + reference: 'filename', + fieldLabel: gettext('Filename'), + labelWidth: 150, + allowBlank: false + }, + { + labelWidth: 150, + fieldLabel: gettext('Test String'), + wholeMatch: true, + xtype: 'pmgRegexTester', + regexFieldReference: 'filename' + } + ] + }, + 3005: { + onlineHelp: 'pmg_mailfilter_what', + iconCls: 'fa fa-file-archive-o', + xtype: 'proxmoxWindowEdit', + subdir: 'archivefilter', + width: 400, + subject: gettext('Archive Filter'), + items: [ + { + xtype: 'combobox', + displayField: 'text', + labelWidth: 150, + valueField: 'mimetype', + name: 'contenttype', + editable: true, + queryMode: 'local', + store: { + autoLoad: true, + proxy: { + type: 'proxmox', + url: '/api2/json/config/mimetypes' + } + }, + fieldLabel: gettext('Content Type'), + anyMatch: true, + matchFieldWidth: false, + listeners: { + change: function(cb, value) { + var me = this; + me.up().down('displayfield').setValue(value); + } + } + }, + { + xtype: 'displayfield', + fieldLabel: gettext('Value'), + labelWidth: 150, + allowBlank: false, + reset: Ext.emptyFn + } + ] + }, + 4002: { + onlineHelp: 'pmg_mailfilter_action', + 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: { + onlineHelp: 'pmg_mailfilter_action', + 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: { + onlineHelp: 'pmg_mailfilter_action', xtype: 'proxmoxWindowEdit', subdir: 'bcc', subject: gettext('BCC'), @@ -239,20 +585,72 @@ Ext.define('PMG.Utils', { } ] + }, + 4007: { + onlineHelp: 'pmg_mailfilter_action', + 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: { + onlineHelp: 'pmg_mailfilter_action', + 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; @@ -263,7 +661,7 @@ Ext.define('PMG.Utils', { extractQuarantineAction: function() { - if (PMG.Utils.quarantineActionExtracted) return; + if (PMG.Utils.quarantineActionExtracted) { return; } PMG.Utils.quarantineActionExtracted = true; @@ -272,26 +670,90 @@ 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); var newurl = location.protocol + "//" + location.host + location.pathname; - if (newsearch) newurl += '?' + newsearch; + if (newsearch) { newurl += '?' + newsearch; } newurl += location.hash; if (window.history) { 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;