public
nobgit
read
NobMail
Based on mailcow: dockerized
Languages
Repository composition by tracked source files.
PHP
49%
JavaScript
35%
HTML
9%
CSS
4%
Shell
2%
Python
1%
Lua
0%
Perl
0%
Ruby
0%
SCSS
0%
Create file
Wiki Documentation
Clone
https://nobgit.com/orgs/nobgit/nobmail.git
ssh://[email protected]:2222/orgs/nobgit/nobmail.git
Commit
[Web] Add DKIM key when adding a domain or alias domain (#4254)
Signed-off-by: Kristian Feldsam <[email protected]>
c1dcb529
data/web/inc/functions.dkim.inc.php | 16 ++++++++--------
data/web/inc/functions.mailbox.inc.php | 6 ++++++
data/web/modals/mailbox.php | 33 +++++++++++++++++++++++++++++++++
3 files changed, 47 insertions(+), 8 deletions(-)
Diff
diff --git a/data/web/inc/functions.dkim.inc.php b/data/web/inc/functions.dkim.inc.php
index 33ee49fc..85d3c6c1 100644
--- a/data/web/inc/functions.dkim.inc.php
+++ b/data/web/inc/functions.dkim.inc.php
@@ -5,14 +5,6 @@ function dkim($_action, $_data = null, $privkey = false) {
global $lang;
switch ($_action) {
case 'add':
- if ($_SESSION['mailcow_cc_role'] != "admin") {
- $_SESSION['return'][] = array(
- 'type' => 'danger',
- 'log' => array(__FUNCTION__, $_action, $_data, ),
- 'msg' => 'access_denied'
- );
- return false;
- }
$key_length = intval($_data['key_size']);
$dkim_selector = (isset($_data['dkim_selector'])) ? $_data['dkim_selector'] : 'dkim';
$domains = array_map('trim', preg_split( "/( |,|;|\n)/", $_data['domains']));
@@ -42,6 +34,14 @@ function dkim($_action, $_data = null, $privkey = false) {
);
continue;
}
+ if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $domain)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data),
+ 'msg' => array('access_denied', $domain)
+ );
+ continue;
+ }
$config = array(
"digest_alg" => "sha256",
"private_key_bits" => $key_length,
diff --git a/data/web/inc/functions.mailbox.inc.php b/data/web/inc/functions.mailbox.inc.php
index 5010df9e..2daed39f 100644
--- a/data/web/inc/functions.mailbox.inc.php
+++ b/data/web/inc/functions.mailbox.inc.php
@@ -579,6 +579,9 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
if (!empty(intval($_data['rl_value']))) {
ratelimit('edit', 'domain', array('rl_value' => $_data['rl_value'], 'rl_frame' => $_data['rl_frame'], 'object' => $domain));
}
+ if (!empty($_data['key_size']) && !empty($_data['dkim_selector'])) {
+ dkim('add', array('key_size' => $_data['key_size'], 'dkim_selector' => $_data['dkim_selector'], 'domains' => $domain));
+ }
if (!empty($restart_sogo)) {
$restart_response = json_decode(docker('post', 'sogo-mailcow', 'restart'), true);
if ($restart_response['type'] == "success") {
@@ -906,6 +909,9 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
if (!empty(intval($_data['rl_value']))) {
ratelimit('edit', 'domain', array('rl_value' => $_data['rl_value'], 'rl_frame' => $_data['rl_frame'], 'object' => $alias_domain));
}
+ if (!empty($_data['key_size']) && !empty($_data['dkim_selector'])) {
+ dkim('add', array('key_size' => $_data['key_size'], 'dkim_selector' => $_data['dkim_selector'], 'domains' => $alias_domain));
+ }
$_SESSION['return'][] = array(
'type' => 'success',
'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
diff --git a/data/web/modals/mailbox.php b/data/web/modals/mailbox.php
index 8751050c..1847ea64 100644
--- a/data/web/modals/mailbox.php
+++ b/data/web/modals/mailbox.php
@@ -165,6 +165,22 @@ if (!isset($_SESSION['mailcow_cc_role'])) {
</div>
</div>
<hr>
+ <div class="form-group">
+ <label class="control-label col-sm-2" for="dkim_selector"><?=$lang['admin']['dkim_domains_selector'];?></label>
+ <div class="col-sm-10">
+ <input class="form-control" id="dkim_selector" name="dkim_selector" value="dkim">
+ </div>
+ </div>
+ <div class="form-group">
+ <label class="control-label col-sm-2" for="key_size"><?=$lang['admin']['dkim_key_length'];?></label>
+ <div class="col-sm-10">
+ <select data-style="btn btn-default btn-sm" class="form-control" id="key_size" name="key_size">
+ <option data-subtext="bits">1024</option>
+ <option data-subtext="bits">2048</option>
+ </select>
+ </div>
+ </div>
+ <hr>
<div class="form-group">
<label class="control-label col-sm-2"><?=$lang['add']['backup_mx_options'];?></label>
<div class="col-sm-10">
@@ -381,6 +397,23 @@ if (!isset($_SESSION['mailcow_cc_role'])) {
</select>
</div>
</div>
+ <hr>
+ <div class="form-group">
+ <label class="control-label col-sm-2" for="dkim_selector"><?=$lang['admin']['dkim_domains_selector'];?></label>
+ <div class="col-sm-10">
+ <input class="form-control" id="dkim_selector" name="dkim_selector" value="dkim">
+ </div>
+ </div>
+ <div class="form-group">
+ <label class="control-label col-sm-2" for="key_size"><?=$lang['admin']['dkim_key_length'];?></label>
+ <div class="col-sm-10">
+ <select data-style="btn btn-default btn-sm" class="form-control" id="key_size" name="key_size">
+ <option data-subtext="bits">1024</option>
+ <option data-subtext="bits">2048</option>
+ </select>
+ </div>
+ </div>
+ <hr>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button class="btn btn-xs-lg visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-success" data-action="add_item" data-id="add_alias_domain" data-api-url='add/alias-domain' data-api-attr='{}' href="#"><?=$lang['admin']['add'];?></button>