Remove DKIM keys with api

This commit is contained in:
andryyy 2017-05-09 21:30:08 +02:00
parent 93046dea45
commit a8e550244e
5 changed files with 158 additions and 74 deletions

View File

@ -155,6 +155,7 @@ $tfa_data = get_tfa();
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading"><?=$lang['admin']['dkim_keys'];?></div> <div class="panel-heading"><?=$lang['admin']['dkim_keys'];?></div>
<div class="panel-body"> <div class="panel-body">
<form class="form-inline" method="post" data-id="dkimkeys">
<?php <?php
foreach(mailbox_get_domains() as $domain) { foreach(mailbox_get_domains() as $domain) {
if (!empty($dkim = dkim_get_key_details($domain))) { if (!empty($dkim = dkim_get_key_details($domain))) {
@ -171,11 +172,7 @@ $tfa_data = get_tfa();
<pre><?=$dkim['dkim_txt'];?></pre> <pre><?=$dkim['dkim_txt'];?></pre>
</div> </div>
<div class="col-xs-1"> <div class="col-xs-1">
<form class="form-inline" method="post"> <span style="cursor:pointer" data-dkim-domain="<?=$domain;?>" data-dkim-selector="<?=$dkim['dkim_selector'];?>" id="delete_dkim_key" class="text-danger glyphicon glyphicon-remove"></span></a>
<input type="hidden" name="domain" value="<?=$domain;?>">
<input type="hidden" name="dkim_delete_key" value="1">
<a href="#" onclick="$(this).closest('form').submit()" data-toggle="tooltip" data-placement="top" title="<?=$lang['user']['delete_now'];?>"><span class="glyphicon glyphicon-remove"></span></a>
</form>
</div> </div>
</div> </div>
<?php <?php
@ -206,11 +203,7 @@ $tfa_data = get_tfa();
<pre><?=$dkim['dkim_txt'];?></pre> <pre><?=$dkim['dkim_txt'];?></pre>
</div> </div>
<div class="col-xs-1"> <div class="col-xs-1">
<form class="form-inline" method="post"> <span style="cursor:pointer" data-dkim-domain="<?=$domain;?>" data-dkim-selector="<?=$dkim['dkim_selector'];?>" id="delete_dkim_key" class="text-danger glyphicon glyphicon-remove"></span></a>
<input type="hidden" name="domain" value="<?=$alias_domain;?>">
<input type="hidden" name="dkim_delete_key" value="1">
<a href="#" onclick="$(this).closest('form').submit()" data-toggle="tooltip" data-placement="top" title="<?=$lang['user']['delete_now'];?>"><span class="glyphicon glyphicon-remove"></span></a>
</form>
</div> </div>
</div> </div>
<?php <?php
@ -243,17 +236,15 @@ $tfa_data = get_tfa();
<pre><?=$dkim['dkim_txt'];?></pre> <pre><?=$dkim['dkim_txt'];?></pre>
</div> </div>
<div class="col-xs-1"> <div class="col-xs-1">
<form class="form-inline" method="post"> <span style="cursor:pointer" data-dkim-domain="<?=$blind;?>" data-dkim-selector="<?=$dkim['dkim_selector'];?>" id="delete_dkim_key" class="text-danger glyphicon glyphicon-remove"></span></a>
<input type="hidden" name="domain" value="<?=$blind;?>">
<input type="hidden" name="dkim_delete_key" value="1">
<a href="#" onclick="$(this).closest('form').submit()" data-toggle="tooltip" data-placement="top" title="<?=$lang['user']['delete_now'];?>"><span class="glyphicon glyphicon-remove"></span></a>
</form>
</div> </div>
</div> </div>
<?php <?php
} }
} }
?> ?>
</form>
<legend style="margin-top:40px"><?=$lang['admin']['dkim_add_key'];?></legend> <legend style="margin-top:40px"><?=$lang['admin']['dkim_add_key'];?></legend>
<form class="form-inline" role="form" method="post"> <form class="form-inline" role="form" method="post">
<div class="form-group"> <div class="form-group">

View File

