mirror of
https://github.com/the-djmaze/snappymail.git
synced 2025-10-08 20:56:03 +08:00
Moved some application.ini settings
This commit is contained in:
parent
16daa7b55e
commit
39bb3719c2
4 changed files with 60 additions and 57 deletions
|
@ -57,16 +57,17 @@ custom_server_signature = "SnappyMail"
|
||||||
x_xss_protection_header = "1; mode=block"
|
x_xss_protection_header = "1; mode=block"
|
||||||
openpgp = Off
|
openpgp = Off
|
||||||
|
|
||||||
|
; Access settings
|
||||||
|
allow_admin_panel = On
|
||||||
|
|
||||||
; Login and password for web admin panel
|
; Login and password for web admin panel
|
||||||
admin_login = "admin"
|
admin_login = "admin"
|
||||||
admin_password = ""
|
admin_password = ""
|
||||||
admin_totp = ""
|
admin_totp = ""
|
||||||
|
|
||||||
; Access settings
|
|
||||||
allow_admin_panel = On
|
|
||||||
hide_x_mailer_header = On
|
|
||||||
admin_panel_host = ""
|
admin_panel_host = ""
|
||||||
admin_panel_key = "admin"
|
admin_panel_key = "admin"
|
||||||
|
force_https = Off
|
||||||
|
hide_x_mailer_header = On
|
||||||
|
|
||||||
; For example to allow all images use "img-src https:". More info at https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy#directives
|
; For example to allow all images use "img-src https:". More info at https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy#directives
|
||||||
content_security_policy = ""
|
content_security_policy = ""
|
||||||
|
@ -117,8 +118,11 @@ disable_compression = On
|
||||||
|
|
||||||
[capa]
|
[capa]
|
||||||
quota = On
|
quota = On
|
||||||
|
|
||||||
|
; Allow clear folder and delete messages without moving to trash
|
||||||
dangerous_actions = On
|
dangerous_actions = On
|
||||||
message_actions = On
|
|
||||||
|
; Allow download attachments as Zip (and optionally others)
|
||||||
attachments_actions = On
|
attachments_actions = On
|
||||||
|
|
||||||
[login]
|
[login]
|
||||||
|
@ -131,7 +135,11 @@ default_domain = ""
|
||||||
|
|
||||||
; Allow language selection on webmail login screen
|
; Allow language selection on webmail login screen
|
||||||
allow_languages_on_login = On
|
allow_languages_on_login = On
|
||||||
|
|
||||||
|
; Detect language from browser header `Accept-Language`
|
||||||
determine_user_language = On
|
determine_user_language = On
|
||||||
|
|
||||||
|
; Like default_domain but then HTTP_HOST/SERVER_NAME without www.
|
||||||
determine_user_domain = Off
|
determine_user_domain = Off
|
||||||
login_lowercase = On
|
login_lowercase = On
|
||||||
|
|
||||||
|
@ -229,6 +237,8 @@ auth_syslog = On
|
||||||
[debug]
|
[debug]
|
||||||
; Special option required for development purposes
|
; Special option required for development purposes
|
||||||
enable = Off
|
enable = Off
|
||||||
|
javascript = Off
|
||||||
|
css = Off
|
||||||
|
|
||||||
[cache]
|
[cache]
|
||||||
; The section controls caching of the entire application.
|
; The section controls caching of the entire application.
|
||||||
|
@ -256,7 +266,6 @@ http_expires = 3600
|
||||||
|
|
||||||
; Caching message UIDs when searching and sorting (threading)
|
; Caching message UIDs when searching and sorting (threading)
|
||||||
server_uids = On
|
server_uids = On
|
||||||
|
|
||||||
system_data = On
|
system_data = On
|
||||||
|
|
||||||
[imap]
|
[imap]
|
||||||
|
@ -266,26 +275,28 @@ message_list_fast_simple_search = On
|
||||||
message_list_permanent_filter = ""
|
message_list_permanent_filter = ""
|
||||||
message_all_headers = Off
|
message_all_headers = Off
|
||||||
show_login_alert = On
|
show_login_alert = On
|
||||||
|
fetch_new_messages = On
|
||||||
|
|
||||||
[labs]
|
[labs]
|
||||||
|
; Display message RFC 2822 date and time header, instead of the arrival internal date.
|
||||||
date_from_headers = On
|
date_from_headers = On
|
||||||
allow_message_append = Off
|
allow_message_append = Off
|
||||||
login_fault_delay = 1
|
login_fault_delay = 1
|
||||||
log_ajax_response_write_limit = 300
|
log_ajax_response_write_limit = 300
|
||||||
allow_html_editor_biti_buttons = Off
|
allow_html_editor_biti_buttons = Off
|
||||||
allow_ctrl_enter_on_compose = On
|
allow_ctrl_enter_on_compose = On
|
||||||
try_to_detect_hidden_images = Off
|
|
||||||
use_app_debug_js = Off
|
|
||||||
use_app_debug_css = Off
|
|
||||||
smtp_show_server_errors = Off
|
smtp_show_server_errors = Off
|
||||||
sieve_auth_plain_initial = On
|
sieve_auth_plain_initial = On
|
||||||
sieve_allow_fileinto_inbox = Off
|
sieve_allow_fileinto_inbox = Off
|
||||||
|
|
||||||
|
; PHP mail() remove To and Subject headers
|
||||||
mail_func_clear_headers = On
|
mail_func_clear_headers = On
|
||||||
|
|
||||||
|
; PHP mail() set -f emailaddress
|
||||||
mail_func_additional_parameters = Off
|
mail_func_additional_parameters = Off
|
||||||
folders_spec_limit = 50
|
folders_spec_limit = 50
|
||||||
curl_proxy = ""
|
curl_proxy = ""
|
||||||
curl_proxy_auth = ""
|
curl_proxy_auth = ""
|
||||||
force_https = Off
|
|
||||||
custom_login_link = ""
|
custom_login_link = ""
|
||||||
custom_logout_link = ""
|
custom_logout_link = ""
|
||||||
http_client_ip_check_proxy = Off
|
http_client_ip_check_proxy = Off
|
||||||
|
@ -297,7 +308,6 @@ use_local_proxy_for_external_images = On
|
||||||
image_exif_auto_rotate = Off
|
image_exif_auto_rotate = Off
|
||||||
cookie_default_path = ""
|
cookie_default_path = ""
|
||||||
cookie_default_secure = Off
|
cookie_default_secure = Off
|
||||||
check_new_messages = On
|
|
||||||
replace_env_in_configuration = ""
|
replace_env_in_configuration = ""
|
||||||
boundary_prefix = ""
|
boundary_prefix = ""
|
||||||
dev_email = ""
|
dev_email = ""
|
||||||
|
|
|
@ -4,7 +4,7 @@ namespace RainLoop\Config;
|
||||||
|
|
||||||
class Application extends \RainLoop\Config\AbstractConfig
|
class Application extends \RainLoop\Config\AbstractConfig
|
||||||
{
|
{
|
||||||
private $aReplaceEnv = null;
|
private ?array $aReplaceEnv = null;
|
||||||
|
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
|
@ -23,19 +23,16 @@ class Application extends \RainLoop\Config\AbstractConfig
|
||||||
(isset($_SERVER) && \is_array($_SERVER) && \count($_SERVER)))
|
(isset($_SERVER) && \is_array($_SERVER) && \count($_SERVER)))
|
||||||
{
|
{
|
||||||
$sEnvNames = $this->Get('labs', 'replace_env_in_configuration', '');
|
$sEnvNames = $this->Get('labs', 'replace_env_in_configuration', '');
|
||||||
if (\strlen($sEnvNames))
|
if (\strlen($sEnvNames)) {
|
||||||
{
|
|
||||||
$this->aReplaceEnv = \explode(',', $sEnvNames);
|
$this->aReplaceEnv = \explode(',', $sEnvNames);
|
||||||
if (\is_array($this->aReplaceEnv))
|
if (\is_array($this->aReplaceEnv)) {
|
||||||
{
|
|
||||||
$this->aReplaceEnv = \array_map('trim', $this->aReplaceEnv);
|
$this->aReplaceEnv = \array_map('trim', $this->aReplaceEnv);
|
||||||
$this->aReplaceEnv = \array_map('strtolower', $this->aReplaceEnv);
|
$this->aReplaceEnv = \array_map('strtolower', $this->aReplaceEnv);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!\is_array($this->aReplaceEnv) || 0 === \count($this->aReplaceEnv))
|
if (!\is_array($this->aReplaceEnv) || !\count($this->aReplaceEnv)) {
|
||||||
{
|
|
||||||
$this->aReplaceEnv = null;
|
$this->aReplaceEnv = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,34 +55,23 @@ class Application extends \RainLoop\Config\AbstractConfig
|
||||||
public function Get(string $sSection, string $sName, $mDefault = null)
|
public function Get(string $sSection, string $sName, $mDefault = null)
|
||||||
{
|
{
|
||||||
$mResult = parent::Get($sSection, $sName, $mDefault);
|
$mResult = parent::Get($sSection, $sName, $mDefault);
|
||||||
if ($this->aReplaceEnv && \is_string($mResult))
|
if ($this->aReplaceEnv && \is_string($mResult)) {
|
||||||
{
|
|
||||||
$sKey = \strtolower($sSection.'.'.$sName);
|
$sKey = \strtolower($sSection.'.'.$sName);
|
||||||
if (\in_array($sKey, $this->aReplaceEnv) && false !== strpos($mResult, '$'))
|
if (\in_array($sKey, $this->aReplaceEnv) && false !== strpos($mResult, '$')) {
|
||||||
{
|
|
||||||
$mResult = \preg_replace_callback('/\$([^\s]+)/', function($aMatch) {
|
$mResult = \preg_replace_callback('/\$([^\s]+)/', function($aMatch) {
|
||||||
|
if (!empty($aMatch[0]) && !empty($aMatch[1])) {
|
||||||
if (!empty($aMatch[0]) && !empty($aMatch[1]))
|
if (!empty($_ENV[$aMatch[1]])) {
|
||||||
{
|
return $_ENV[$aMatch[1]];
|
||||||
if (!empty($_ENV[$aMatch[1]]))
|
}
|
||||||
{
|
if (!empty($_SERVER[$aMatch[1]])) {
|
||||||
return $_SERVER[$aMatch[1]];
|
return $_SERVER[$aMatch[1]];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($_SERVER[$aMatch[1]]))
|
|
||||||
{
|
|
||||||
return $_SERVER[$aMatch[1]];
|
|
||||||
}
|
|
||||||
|
|
||||||
return $aMatch[0];
|
return $aMatch[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
return '';
|
return '';
|
||||||
|
|
||||||
}, $mResult);
|
}, $mResult);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $mResult;
|
return $mResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -106,6 +92,13 @@ class Application extends \RainLoop\Config\AbstractConfig
|
||||||
$sSectionKey = 'cache';
|
$sSectionKey = 'cache';
|
||||||
$sParamKey = 'system_data';
|
$sParamKey = 'system_data';
|
||||||
}
|
}
|
||||||
|
if ('force_https' === $sParamKey) {
|
||||||
|
$sSectionKey = 'security';
|
||||||
|
}
|
||||||
|
if ('check_new_messages' === $sParamKey) {
|
||||||
|
$sSectionKey = 'imap';
|
||||||
|
$sParamKey = 'fetch_new_messages';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
parent::Set($sSectionKey, $sParamKey, $mParamValue);
|
parent::Set($sSectionKey, $sParamKey, $mParamValue);
|
||||||
}
|
}
|
||||||
|
@ -187,24 +180,25 @@ class Application extends \RainLoop\Config\AbstractConfig
|
||||||
),
|
),
|
||||||
|
|
||||||
'security' => array(
|
'security' => array(
|
||||||
'custom_server_signature' => array('SnappyMail'),
|
'custom_server_signature' => array('SnappyMail'),
|
||||||
'x_xss_protection_header' => array('1; mode=block'),
|
'x_xss_protection_header' => array('1; mode=block'),
|
||||||
|
|
||||||
'openpgp' => array(false),
|
'openpgp' => array(false),
|
||||||
|
|
||||||
'allow_admin_panel' => array(true, 'Access settings'),
|
'allow_admin_panel' => array(true, 'Access settings'),
|
||||||
'admin_login' => array('admin', 'Login and password for web admin panel'),
|
'admin_login' => array('admin', 'Login and password for web admin panel'),
|
||||||
'admin_password' => array(''),
|
'admin_password' => array(''),
|
||||||
'admin_totp' => array(''),
|
'admin_totp' => array(''),
|
||||||
'admin_panel_host' => array(''),
|
'admin_panel_host' => array(''),
|
||||||
'admin_panel_key' => array('admin'),
|
'admin_panel_key' => array('admin'),
|
||||||
|
|
||||||
'hide_x_mailer_header' => array(true),
|
'force_https' => array(false),
|
||||||
'content_security_policy' => array('', 'For example to allow all images use "img-src https:". More info at https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy#directives'),
|
'hide_x_mailer_header' => array(true),
|
||||||
'csp_report' => array(false, 'Report CSP errors to PHP and/or SnappyMail Log'),
|
'content_security_policy' => array('', 'For example to allow all images use "img-src https:". More info at https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy#directives'),
|
||||||
'encrypt_cipher' => array('aes-256-cbc-hmac-sha1', 'A valid cipher method from https://php.net/openssl_get_cipher_methods'),
|
'csp_report' => array(false, 'Report CSP errors to PHP and/or SnappyMail Log'),
|
||||||
'cookie_samesite' => array('Strict', 'Strict, Lax or None'),
|
'encrypt_cipher' => array('aes-256-cbc-hmac-sha1', 'A valid cipher method from https://php.net/openssl_get_cipher_methods'),
|
||||||
'secfetch_allow' => array('', 'Additional allowed Sec-Fetch combinations separated by ";".
|
'cookie_samesite' => array('Strict', 'Strict, Lax or None'),
|
||||||
|
'secfetch_allow' => array('', 'Additional allowed Sec-Fetch combinations separated by ";".
|
||||||
For example:
|
For example:
|
||||||
* Allow iframe on same domain in any mode: dest=iframe,site=same-origin
|
* Allow iframe on same domain in any mode: dest=iframe,site=same-origin
|
||||||
* Allow navigate to iframe on same domain: mode=navigate,dest=iframe,site=same-origin
|
* Allow navigate to iframe on same domain: mode=navigate,dest=iframe,site=same-origin
|
||||||
|
@ -379,6 +373,7 @@ Enables caching in the system'),
|
||||||
'message_list_permanent_filter' => array(''),
|
'message_list_permanent_filter' => array(''),
|
||||||
'message_all_headers' => array(false),
|
'message_all_headers' => array(false),
|
||||||
'show_login_alert' => array(true),
|
'show_login_alert' => array(true),
|
||||||
|
'fetch_new_messages' => array(true),
|
||||||
),
|
),
|
||||||
|
|
||||||
'labs' => array(
|
'labs' => array(
|
||||||
|
@ -391,12 +386,11 @@ Enables caching in the system'),
|
||||||
'smtp_show_server_errors' => array(false),
|
'smtp_show_server_errors' => array(false),
|
||||||
'sieve_auth_plain_initial' => array(true),
|
'sieve_auth_plain_initial' => array(true),
|
||||||
'sieve_allow_fileinto_inbox' => array(false),
|
'sieve_allow_fileinto_inbox' => array(false),
|
||||||
'mail_func_clear_headers' => array(true),
|
'mail_func_clear_headers' => array(true, 'PHP mail() remove To and Subject headers'),
|
||||||
'mail_func_additional_parameters' => array(false),
|
'mail_func_additional_parameters' => array(false, 'PHP mail() set -f emailaddress'),
|
||||||
'folders_spec_limit' => array(50),
|
'folders_spec_limit' => array(50),
|
||||||
'curl_proxy' => array(''),
|
'curl_proxy' => array(''),
|
||||||
'curl_proxy_auth' => array(''),
|
'curl_proxy_auth' => array(''),
|
||||||
'force_https' => array(false),
|
|
||||||
'custom_login_link' => array(''),
|
'custom_login_link' => array(''),
|
||||||
'custom_logout_link' => array(''),
|
'custom_logout_link' => array(''),
|
||||||
'http_client_ip_check_proxy' => array(false),
|
'http_client_ip_check_proxy' => array(false),
|
||||||
|
@ -408,7 +402,6 @@ Enables caching in the system'),
|
||||||
'image_exif_auto_rotate' => array(false),
|
'image_exif_auto_rotate' => array(false),
|
||||||
'cookie_default_path' => array(''),
|
'cookie_default_path' => array(''),
|
||||||
'cookie_default_secure' => array(false),
|
'cookie_default_secure' => array(false),
|
||||||
'check_new_messages' => array(true),
|
|
||||||
'replace_env_in_configuration' => array(''),
|
'replace_env_in_configuration' => array(''),
|
||||||
'boundary_prefix' => array(''),
|
'boundary_prefix' => array(''),
|
||||||
'dev_email' => array(''),
|
'dev_email' => array(''),
|
||||||
|
|
|
@ -221,7 +221,7 @@ abstract class Account implements \JsonSerializable
|
||||||
|
|
||||||
$oSettings->expunge_all_on_delete |= !!$oConfig->Get('imap', 'use_expunge_all_on_delete', false);
|
$oSettings->expunge_all_on_delete |= !!$oConfig->Get('imap', 'use_expunge_all_on_delete', false);
|
||||||
$oSettings->fast_simple_search = !(!$oSettings->fast_simple_search || !$oConfig->Get('imap', 'message_list_fast_simple_search', true));
|
$oSettings->fast_simple_search = !(!$oSettings->fast_simple_search || !$oConfig->Get('imap', 'message_list_fast_simple_search', true));
|
||||||
$oSettings->fetch_new_messages = !(!$oSettings->fetch_new_messages || !$oConfig->Get('labs', 'check_new_messages', true));
|
$oSettings->fetch_new_messages = !(!$oSettings->fetch_new_messages || !$oConfig->Get('imap', 'fetch_new_messages', true));
|
||||||
$oSettings->force_select |= !!$oConfig->Get('imap', 'use_force_selection', false);
|
$oSettings->force_select |= !!$oConfig->Get('imap', 'use_force_selection', false);
|
||||||
$oSettings->message_all_headers |= !!$oConfig->Get('imap', 'message_all_headers', false);
|
$oSettings->message_all_headers |= !!$oConfig->Get('imap', 'message_all_headers', false);
|
||||||
$oSettings->search_filter = $oSettings->search_filter ?: \trim($oConfig->Get('imap', 'message_list_permanent_filter', ''));
|
$oSettings->search_filter = $oSettings->search_filter ?: \trim($oConfig->Get('imap', 'message_list_permanent_filter', ''));
|
||||||
|
|
|
@ -38,7 +38,7 @@ abstract class Service
|
||||||
\header('X-XSS-Protection: '.$sXssProtectionOptionsHeader);
|
\header('X-XSS-Protection: '.$sXssProtectionOptionsHeader);
|
||||||
|
|
||||||
$oHttp = \MailSo\Base\Http::SingletonInstance();
|
$oHttp = \MailSo\Base\Http::SingletonInstance();
|
||||||
if ($oConfig->Get('labs', 'force_https', false) && !$oHttp->IsSecure()) {
|
if ($oConfig->Get('security', 'force_https', false) && !$oHttp->IsSecure()) {
|
||||||
\header('Location: https://'.$oHttp->GetHost(false, false).$oHttp->GetUrl());
|
\header('Location: https://'.$oHttp->GetHost(false, false).$oHttp->GetUrl());
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue