mirror of
https://github.com/outbackdingo/Mailu.git
synced 2026-01-27 18:19:36 +00:00
updated flask
ConfigManager should not replace app.config - this is causing trouble with some other flask modules (swagger). Updated ConfigManager to only modify app.config and not replace it.
This commit is contained in:
@@ -33,7 +33,7 @@ def create_app_from_config(config):
|
||||
app.srs_key = hmac.new(bytearray(app.secret_key, 'utf-8'), bytearray('SRS_KEY', 'utf-8'), 'sha256').digest()
|
||||
|
||||
# Initialize list of translations
|
||||
config.translations = {
|
||||
app.config.translations = {
|
||||
str(locale): locale
|
||||
for locale in sorted(
|
||||
utils.babel.list_translations(),
|
||||
|
||||
@@ -88,7 +88,7 @@ DEFAULT_CONFIG = {
|
||||
'POD_ADDRESS_RANGE': None
|
||||
}
|
||||
|
||||
class ConfigManager(dict):
|
||||
class ConfigManager:
|
||||
""" Naive configuration manager that uses environment only
|
||||
"""
|
||||
|
||||
@@ -103,19 +103,16 @@ class ConfigManager(dict):
|
||||
|
||||
def get_host_address(self, name):
|
||||
# if MYSERVICE_ADDRESS is defined, use this
|
||||
if '{}_ADDRESS'.format(name) in os.environ:
|
||||
return os.environ.get('{}_ADDRESS'.format(name))
|
||||
if f'{name}_ADDRESS' in os.environ:
|
||||
return os.environ.get(f'{name}_ADDRESS')
|
||||
# otherwise use the host name and resolve it
|
||||
return system.resolve_address(self.config['HOST_{}'.format(name)])
|
||||
return system.resolve_address(self.config[f'HOST_{name}'])
|
||||
|
||||
def resolve_hosts(self):
|
||||
self.config["IMAP_ADDRESS"] = self.get_host_address("IMAP")
|
||||
self.config["POP3_ADDRESS"] = self.get_host_address("POP3")
|
||||
self.config["AUTHSMTP_ADDRESS"] = self.get_host_address("AUTHSMTP")
|
||||
self.config["SMTP_ADDRESS"] = self.get_host_address("SMTP")
|
||||
self.config["REDIS_ADDRESS"] = self.get_host_address("REDIS")
|
||||
if self.config["WEBMAIL"] != "none":
|
||||
self.config["WEBMAIL_ADDRESS"] = self.get_host_address("WEBMAIL")
|
||||
for key in ['IMAP', 'POP3', 'AUTHSMTP', 'SMTP', 'REDIS']:
|
||||
self.config[f'{key}_ADDRESS'] = self.get_host_address(key)
|
||||
if self.config['WEBMAIL'] != 'none':
|
||||
self.config['WEBMAIL_ADDRESS'] = self.get_host_address('WEBMAIL')
|
||||
|
||||
def __get_env(self, key, value):
|
||||
key_file = key + "_FILE"
|
||||
@@ -134,6 +131,7 @@ class ConfigManager(dict):
|
||||
return value
|
||||
|
||||
def init_app(self, app):
|
||||
# get current app config
|
||||
self.config.update(app.config)
|
||||
# get environment variables
|
||||
self.config.update({
|
||||
@@ -147,9 +145,9 @@ class ConfigManager(dict):
|
||||
template = self.DB_TEMPLATES[self.config['DB_FLAVOR']]
|
||||
self.config['SQLALCHEMY_DATABASE_URI'] = template.format(**self.config)
|
||||
|
||||
self.config['RATELIMIT_STORAGE_URL'] = 'redis://{0}/2'.format(self.config['REDIS_ADDRESS'])
|
||||
self.config['QUOTA_STORAGE_URL'] = 'redis://{0}/1'.format(self.config['REDIS_ADDRESS'])
|
||||
self.config['SESSION_STORAGE_URL'] = 'redis://{0}/3'.format(self.config['REDIS_ADDRESS'])
|
||||
self.config['RATELIMIT_STORAGE_URL'] = f'redis://{self.config["REDIS_ADDRESS"]}/2'
|
||||
self.config['QUOTA_STORAGE_URL'] = f'redis://{self.config["REDIS_ADDRESS"]}/1'
|
||||
self.config['SESSION_STORAGE_URL'] = f'redis://{self.config["REDIS_ADDRESS"]}/3'
|
||||
self.config['SESSION_COOKIE_SAMESITE'] = 'Strict'
|
||||
self.config['SESSION_COOKIE_HTTPONLY'] = True
|
||||
self.config['PERMANENT_SESSION_LIFETIME'] = timedelta(hours=int(self.config['SESSION_LIFETIME']))
|
||||
@@ -157,25 +155,7 @@ class ConfigManager(dict):
|
||||
self.config['AUTH_RATELIMIT_EXEMPTION'] = set(ipaddress.ip_network(cidr, False) for cidr in (cidr.strip() for cidr in self.config['AUTH_RATELIMIT_EXEMPTION'].split(',')) if cidr)
|
||||
self.config['HOSTNAMES'] = ','.join(hostnames)
|
||||
self.config['HOSTNAME'] = hostnames[0]
|
||||
# update the app config itself
|
||||
app.config = self
|
||||
|
||||
def setdefault(self, key, value):
|
||||
if key not in self.config:
|
||||
self.config[key] = value
|
||||
return self.config[key]
|
||||
# update the app config
|
||||
app.config.update(self.config)
|
||||
|
||||
def get(self, *args):
|
||||
return self.config.get(*args)
|
||||
|
||||
def keys(self):
|
||||
return self.config.keys()
|
||||
|
||||
def __getitem__(self, key):
|
||||
return self.config.get(key)
|
||||
|
||||
def __setitem__(self, key, value):
|
||||
self.config[key] = value
|
||||
|
||||
def __contains__(self, key):
|
||||
return key in self.config
|
||||
|
||||
@@ -17,7 +17,7 @@ distro==1.5.0
|
||||
dnspython==2.1.0
|
||||
dominate==2.6.0
|
||||
email-validator==1.1.3
|
||||
Flask==1.0.2
|
||||
Flask==2.0.2
|
||||
Flask-Babel==2.0.0
|
||||
Flask-Bootstrap==3.3.7.1
|
||||
Flask-DebugToolbar==0.11.0
|
||||
|
||||
Reference in New Issue
Block a user