Forwarding hosts in web interface
parent
9633a34f9f
commit
76720f3e94
|
@ -183,6 +183,8 @@ $tfa_data = get_tfa();
|
|||
</div>
|
||||
|
||||
<h4><span class="glyphicon glyphicon-wrench" aria-hidden="true"></span> <?=$lang['admin']['configuration'];?></h4>
|
||||
<div class="panel-group" id="accordion_access">
|
||||
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading"><?=$lang['admin']['dkim_keys'];?></div>
|
||||
<div id="collapseDKIM" class="panel-collapse">
|
||||
|
@ -298,6 +300,72 @@ $tfa_data = get_tfa();
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="panel panel-default">
|
||||
<div style="cursor:pointer;" class="panel-heading" data-toggle="collapse" data-parent="#accordion_access" data-target="#collapseForwardingHosts">
|
||||
<span class="accordion-toggle"><?=$lang['admin']['forwarding_hosts'];?></span>
|
||||
</div>
|
||||
<div id="collapseForwardingHosts" class="panel-collapse collapse">
|
||||
<div class="panel-body">
|
||||
<p style="margin-bottom:40px"><?=$lang['admin']['forwarding_hosts_hint'];?></p>
|
||||
<form method="post">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped" id="forwardinghoststable">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="min-width: 100px;"><?=$lang['edit']['hostname'];?></th>
|
||||
<th style="text-align: right; min-width: 200px;"><?=$lang['admin']['action'];?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php
|
||||
$forwarding_hosts = get_forwarding_hosts();
|
||||
if ($forwarding_hosts) {
|
||||
foreach ($forwarding_hosts as $host) {
|
||||
?>
|
||||
<tr id="data">
|
||||
<td><?=htmlspecialchars(strtolower($host));?></td>
|
||||
<td style="text-align: right;">
|
||||
<div class="btn-group">
|
||||
<a href="delete.php?forwardinghost=<?=$host;?>" class="btn btn-xs btn-danger"><span class="glyphicon glyphicon-trash"></span> <?=$lang['admin']['remove'];?></a>
|
||||
</div>
|
||||
</td>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<?php
|
||||
}
|
||||
} else {
|
||||
?>
|
||||
<tr id="no-data"><td colspan="4" style="text-align: center; font-style: italic;"><?=$lang['admin']['no_record'];?></td></tr>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</form>
|
||||
<small>
|
||||
<legend><?=$lang['admin']['add_forwarding_host'];?></legend>
|
||||
<form class="form-horizontal" role="form" method="post">
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-2" for="hostname"><?=$lang['edit']['hostname'];?>:</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" name="hostname" id="hostname" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-offset-2 col-sm-10">
|
||||
<button type="submit" name="add_forwarding_host" class="btn btn-default"><?=$lang['admin']['add'];?></button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div> <!-- /container -->
|
||||
<script type='text/javascript'>
|
||||
<?php
|
||||
|
|
|
@ -105,6 +105,23 @@ if (isset($_SESSION['mailcow_cc_role']) && ($_SESSION['mailcow_cc_role'] == "adm
|
|||
</form>
|
||||
<?php
|
||||
}
|
||||
// DELETE DOMAIN ADMIN
|
||||
elseif (isset($_GET["forwardinghost"]) &&
|
||||
!empty($_GET["forwardinghost"]) &&
|
||||
$_SESSION['mailcow_cc_role'] == "admin") {
|
||||
$host = $_GET["forwardinghost"];
|
||||
?>
|
||||
<div class="alert alert-warning" role="alert"><?=sprintf($lang['delete']['remove_forwardinghost_warning'], htmlspecialchars($_GET["forwardinghost"]));?></div>
|
||||
<form class="form-horizontal" role="form" method="post" action="/admin.php">
|
||||
<input type="hidden" name="forwardinghost" value="<?=htmlspecialchars($host);?>">
|
||||
<div class="form-group">
|
||||
<div class="col-sm-offset-1 col-sm-10">
|
||||
<button type="submit" name="delete_forwarding_host" class="btn btn-default btn-sm"><?=$lang['delete']['remove_button'];?></button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<?php
|
||||
}
|
||||
// DELETE MAILBOX
|
||||
elseif (isset($_GET["mailbox"]) &&
|
||||
filter_var($_GET["mailbox"], FILTER_VALIDATE_EMAIL) &&
|
||||
|
|
|
@ -124,6 +124,9 @@ function init_db_schema() {
|
|||
if ($num_results == 0) {
|
||||
$pdo->query("ALTER TABLE `tfa` ADD `key_id` VARCHAR(255) DEFAULT 'unidentified'");
|
||||
}
|
||||
|
||||
// Add newly added tables
|
||||
$stmt = $pdo->query("CREATE TABLE IF NOT EXISTS `forwarding_hosts` (`host` VARCHAR(255) NOT NULL, PRIMARY KEY (`host`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC");
|
||||
}
|
||||
function verify_ssha256($hash, $password) {
|
||||
// Remove tag if any
|
||||
|
@ -5039,4 +5042,68 @@ function get_u2f_registrations($username) {
|
|||
$sel->execute(array($username));
|
||||
return $sel->fetchAll(PDO::FETCH_OBJ);
|
||||
}
|
||||
function get_forwarding_hosts() {
|
||||
global $pdo;
|
||||
$sel = $pdo->prepare("SELECT host FROM `forwarding_hosts`");
|
||||
$sel->execute();
|
||||
return $sel->fetchAll(PDO::FETCH_COLUMN);
|
||||
}
|
||||
function add_forwarding_host($postarray) {
|
||||
global $pdo;
|
||||
global $lang;
|
||||
if ($_SESSION['mailcow_cc_role'] != "admin") {
|
||||
$_SESSION['return'] = array(
|
||||
'type' => 'danger',
|
||||
'msg' => sprintf($lang['danger']['access_denied'])
|
||||
);
|
||||
return false;
|
||||
}
|
||||
$host = $postarray['hostname'];
|
||||
try {
|
||||
$stmt = $pdo->prepare("INSERT INTO `forwarding_hosts` (`host`) VALUES (:host)");
|
||||
$stmt->execute(array(
|
||||
':host' => $host,
|
||||
));
|
||||
}
|
||||
catch (PDOException $e) {
|
||||
$_SESSION['return'] = array(
|
||||
'type' => 'danger',
|
||||
'msg' => 'MySQL: '.$e
|
||||
);
|
||||
return false;
|
||||
}
|
||||
$_SESSION['return'] = array(
|
||||
'type' => 'success',
|
||||
'msg' => sprintf($lang['success']['forwarding_host_added'], htmlspecialchars($host))
|
||||
);
|
||||
}
|
||||
function delete_forwarding_host($postarray) {
|
||||
global $pdo;
|
||||
global $lang;
|
||||
if ($_SESSION['mailcow_cc_role'] != "admin") {
|
||||
$_SESSION['return'] = array(
|
||||
'type' => 'danger',
|
||||
'msg' => sprintf($lang['danger']['access_denied'])
|
||||
);
|
||||
return false;
|
||||
}
|
||||
$host = $postarray['forwardinghost'];
|
||||
try {
|
||||
$stmt = $pdo->prepare("DELETE FROM `forwarding_hosts` WHERE `host` = :host");
|
||||
$stmt->execute(array(
|
||||
':host' => $host,
|
||||
));
|
||||
}
|
||||
catch (PDOException $e) {
|
||||
$_SESSION['return'] = array(
|
||||
'type' => 'danger',
|
||||
'msg' => 'MySQL: '.$e
|
||||
);
|
||||
return false;
|
||||
}
|
||||
$_SESSION['return'] = array(
|
||||
'type' => 'success',
|
||||
'msg' => sprintf($lang['success']['forwarding_host_removed'], htmlspecialchars($host))
|
||||
);
|
||||
}
|
||||
?>
|
||||
|
|
|
@ -140,6 +140,11 @@ CREATE TABLE IF NOT EXISTS `tfa` (
|
|||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `forwarding_hosts` (
|
||||
`host` VARCHAR(255) NOT NULL,
|
||||
PRIMARY KEY (`host`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;
|
||||
|
||||
DROP VIEW IF EXISTS grouped_mail_aliases;
|
||||
DROP VIEW IF EXISTS grouped_sender_acl;
|
||||
DROP VIEW IF EXISTS grouped_domain_alias_address;
|
||||
|
|
|
@ -72,6 +72,12 @@ if (isset($_SESSION['mailcow_cc_role']) && $_SESSION['mailcow_cc_role'] == "admi
|
|||
if (isset($_POST["delete_domain_admin"])) {
|
||||
delete_domain_admin($_POST);
|
||||
}
|
||||
if (isset($_POST["add_forwarding_host"])) {
|
||||
add_forwarding_host($_POST);
|
||||
}
|
||||
if (isset($_POST["delete_forwarding_host"])) {
|
||||
delete_forwarding_host($_POST);
|
||||
}
|
||||
}
|
||||
if (isset($_SESSION['mailcow_cc_role']) && $_SESSION['mailcow_cc_role'] == "user") {
|
||||
if (isset($_POST["edit_user_account"])) {
|
||||
|
|
|
@ -468,4 +468,10 @@ $lang['admin']['set_rr_failed'] = 'Cannot set Postfix restrictions';
|
|||
$lang['admin']['no_record'] = 'No record';
|
||||
$lang['admin']['filter_table'] = 'Filter table';
|
||||
$lang['admin']['empty'] = 'No results';
|
||||
$lang['admin']['forwarding_hosts'] = 'Forwarding Hosts';
|
||||
$lang['admin']['forwarding_hosts_hint'] = 'Specify any networks (in CIDR notation) from which you unconditionally want to accept incoming messages. These hosts are then not checked against DNSBLs or subjected to greylisting. Spam received from them is never rejected and always filed into the Junk folder. The most common use for this is to specify mail servers on which you have set up a forwarding rule.';
|
||||
$lang['admin']['add_forwarding_host'] = 'Add Forwarding Host';
|
||||
$lang['delete']['remove_forwardinghost_warning'] = '<b>Warning:</b> You are about to remove the forwarding host <b>%s</b>!';
|
||||
$lang['success']['forwarding_host_removed'] = "Forwarding host %s has been removed";
|
||||
$lang['success']['forwarding_host_added'] = "Forwarding host %s has been added";
|
||||
?>
|
||||
|
|
Loading…
Reference in New Issue