mirror of
https://github.com/mailcow/mailcow-dockerized.git
synced 2025-01-10 04:18:10 +02:00
[Web] improve attribute sync performance & make authsource editable
This commit is contained in:
parent
b176585a9c
commit
a4cce147aa
@ -1073,6 +1073,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
|||||||
$quarantine_notification = (isset($_data['quarantine_notification'])) ? strval($_data['quarantine_notification']) : strval($MAILBOX_DEFAULT_ATTRIBUTES['quarantine_notification']);
|
$quarantine_notification = (isset($_data['quarantine_notification'])) ? strval($_data['quarantine_notification']) : strval($MAILBOX_DEFAULT_ATTRIBUTES['quarantine_notification']);
|
||||||
$quarantine_category = (isset($_data['quarantine_category'])) ? strval($_data['quarantine_category']) : strval($MAILBOX_DEFAULT_ATTRIBUTES['quarantine_category']);
|
$quarantine_category = (isset($_data['quarantine_category'])) ? strval($_data['quarantine_category']) : strval($MAILBOX_DEFAULT_ATTRIBUTES['quarantine_category']);
|
||||||
$quota_b = ($quota_m * 1048576);
|
$quota_b = ($quota_m * 1048576);
|
||||||
|
$attribute_hash = (!empty($_data['attribute_hash'])) ? $_data['attribute_hash'] : '';
|
||||||
$mailbox_attrs = json_encode(
|
$mailbox_attrs = json_encode(
|
||||||
array(
|
array(
|
||||||
'force_pw_update' => strval($force_pw_update),
|
'force_pw_update' => strval($force_pw_update),
|
||||||
@ -1087,7 +1088,8 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
|||||||
'passwd_update' => time(),
|
'passwd_update' => time(),
|
||||||
'mailbox_format' => strval($MAILBOX_DEFAULT_ATTRIBUTES['mailbox_format']),
|
'mailbox_format' => strval($MAILBOX_DEFAULT_ATTRIBUTES['mailbox_format']),
|
||||||
'quarantine_notification' => strval($quarantine_notification),
|
'quarantine_notification' => strval($quarantine_notification),
|
||||||
'quarantine_category' => strval($quarantine_category)
|
'quarantine_category' => strval($quarantine_category),
|
||||||
|
'attribute_hash' => $attribute_hash
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
if (!is_valid_domain_name($domain)) {
|
if (!is_valid_domain_name($domain)) {
|
||||||
@ -1223,11 +1225,14 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
|||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
$stmt = $pdo->prepare("INSERT INTO `tags_mailbox` (`username`, `tag_name`) VALUES (:username, :tag_name)");
|
try {
|
||||||
$stmt->execute(array(
|
$stmt = $pdo->prepare("INSERT INTO `tags_mailbox` (`username`, `tag_name`) VALUES (:username, :tag_name)");
|
||||||
':username' => $username,
|
$stmt->execute(array(
|
||||||
':tag_name' => $tag,
|
':username' => $username,
|
||||||
));
|
':tag_name' => $tag,
|
||||||
|
));
|
||||||
|
} catch (Exception $e) {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
$stmt = $pdo->prepare("INSERT INTO `quota2` (`username`, `bytes`, `messages`)
|
$stmt = $pdo->prepare("INSERT INTO `quota2` (`username`, `bytes`, `messages`)
|
||||||
VALUES (:username, '0', '0') ON DUPLICATE KEY UPDATE `bytes` = '0', `messages` = '0';");
|
VALUES (:username, '0', '0') ON DUPLICATE KEY UPDATE `bytes` = '0', `messages` = '0';");
|
||||||
@ -1344,10 +1349,12 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$attribute_hash = sha1(json_encode($mbox_template_data["attributes"]));
|
||||||
$mbox_template_data = json_decode($mbox_template_data["attributes"], true);
|
$mbox_template_data = json_decode($mbox_template_data["attributes"], true);
|
||||||
$mbox_template_data['domain'] = $_data['domain'];
|
$mbox_template_data['domain'] = $_data['domain'];
|
||||||
$mbox_template_data['local_part'] = $_data['local_part'];
|
$mbox_template_data['local_part'] = $_data['local_part'];
|
||||||
$mbox_template_data['authsource'] = $_data['authsource'];
|
$mbox_template_data['authsource'] = $_data['authsource'];
|
||||||
|
$mbox_template_data['attribute_hash'] = $attribute_hash;
|
||||||
$mbox_template_data['quota'] = intval($mbox_template_data['quota'] / 1048576);
|
$mbox_template_data['quota'] = intval($mbox_template_data['quota'] / 1048576);
|
||||||
|
|
||||||
$mailbox_attributes = array('acl' => array());
|
$mailbox_attributes = array('acl' => array());
|
||||||
@ -2921,12 +2928,17 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
|||||||
(int)$sieve_access = (isset($_data['sieve_access']) && isset($_SESSION['acl']['protocol_access']) && $_SESSION['acl']['protocol_access'] == "1") ? intval($_data['sieve_access']) : intval($is_now['attributes']['sieve_access']);
|
(int)$sieve_access = (isset($_data['sieve_access']) && isset($_SESSION['acl']['protocol_access']) && $_SESSION['acl']['protocol_access'] == "1") ? intval($_data['sieve_access']) : intval($is_now['attributes']['sieve_access']);
|
||||||
(int)$relayhost = (isset($_data['relayhost']) && isset($_SESSION['acl']['mailbox_relayhost']) && $_SESSION['acl']['mailbox_relayhost'] == "1") ? intval($_data['relayhost']) : intval($is_now['attributes']['relayhost']);
|
(int)$relayhost = (isset($_data['relayhost']) && isset($_SESSION['acl']['mailbox_relayhost']) && $_SESSION['acl']['mailbox_relayhost'] == "1") ? intval($_data['relayhost']) : intval($is_now['attributes']['relayhost']);
|
||||||
(int)$quota_m = (isset_has_content($_data['quota'])) ? intval($_data['quota']) : ($is_now['quota'] / 1048576);
|
(int)$quota_m = (isset_has_content($_data['quota'])) ? intval($_data['quota']) : ($is_now['quota'] / 1048576);
|
||||||
$name = (!empty($_data['name'])) ? ltrim(rtrim($_data['name'], '>'), '<') : $is_now['name'];
|
$name = (!empty($_data['name'])) ? ltrim(rtrim($_data['name'], '>'), '<') : $is_now['name'];
|
||||||
$domain = $is_now['domain'];
|
$domain = $is_now['domain'];
|
||||||
$quota_b = $quota_m * 1048576;
|
$quota_b = $quota_m * 1048576;
|
||||||
$password = (!empty($_data['password'])) ? $_data['password'] : null;
|
$password = (!empty($_data['password'])) ? $_data['password'] : null;
|
||||||
$password2 = (!empty($_data['password2'])) ? $_data['password2'] : null;
|
$password2 = (!empty($_data['password2'])) ? $_data['password2'] : null;
|
||||||
$tags = (is_array($_data['tags']) ? $_data['tags'] : array());
|
$tags = (is_array($_data['tags']) ? $_data['tags'] : array());
|
||||||
|
$attribute_hash = (!empty($_data['attribute_hash'])) ? $_data['attribute_hash'] : '';
|
||||||
|
$authsource = $is_now['authsource'];
|
||||||
|
if (in_array($_data['authsource'], array('mailcow', 'keycloak', 'generic-oidc'))){
|
||||||
|
$authsource = $_data['authsource'];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$_SESSION['return'][] = array(
|
$_SESSION['return'][] = array(
|
||||||
@ -3183,18 +3195,21 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
|||||||
`active` = :active,
|
`active` = :active,
|
||||||
`name`= :name,
|
`name`= :name,
|
||||||
`quota` = :quota_b,
|
`quota` = :quota_b,
|
||||||
|
`authsource` = :authsource,
|
||||||
`attributes` = JSON_SET(`attributes`, '$.force_pw_update', :force_pw_update),
|
`attributes` = JSON_SET(`attributes`, '$.force_pw_update', :force_pw_update),
|
||||||
`attributes` = JSON_SET(`attributes`, '$.sogo_access', :sogo_access),
|
`attributes` = JSON_SET(`attributes`, '$.sogo_access', :sogo_access),
|
||||||
`attributes` = JSON_SET(`attributes`, '$.imap_access', :imap_access),
|
`attributes` = JSON_SET(`attributes`, '$.imap_access', :imap_access),
|
||||||
`attributes` = JSON_SET(`attributes`, '$.sieve_access', :sieve_access),
|
`attributes` = JSON_SET(`attributes`, '$.sieve_access', :sieve_access),
|
||||||
`attributes` = JSON_SET(`attributes`, '$.pop3_access', :pop3_access),
|
`attributes` = JSON_SET(`attributes`, '$.pop3_access', :pop3_access),
|
||||||
`attributes` = JSON_SET(`attributes`, '$.relayhost', :relayhost),
|
`attributes` = JSON_SET(`attributes`, '$.relayhost', :relayhost),
|
||||||
`attributes` = JSON_SET(`attributes`, '$.smtp_access', :smtp_access)
|
`attributes` = JSON_SET(`attributes`, '$.smtp_access', :smtp_access),
|
||||||
|
`attributes` = JSON_SET(`attributes`, '$.attribute_hash', :attribute_hash)
|
||||||
WHERE `username` = :username");
|
WHERE `username` = :username");
|
||||||
$stmt->execute(array(
|
$stmt->execute(array(
|
||||||
':active' => $active,
|
':active' => $active,
|
||||||
':name' => $name,
|
':name' => $name,
|
||||||
':quota_b' => $quota_b,
|
':quota_b' => $quota_b,
|
||||||
|
':attribute_hash' => $attribute_hash,
|
||||||
':force_pw_update' => $force_pw_update,
|
':force_pw_update' => $force_pw_update,
|
||||||
':sogo_access' => $sogo_access,
|
':sogo_access' => $sogo_access,
|
||||||
':imap_access' => $imap_access,
|
':imap_access' => $imap_access,
|
||||||
@ -3202,7 +3217,8 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
|||||||
':sieve_access' => $sieve_access,
|
':sieve_access' => $sieve_access,
|
||||||
':smtp_access' => $smtp_access,
|
':smtp_access' => $smtp_access,
|
||||||
':relayhost' => $relayhost,
|
':relayhost' => $relayhost,
|
||||||
':username' => $username
|
':username' => $username,
|
||||||
|
':authsource' => $authsource
|
||||||
));
|
));
|
||||||
// save tags
|
// save tags
|
||||||
foreach($tags as $index => $tag){
|
foreach($tags as $index => $tag){
|
||||||
@ -3215,11 +3231,14 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
|||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
$stmt = $pdo->prepare("INSERT INTO `tags_mailbox` (`username`, `tag_name`) VALUES (:username, :tag_name)");
|
try {
|
||||||
$stmt->execute(array(
|
$stmt = $pdo->prepare("INSERT INTO `tags_mailbox` (`username`, `tag_name`) VALUES (:username, :tag_name)");
|
||||||
':username' => $username,
|
$stmt->execute(array(
|
||||||
':tag_name' => $tag,
|
':username' => $username,
|
||||||
));
|
':tag_name' => $tag,
|
||||||
|
));
|
||||||
|
} catch (Exception $e) {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$_SESSION['return'][] = array(
|
$_SESSION['return'][] = array(
|
||||||
@ -3248,7 +3267,13 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$mbox_template_data = json_decode($mbox_template_data["attributes"], true);
|
$attribute_hash = sha1(json_encode($mbox_template_data["attributes"]));
|
||||||
|
$is_now = mailbox('get', 'mailbox_details', $_data['username']);
|
||||||
|
if ($is_now['attributes']['attribute_hash'] == $attribute_hash)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
$mbox_template_data = json_decode($mbox_template_data["attributes"], true);
|
||||||
|
$mbox_template_data['attribute_hash'] = $attribute_hash;
|
||||||
$quarantine_attributes = array('username' => $_data['username']);
|
$quarantine_attributes = array('username' => $_data['username']);
|
||||||
$tls_attributes = array('username' => $_data['username']);
|
$tls_attributes = array('username' => $_data['username']);
|
||||||
$ratelimit_attributes = array('object' => $_data['username']);
|
$ratelimit_attributes = array('object' => $_data['username']);
|
||||||
|
@ -28,7 +28,13 @@
|
|||||||
<div class="row mb-2">
|
<div class="row mb-2">
|
||||||
<label class="control-label col-sm-2">{{ lang.admin.iam }}</label>
|
<label class="control-label col-sm-2">{{ lang.admin.iam }}</label>
|
||||||
<div class="col-sm-10">
|
<div class="col-sm-10">
|
||||||
<h4><span class="badge bg-primary">{{ result.authsource }}<i class="ms-2 bi bi-person-circle"></i></i></span></h4>
|
<select
|
||||||
|
data-style="btn btn-secondary"
|
||||||
|
name="authsource" class="full-width-select form-control" required>
|
||||||
|
<option value="mailcow" {% if result.authsource == "mailcow" %}selected{% endif %}>mailcow</option>
|
||||||
|
<option value="keycloak" {% if result.authsource == "keycloak" %}selected{% endif %}>Keycloak</option>
|
||||||
|
<option value="generic-oidc" {% if result.authsource == "generic-oidc" %}selected{% endif %}>Generic-OIDC</option>
|
||||||
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row mb-2">
|
<div class="row mb-2">
|
||||||
|
Loading…
Reference in New Issue
Block a user