|
@@ -5,6 +5,7 @@ jQuery(function($){
|
|
var entityMap={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/","`":"`","=":"="};
|
|
var entityMap={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/","`":"`","=":"="};
|
|
function jq(myid) {return "#" + myid.replace( /(:|\.|\[|\]|,|=|@)/g, "\\$1" );}
|
|
function jq(myid) {return "#" + myid.replace( /(:|\.|\[|\]|,|=|@)/g, "\\$1" );}
|
|
function escapeHtml(n){return String(n).replace(/[&<>"'`=\/]/g,function(n){return entityMap[n]})}
|
|
function escapeHtml(n){return String(n).replace(/[&<>"'`=\/]/g,function(n){return entityMap[n]})}
|
|
|
|
+ function validateRegex(e){var t=e.split("/"),n=e,r="";t.length>1&&(n=t[1],r=t[2]);try{return new RegExp(n,r),!0}catch(e){return!1}}
|
|
function humanFileSize(i){if(Math.abs(i)<1024)return i+" B";var B=["KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"],e=-1;do{i/=1024,++e}while(Math.abs(i)>=1024&&e<B.length-1);return i.toFixed(1)+" "+B[e]}
|
|
function humanFileSize(i){if(Math.abs(i)<1024)return i+" B";var B=["KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"],e=-1;do{i/=1024,++e}while(Math.abs(i)>=1024&&e<B.length-1);return i.toFixed(1)+" "+B[e]}
|
|
function hashCode(t){for(var n=0,r=0;r<t.length;r++)n=t.charCodeAt(r)+((n<<5)-n);return n}
|
|
function hashCode(t){for(var n=0,r=0;r<t.length;r++)n=t.charCodeAt(r)+((n<<5)-n);return n}
|
|
function intToRGB(t){var n=(16777215&t).toString(16).toUpperCase();return"00000".substring(0,6-n.length)+n}
|
|
function intToRGB(t){var n=(16777215&t).toString(16).toUpperCase();return"00000".substring(0,6-n.length)+n}
|
|
@@ -33,21 +34,27 @@ jQuery(function($){
|
|
$(".validate_rspamd_regex").click(function( event ) {
|
|
$(".validate_rspamd_regex").click(function( event ) {
|
|
event.preventDefault();
|
|
event.preventDefault();
|
|
var regex_map_id = $(this).data('regex-map');
|
|
var regex_map_id = $(this).data('regex-map');
|
|
- var regex_data = $(jq(regex_map_id)).val();
|
|
|
|
- $.ajax({
|
|
|
|
- dataType: 'json',
|
|
|
|
- url: "/inc/ajax/regex_validation.php",
|
|
|
|
- type: "get",
|
|
|
|
- data: { regex: regex_data },
|
|
|
|
- complete: function(data) {
|
|
|
|
- var response = (data.responseText);
|
|
|
|
- response_obj = JSON.parse(response);
|
|
|
|
- if (response_obj.type == "success") {
|
|
|
|
- $('button[data-id="' + regex_map_id + '"]').attr({"disabled": false});
|
|
|
|
- }
|
|
|
|
- mailcow_alert_box(response_obj.msg, response_obj.type);
|
|
|
|
- },
|
|
|
|
- });
|
|
|
|
|
|
+ var regex_data = $(jq(regex_map_id)).val().split(/\r?\n/);
|
|
|
|
+ var regex_valid = true;
|
|
|
|
+ for(var i = 0;i < regex_data.length;i++){
|
|
|
|
+ if(regex_data[i].startsWith('#') || !regex_data[i]){
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ if(!validateRegex(regex_data[i])) {
|
|
|
|
+ mailcow_alert_box('Cannot build regex from line ' + (i+1), 'danger');
|
|
|
|
+ var regex_valid = false;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ if(!regex_data[i].startsWith('/') || !/\/[ims]?$/.test(regex_data[i])){
|
|
|
|
+ mailcow_alert_box('Line ' + (i+1) + ' is invalid', 'danger');
|
|
|
|
+ var regex_valid = false;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (regex_valid) {
|
|
|
|
+ mailcow_alert_box('Regex OK', 'success');
|
|
|
|
+ $('button[data-id="' + regex_map_id + '"]').attr({"disabled": false});
|
|
|
|
+ }
|
|
});
|
|
});
|
|
$('.textarea-code').on('keyup', function() {
|
|
$('.textarea-code').on('keyup', function() {
|
|
$('.submit_rspamd_regex').attr({"disabled": true});
|
|
$('.submit_rspamd_regex').attr({"disabled": true});
|