Remove DKIM keys with api

master
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-heading"><?=$lang['admin']['dkim_keys'];?></div>
<div class="panel-body">
<form class="form-inline" method="post" data-id="dkimkeys">
<?php
foreach(mailbox_get_domains() as $domain) {
if (!empty($dkim = dkim_get_key_details($domain))) {
@ -171,11 +172,7 @@ $tfa_data = get_tfa();
<pre><?=$dkim['dkim_txt'];?></pre>
</div>
<div class="col-xs-1">
<form class="form-inline" method="post">
<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>
<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>
</div>
</div>
<?php
@ -206,11 +203,7 @@ $tfa_data = get_tfa();
<pre><?=$dkim['dkim_txt'];?></pre>
</div>
<div class="col-xs-1">
<form class="form-inline" method="post">
<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>
<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>
</div>
</div>
<?php
@ -243,17 +236,15 @@ $tfa_data = get_tfa();
<pre><?=$dkim['dkim_txt'];?></pre>
</div>
<div class="col-xs-1">
<form class="form-inline" method="post">
<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>
<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>
</div>
</div>
<?php
}
}
?>
</form>
<legend style="margin-top:40px"><?=$lang['admin']['dkim_add_key'];?></legend>
<form class="form-inline" role="form" method="post">
<div class="form-group">

View File

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

View File

@ -1,6 +1,6 @@
$(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 = [];
$(document).on('change', 'input[name=multi_select]:checkbox', function() {
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);
}
});
// Select by click on tr
// Select checkbox by click on parent tr
$(document).on('click', 'tr', function(e) {
if (e.target.type == "checkbox") {
e.stopPropagation();
@ -27,8 +27,8 @@ $(document).ready(function() {
// Select or deselect all checkboxes with same data-form-id
$(document).on('click', '#toggle_multi_select_all', function(e) {
e.preventDefault();
var closests_checkboxes = $("input[data-form-id=" + $(this).attr("data-form-id") + "]");
closests_checkboxes.prop("checked", !closests_checkboxes.prop("checked")).change();
var all_checkboxes = $("input[data-form-id=" + $(this).attr("data-form-id") + "]");
all_checkboxes.prop("checked", !closests_checkboxes.prop("checked")).change();
});
// Draw domain admin table
@ -140,7 +140,7 @@ $(document).ready(function() {
url: '/api/v1/delete/fwdhost',
jsonp: false,
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) {
function unix_time_format(tm) {
var date = new Date(tm ? tm * 1000 : 0);

View File

@ -309,7 +309,7 @@ $(document).ready(function() {
url: '/api/v1/edit/alias',
jsonp: false,
complete: function (data) {
location.reload();
window.location.href = window.location.href;
}
});
}
@ -325,7 +325,7 @@ $(document).ready(function() {
url: '/api/v1/edit/alias',
jsonp: false,
complete: function (data) {
location.reload();
window.location.href = window.location.href;
}
});
}
@ -352,7 +352,7 @@ $(document).ready(function() {
url: '/api/v1/delete/alias',
jsonp: false,
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;
}
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:
echo '{}';
break;
@ -368,46 +380,94 @@ if (isset($_SESSION['mailcow_cc_role']) || isset($_SESSION['pending_mailcow_cc_u
$address = json_decode($_POST['address'], true);
if (is_array($address)) {
if (mailbox_delete_alias(array('address' => $address)) === false) {
echo json_encode(array(
'type' => 'error',
'message' => 'Deletion of item/s failed'
));
if (isset($_SESSION['return'])) {
echo json_encode($_SESSION['return']);
}
else {
echo json_encode(array(
'type' => 'error',
'msg' => 'Deletion of items/s failed'
));
}
exit();
}
echo json_encode(array(
'type' => 'success',
'message' => 'Task completed'
));
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',
'message' => 'Cannot find address array in post data'
));
}
break;
case "fwdhost":
if (isset($_POST['forwardinghost'])) {
$forwardinghost = json_decode($_POST['forwardinghost'], true);
$forwardinghost = (array)json_decode($_POST['forwardinghost'], true);
if (is_array($forwardinghost)) {
if (delete_forwarding_host(array('forwardinghost' => $forwardinghost)) === false) {
echo json_encode(array(
'type' => 'error',
'message' => 'Deletion of item/s failed'
));
if (isset($_SESSION['return'])) {
echo json_encode($_SESSION['return']);
}
else {
echo json_encode(array(
'type' => 'error',
'msg' => 'Deletion of items/s failed'
));
}
exit();
}
echo json_encode(array(
'type' => 'success',
'message' => 'Task completed'
));
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',
'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;
@ -417,25 +477,25 @@ if (isset($_SESSION['mailcow_cc_role']) || isset($_SESSION['pending_mailcow_cc_u
switch ($category) {
case "alias":
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 (mailbox_edit_alias(array('address' => $address, 'active' => ($_POST['active'] == "1") ? $active = 1 : null)) === false) {
echo json_encode(array(
'type' => 'error',
'message' => 'Edit item failed'
'msg' => 'Edit item failed'
));
exit();
}
echo json_encode(array(
'type' => 'success',
'message' => 'Task completed'
'msg' => 'Task completed'
));
}
}
else {
echo json_encode(array(
'type' => 'error',
'message' => 'Cannot find address array in post data'
'msg' => 'Cannot find address array in post data'
));
}
break;