[Web] New feature: Show DKIM private keys - needs variable set to true in vars.local.inc.php
parent
c6f81fe67b
commit
750a2b8cef
|
@ -157,6 +157,7 @@ $tfa_data = get_tfa();
|
|||
</div>
|
||||
<div class="col-xs-9">
|
||||
<pre><?=$dkim['dkim_txt'];?></pre>
|
||||
<p data-toggle="modal" data-target="#showDKIMprivKey" id="dkim_priv" style="cursor:pointer;margin-top:-8pt" data-priv-key="<?=$dkim['privkey'];?>"><small>↪ Private key</small></p>
|
||||
</div>
|
||||
</div>
|
||||
<?php
|
||||
|
@ -186,6 +187,7 @@ $tfa_data = get_tfa();
|
|||
</div>
|
||||
<div class="col-xs-9">
|
||||
<pre><?=$dkim['dkim_txt'];?></pre>
|
||||
<p data-toggle="modal" data-target="#showDKIMprivKey" id="dkim_priv" style="cursor:pointer;margin-top:-8pt" data-priv-key="<?=$dkim['privkey'];?>"><small>↪ Private key</small></p>
|
||||
</div>
|
||||
</div>
|
||||
<?php
|
||||
|
@ -197,7 +199,7 @@ $tfa_data = get_tfa();
|
|||
<div class="col-xs-1 col-xs-offset-1">
|
||||
<p><small>↳ Alias-Domain: <strong><?=htmlspecialchars($alias_domain);?></strong><br /></small><span class="label label-danger"><?=$lang['admin']['dkim_key_missing'];?></span></p>
|
||||
</div>
|
||||
<div class="col-xs-9"><pre>-</pre></div>
|
||||
<div class="col-xs-9"><pre>-</pre></div>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
|
@ -217,6 +219,7 @@ $tfa_data = get_tfa();
|
|||
</div>
|
||||
<div class="col-xs-9">
|
||||
<pre><?=$dkim['dkim_txt'];?></pre>
|
||||
<p data-toggle="modal" data-target="#showDKIMprivKey" id="dkim_priv" style="cursor:pointer;margin-top:-8pt" data-priv-key="<?=$dkim['privkey'];?>"><small>↪ Private key</small></p>
|
||||
</div>
|
||||
</div>
|
||||
<?php
|
||||
|
|
|
@ -187,6 +187,14 @@ function dkim($_action, $_data = null) {
|
|||
}
|
||||
$dkimdata['dkim_txt'] = 'v=DKIM1;k=rsa;t=s;s=email;p=' . $redis_dkim_key_data;
|
||||
$dkimdata['dkim_selector'] = $redis->hGet('DKIM_SELECTORS', $_data);
|
||||
$dkimdata['privkey'] = $redis->hGet('DKIM_PRIV_KEYS', $dkimdata['dkim_selector'] . $_data);
|
||||
if ($GLOBALS['SHOW_DKIM_PRIV_KEYS'] === true) {
|
||||
$dkimdata['privkey'] = base64_encode($redis->hGet('DKIM_PRIV_KEYS', $dkimdata['dkim_selector'] . '.' . $_data));
|
||||
}
|
||||
else {
|
||||
$dkimdata['privkey'] = base64_encode('Please set $SHOW_DKIM_PRIV_KEYS to true to show DKIM private keys.');
|
||||
}
|
||||
|
||||
}
|
||||
return $dkimdata;
|
||||
break;
|
||||
|
|
|
@ -82,6 +82,9 @@ $DEFAULT_THEME = 'lumen';
|
|||
// Password complexity as regular expression
|
||||
$PASSWD_REGEP = '.{4,}';
|
||||
|
||||
// Show DKIM private keys - false by default
|
||||
$SHOW_DKIM_PRIV_KEYS = false;
|
||||
|
||||
// mailcow Apps - buttons on login screen
|
||||
$MAILCOW_APPS = array(
|
||||
array(
|
||||
|
|
|
@ -1,3 +1,96 @@
|
|||
var Base64 = {
|
||||
_keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
|
||||
encode: function(e) {
|
||||
var t = "";
|
||||
var n, r, i, s, o, u, a;
|
||||
var f = 0;
|
||||
e = Base64._utf8_encode(e);
|
||||
while (f < e.length) {
|
||||
n = e.charCodeAt(f++);
|
||||
r = e.charCodeAt(f++);
|
||||
i = e.charCodeAt(f++);
|
||||
s = n >> 2;
|
||||
o = (n & 3) << 4 | r >> 4;
|
||||
u = (r & 15) << 2 | i >> 6;
|
||||
a = i & 63;
|
||||
if (isNaN(r)) {
|
||||
u = a = 64
|
||||
} else if (isNaN(i)) {
|
||||
a = 64
|
||||
}
|
||||
t = t + this._keyStr.charAt(s) + this._keyStr.charAt(o) +
|
||||
this._keyStr.charAt(u) + this._keyStr.charAt(a)
|
||||
}
|
||||
return t
|
||||
},
|
||||
decode: function(e) {
|
||||
var t = "";
|
||||
var n, r, i;
|
||||
var s, o, u, a;
|
||||
var f = 0;
|
||||
e = e.replace(/[^A-Za-z0-9\+\/\=]/g, "");
|
||||
while (f < e.length) {
|
||||
s = this._keyStr.indexOf(e.charAt(f++));
|
||||
o = this._keyStr.indexOf(e.charAt(f++));
|
||||
u = this._keyStr.indexOf(e.charAt(f++));
|
||||
a = this._keyStr.indexOf(e.charAt(f++));
|
||||
n = s << 2 | o >> 4;
|
||||
r = (o & 15) << 4 | u >> 2;
|
||||
i = (u & 3) << 6 | a;
|
||||
t = t + String.fromCharCode(n);
|
||||
if (u != 64) {
|
||||
t = t + String.fromCharCode(r)
|
||||
}
|
||||
if (a != 64) {
|
||||
t = t + String.fromCharCode(i)
|
||||
}
|
||||
}
|
||||
t = Base64._utf8_decode(t);
|
||||
return t
|
||||
},
|
||||
_utf8_encode: function(e) {
|
||||
e = e.replace(/\r\n/g, "\n");
|
||||
var t = "";
|
||||
for (var n = 0; n < e.length; n++) {
|
||||
var r = e.charCodeAt(n);
|
||||
if (r < 128) {
|
||||
t += String.fromCharCode(r)
|
||||
} else if (r > 127 && r < 2048) {
|
||||
t += String.fromCharCode(r >> 6 | 192);
|
||||
t += String.fromCharCode(r & 63 | 128)
|
||||
} else {
|
||||
t += String.fromCharCode(r >> 12 | 224);
|
||||
t += String.fromCharCode(r >> 6 & 63 | 128);
|
||||
t += String.fromCharCode(r & 63 | 128)
|
||||
}
|
||||
}
|
||||
return t
|
||||
},
|
||||
_utf8_decode: function(e) {
|
||||
var t = "";
|
||||
var n = 0;
|
||||
var r = c1 = c2 = 0;
|
||||
while (n < e.length) {
|
||||
r = e.charCodeAt(n);
|
||||
if (r < 128) {
|
||||
t += String.fromCharCode(r);
|
||||
n++
|
||||
} else if (r > 191 && r < 224) {
|
||||
c2 = e.charCodeAt(n + 1);
|
||||
t += String.fromCharCode((r & 31) << 6 | c2 & 63);
|
||||
n += 2
|
||||
} else {
|
||||
c2 = e.charCodeAt(n + 1);
|
||||
c3 = e.charCodeAt(n + 2);
|
||||
t += String.fromCharCode((r & 15) << 12 | (c2 & 63) <<
|
||||
6 | c3 & 63);
|
||||
n += 3
|
||||
}
|
||||
}
|
||||
return t
|
||||
}
|
||||
}
|
||||
|
||||
jQuery(function($){
|
||||
// http://stackoverflow.com/questions/24816/escaping-html-strings-with-jquery
|
||||
var entityMap = {
|
||||
|
@ -560,6 +653,15 @@ jQuery(function($){
|
|||
}
|
||||
})
|
||||
|
||||
$('#showDKIMprivKey').on('show.bs.modal', function (e) {
|
||||
$('#priv_key_pre').text("-");
|
||||
p_related = $(e.relatedTarget)
|
||||
if (p_related != null) {
|
||||
var decoded_key = Base64.decode((p_related.data('priv-key')));
|
||||
$('#priv_key_pre').text(decoded_key);
|
||||
}
|
||||
})
|
||||
|
||||
$('#test_relayhost').on('click', function (e) {
|
||||
e.preventDefault();
|
||||
prev = $('#test_relayhost').text();
|
||||
|
|
|
@ -91,3 +91,17 @@ if (!isset($_SESSION['mailcow_cc_role'])) {
|
|||
</div>
|
||||
</div>
|
||||
</div><!-- test relayhost modal -->
|
||||
<!-- priv key modal -->
|
||||
<div class="modal fade" id="showDKIMprivKey" tabindex="-1" role="dialog" aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span></button>
|
||||
<h3 class="modal-title"><span class="glyphicon glyphicon-lock"></span> Private key</h3>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<pre id="priv_key_pre"></pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- priv key modal -->
|
||||
|
|
Loading…
Reference in New Issue