X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=js%2FUtils.js;h=ce15d06ebbe0d9a1443cb4a1e8fa12c73e399e18;hb=4eab05c2737dd769748cb837803f847cfce034c5;hp=9b7d112f37ed99a5ca5bb92785fd317acc16197b;hpb=f6b1b3bfab22e4562f4b6246f46c13e1d3e602db;p=pmg-gui.git diff --git a/js/Utils.js b/js/Utils.js index 9b7d112..ce15d06 100644 --- a/js/Utils.js +++ b/js/Utils.js @@ -1,3 +1,4 @@ +/*global Proxmox */ Ext.ns('PMG'); console.log("Starting PMG Manager"); @@ -10,12 +11,77 @@ Ext.define('PMG.Utils', { senderText: gettext('Sender'), 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'), when: gettext('When Objects'), - action: gettext('Action Objects') + action: gettext('Action Objects'), + from: gettext('From'), + to: gettext('To') + }, + + oclass_icon: { + who: ' ', + what: ' ', + when: ' ', + action: ' ', + from: ' ', + 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; + return icon + text; }, rule_direction_text: { @@ -24,27 +90,45 @@ Ext.define('PMG.Utils', { 2: gettext('In & Out') }, + rule_direction_icon: { + 0: ' ', + 1: ' ', + 2: ' ' + }, + format_rule_direction: function(dir) { - return PMG.Utils.rule_direction_text[dir] || dir; + var icon = PMG.Utils.rule_direction_icon[dir] || ''; + var text = PMG.Utils.rule_direction_text[dir] || dir; + return icon + text; }, 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"), width: 400, @@ -53,11 +137,36 @@ 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"), receivertest: true, @@ -72,31 +181,40 @@ 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"), width: 400, @@ -109,6 +227,9 @@ Ext.define('PMG.Utils', { ] }, 1008: { + onlineHelp: 'pmg_mailfilter_who', + iconCls: 'fa fa-globe', + xtype: 'proxmoxWindowEdit', subdir: 'receiver_domain', subject: gettext("Domain"), receivertest: true, @@ -122,6 +243,9 @@ Ext.define('PMG.Utils', { ] }, 1003: { + onlineHelp: 'pmg_mailfilter_who', + iconCls: 'fa fa-globe', + xtype: 'proxmoxWindowEdit', subdir: 'ip', subject: gettext("IP Address"), width: 400, @@ -134,6 +258,9 @@ Ext.define('PMG.Utils', { ] }, 1004: { + onlineHelp: 'pmg_mailfilter_who', + iconCls: 'fa fa-globe', + xtype: 'proxmoxWindowEdit', subdir: 'network', subject: gettext("IP Network"), width: 400, @@ -146,6 +273,9 @@ Ext.define('PMG.Utils', { ] }, 2000: { + onlineHelp: 'pmg_mailfilter_when', + iconCls: 'fa fa-clock-o', + xtype: 'proxmoxWindowEdit', subdir: 'timeframe', subject: gettext("TimeFrame"), items: [ @@ -163,7 +293,269 @@ 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'), width: 400, @@ -193,18 +585,173 @@ 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") + } + ] + } + }, + + updateLoginData: function(data) { + Proxmox.CSRFPreventionToken = data.CSRFPreventionToken; + Proxmox.UserName = data.username; + Ext.util.Cookies.set('PMGAuthCookie', data.ticket, null, '/', null, true ); + }, + + quarantineActionExtracted: false, + + extractQuarantineAction: function() { + + if (PMG.Utils.quarantineActionExtracted) { return; } + + PMG.Utils.quarantineActionExtracted = true; + + var qs = Ext.Object.fromQueryString(location.search); + + 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; } + newurl += location.hash; + + if (window.history) { + window.history.pushState({ path:newurl }, '', newurl); + } + + if (action || cselect) { + return { action: action, cselect: cselect }; } }, - openVNCViewer: function(consoletype, nodename) { - var url = Ext.urlEncode({ - console: consoletype, // upgrade or shell - novnc: 1, - node: nodename + 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(); + } + } }); - var nw = window.open("?" + url, '_blank', - "innerWidth=745,innerheight=427"); - nw.focus(); + /*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() {