@ -2497,8 +2497,13 @@ function dkim_get_blind_keys() {
function dkim_delete_key($postarray) { function dkim_delete_key($postarray) {
global $redis; global $redis;
global $lang; global $lang;
$domain = $postarray['domain']; if (!is_array($postarray['domains'])) {
$domains = array();
$domains[] = $postarray['domains'];
}
else {
$domains = $postarray['domains'];
}
if ($_SESSION['mailcow_cc_role'] != "admin") { if ($_SESSION['mailcow_cc_role'] != "admin") {
$_SESSION['return'] = array( $_SESSION['return'] = array(
'type' => 'danger', 'type' => 'danger',
@ -2506,29 +2511,28 @@ function dkim_delete_key($postarray) {
); );
return false; return false;
} }
if (!is_valid_domain_name($domain)) { foreach ($domains as $domain) {
$_SESSION['return'] = array( if (!is_valid_domain_name($domain)) {
'type' => 'danger', $_SESSION['return'] = array(
'msg' => sprintf($lang['danger']['dkim_domain_or_sel_invalid']) 'type' => 'danger',
); 'msg' => sprintf($lang['danger']['dkim_domain_or_sel_invalid'])
return false; );
} return false;
try { }
foreach ($redis->hGetAll('DKIM_PRIV_KEYS') as $key => $value) { try {
if (preg_match('/\.' . $domain . '$/i', $key)) { foreach ($redis->hGetAll('DKIM_SELECTORS') as $domain_name => $selector) {
$redis->hDel('DKIM_PUB_KEYS', $key); $redis->hDel('DKIM_PUB_KEYS', $domain_name);
$redis->hDel('DKIM_PRIV_KEYS', $selector . '.' . $domain_name);
$redis->hDel('DKIM_SELECTORS', $domain_name);
} }
} }
$redis->hDel('DKIM_PUB_KEYS', $domain); catch (RedisException $e) {
$redis->hDel('DKIM_SELECTORS', $domain); $_SESSION['return'] = array(
$redis->hDel('DKIM_PRIV_KEYS', $domain); 'type' => 'danger',
} 'msg' => 'Redis: '.$e
catch (RedisException $e) { );
$_SESSION['return'] = array( return false;
'type' => 'danger', }
'msg' => 'Redis: '.$e
);
return false;
} }
$_SESSION['return'] = array( $_SESSION['return'] = array(
'type' => 'success', 'type' => 'success',

View File

@ -1,6 +1,6 @@
$(document).ready(function() { $(document).ready(function() {
// Collect values of input fields with name multi_select to js array multi_data[data-id-of-checkbox] // Collect values of input fields with name multi_select with same data-form-id to js array multi_data[data-form-id-of-checkbox]
var multi_data = []; var multi_data = [];
$(document).on('change', 'input[name=multi_select]:checkbox', function() { $(document).on('change', 'input[name=multi_select]:checkbox', function() {
if ($(this).is(':checked') && $(this).attr('data-form-id')) { if ($(this).is(':checked') && $(this).attr('data-form-id')) {
@ -15,7 +15,7 @@ $(document).ready(function() {
multi_data[id].splice($.inArray($(this).val(), multi_data[id]),1); multi_data[id].splice($.inArray($(this).val(), multi_data[id]),1);
} }
}); });
// Select by click on tr // Select checkbox by click on parent tr
$(document).on('click', 'tr', function(e) { $(document).on('click', 'tr', function(e) {
if (e.target.type == "checkbox") { if (e.target.type == "checkbox") {
e.stopPropagation(); e.stopPropagation();
@ -27,8 +27,8 @@ $(document).ready(function() {
// Select or deselect all checkboxes with same data-form-id // Select or deselect all checkboxes with same data-form-id
$(document).on('click', '#toggle_multi_select_all', function(e) { $(document).on('click', '#toggle_multi_select_all', function(e) {
e.preventDefault(); e.preventDefault();
var closests_checkboxes = $("input[data-form-id=" + $(this).attr("data-form-id") + "]"); var all_checkboxes = $("input[data-form-id=" + $(this).attr("data-form-id") + "]");
closests_checkboxes.prop("checked", !closests_checkboxes.prop("checked")).change(); all_checkboxes.prop("checked", !closests_checkboxes.prop("checked")).change();
}); });
// Draw domain admin table // Draw domain admin table
@ -140,7 +140,7 @@ $(document).ready(function() {
url: '/api/v1/delete/fwdhost', url: '/api/v1/delete/fwdhost',
jsonp: false, jsonp: false,
complete: function (data) { complete: function (data) {
location.reload(); window.location.href = window.location.href;
} }
}); });
}) })
@ -150,6 +150,35 @@ $(document).ready(function() {
} }
}); });
$(document).on('click', '#delete_dkim_key', function(e) {
e.preventDefault();
var dkim_domain = $(this).data('dkim-domain');
var dkim_selector = $(this).data('dkim-selector');
$(document).on('show.bs.modal','#ConfirmDeleteModal', function () {
$("#ItemsToDelete").empty();
$("#ItemsToDelete").append("<li>" + dkim_domain + ", " + dkim_selector + "</li>");
})
$('#ConfirmDeleteModal').modal({
backdrop: 'static',
keyboard: false
})
.one('click', '#IsConfirmed', function(e) {
$.ajax({
type: "POST",
dataType: "json",
data: { "domains": JSON.stringify(dkim_domain) },
url: '/api/v1/delete/dkim',
jsonp: false,
complete: function (data) {
window.location.href = window.location.href;
}
});
})
.one('click', '#isCanceled', function(e) {
$('#ConfirmDeleteModal').modal('hide');
});;
});
$("#refresh_dovecot_log").on('click', function(e) { $("#refresh_dovecot_log").on('click', function(e) {
function unix_time_format(tm) { function unix_time_format(tm) {
var date = new Date(tm ? tm * 1000 : 0); var date = new Date(tm ? tm * 1000 : 0);

View File

@ -309,7 +309,7 @@ $(document).ready(function() {
url: '/api/v1/edit/alias', url: '/api/v1/edit/alias',
jsonp: false, jsonp: false,
complete: function (data) { complete: function (data) {
location.reload(); window.location.href = window.location.href;
} }
}); });
} }
@ -325,7 +325,7 @@ $(document).ready(function() {
url: '/api/v1/edit/alias', url: '/api/v1/edit/alias',
jsonp: false, jsonp: false,
complete: function (data) { complete: function (data) {
location.reload(); window.location.href = window.location.href;
} }
}); });
} }
@ -352,7 +352,7 @@ $(document).ready(function() {
url: '/api/v1/delete/alias', url: '/api/v1/delete/alias',
jsonp: false, jsonp: false,
complete: function (data) { complete: function (data) {
location.reload(); window.location.href = window.location.href;
} }
}); });
}) })

View File

@ -356,6 +356,18 @@ if (isset($_SESSION['mailcow_cc_role']) || isset($_SESSION['pending_mailcow_cc_u
return; return;
} }
break; break;
case "csrf-cookie":
if (isset($_SESSION['mailcow_cc_username']) && isset($_SESSION['mailcow_cc_role'])) {
csrfprotector::refreshToken();
echo json_encode(array(
'type' => 'success',
'msg' => 'Cookie refreshed'
));
}
else {
return;
}
break;
default: default:
echo '{}'; echo '{}';
break; break;
@ -368,46 +380,94 @@ if (isset($_SESSION['mailcow_cc_role']) || isset($_SESSION['pending_mailcow_cc_u
$address = json_decode($_POST['address'], true); $address = json_decode($_POST['address'], true);
if (is_array($address)) { if (is_array($address)) {
if (mailbox_delete_alias(array('address' => $address)) === false) { if (mailbox_delete_alias(array('address' => $address)) === false) {
echo json_encode(array( if (isset($_SESSION['return'])) {
'type' => 'error', echo json_encode($_SESSION['return']);
'message' => 'Deletion of item/s failed' }
)); else {
echo json_encode(array(
'type' => 'error',
'msg' => 'Deletion of items/s failed'
));
}
exit(); exit();
} }
echo json_encode(array( if (isset($_SESSION['return'])) {
'type' => 'success', echo json_encode($_SESSION['return']);
'message' => 'Task completed' }
)); else {
echo json_encode(array(
'type' => 'success',
'msg' => 'Item/s deleted: ' . $domains
));
}
} }
} }
else {
echo json_encode(array(
'type' => 'error',
'message' => 'Cannot find address array in post data'
));
}
break; break;
case "fwdhost": case "fwdhost":
if (isset($_POST['forwardinghost'])) { if (isset($_POST['forwardinghost'])) {
$forwardinghost = json_decode($_POST['forwardinghost'], true); $forwardinghost = (array)json_decode($_POST['forwardinghost'], true);
if (is_array($forwardinghost)) { if (is_array($forwardinghost)) {
if (delete_forwarding_host(array('forwardinghost' => $forwardinghost)) === false) { if (delete_forwarding_host(array('forwardinghost' => $forwardinghost)) === false) {
echo json_encode(array( if (isset($_SESSION['return'])) {
'type' => 'error', echo json_encode($_SESSION['return']);
'message' => 'Deletion of item/s failed' }
)); else {
echo json_encode(array(
'type' => 'error',
'msg' => 'Deletion of items/s failed'
));
}
exit(); exit();
} }
echo json_encode(array( if (isset($_SESSION['return'])) {
'type' => 'success', echo json_encode($_SESSION['return']);
'message' => 'Task completed' }
)); else {
echo json_encode(array(
'type' => 'success',
'msg' => 'Item/s deleted: ' . $domains
));
}
} }
} }
else { else {
echo json_encode(array( echo json_encode(array(
'type' => 'error', 'type' => 'error',
'message' => 'Cannot find forwardinghost array in post data' 'msg' => 'Cannot find forwardinghost array in post data'
));
}
break;
case "dkim":
if (isset($_POST['domains'])) {
$domains = (array)json_decode($_POST['domains'], true);
if (is_array($domains)) {
if (dkim_delete_key(array('domains' => $domains)) === false) {
if (isset($_SESSION['return'])) {
echo json_encode($_SESSION['return']);
}
else {
echo json_encode(array(
'type' => 'error',
'msg' => 'Deletion of items/s failed'
));
}
exit();
}
if (isset($_SESSION['return'])) {
echo json_encode($_SESSION['return']);
}
else {
echo json_encode(array(
'type' => 'success',
'msg' => 'Item/s deleted: ' . $domains
));
}
}
}
else {
echo json_encode(array(
'type' => 'error',
'msg' => 'Cannot find domains array in post data'
)); ));
} }
break; break;
@ -417,25 +477,25 @@ if (isset($_SESSION['mailcow_cc_role']) || isset($_SESSION['pending_mailcow_cc_u
switch ($category) { switch ($category) {
case "alias": case "alias":
if (isset($_POST['address']) && isset($_POST['active'])) { if (isset($_POST['address']) && isset($_POST['active'])) {
$address = json_decode($_POST['address'], true); $address = (array)json_decode($_POST['address'], true);
if (is_array($address)) { if (is_array($address)) {
if (mailbox_edit_alias(array('address' => $address, 'active' => ($_POST['active'] == "1") ? $active = 1 : null)) === false) { if (mailbox_edit_alias(array('address' => $address, 'active' => ($_POST['active'] == "1") ? $active = 1 : null)) === false) {
echo json_encode(array( echo json_encode(array(
'type' => 'error', 'type' => 'error',
'message' => 'Edit item failed' 'msg' => 'Edit item failed'
)); ));
exit(); exit();
} }
echo json_encode(array( echo json_encode(array(
'type' => 'success', 'type' => 'success',
'message' => 'Task completed' 'msg' => 'Task completed'
)); ));
} }
} }
else { else {
echo json_encode(array( echo json_encode(array(
'type' => 'error', 'type' => 'error',
'message' => 'Cannot find address array in post data' 'msg' => 'Cannot find address array in post data'
)); ));
} }
break; break;