66 lines
1.8 KiB
Python
66 lines
1.8 KiB
Python
from typing import Dict, List
|
|
|
|
from flask import Flask
|
|
|
|
from fittrackee import db
|
|
|
|
from .models import AppConfig
|
|
|
|
MAX_FILE_SIZE = 1 * 1024 * 1024 # 1MB
|
|
|
|
|
|
def get_or_init_config() -> AppConfig:
|
|
"""
|
|
Init application configuration.
|
|
"""
|
|
existing_config = AppConfig.query.one_or_none()
|
|
if existing_config:
|
|
return existing_config
|
|
config = AppConfig()
|
|
config.max_users = 0 # no limitation
|
|
config.max_single_file_size = MAX_FILE_SIZE
|
|
config.max_zip_file_size = MAX_FILE_SIZE * 10
|
|
db.session.add(config)
|
|
db.session.commit()
|
|
return config
|
|
|
|
|
|
def update_app_config_from_database(
|
|
current_app: Flask, db_config: AppConfig
|
|
) -> None:
|
|
current_app.config['gpx_limit_import'] = db_config.gpx_limit_import
|
|
current_app.config['max_single_file_size'] = db_config.max_single_file_size
|
|
current_app.config['MAX_CONTENT_LENGTH'] = db_config.max_zip_file_size
|
|
current_app.config['max_users'] = db_config.max_users
|
|
current_app.config[
|
|
'is_registration_enabled'
|
|
] = db_config.is_registration_enabled
|
|
current_app.config['privacy_policy_date'] = db_config.privacy_policy_date
|
|
|
|
|
|
def verify_app_config(config_data: Dict) -> List:
|
|
"""
|
|
Verify if application config is valid.
|
|
|
|
If not, it returns not empty string
|
|
"""
|
|
ret = []
|
|
if (
|
|
'gpx_limit_import' in config_data
|
|
and config_data['gpx_limit_import'] <= 0
|
|
):
|
|
ret.append('Max. files in a zip archive must be greater than 0')
|
|
|
|
if (
|
|
'max_single_file_size' in config_data
|
|
and config_data['max_single_file_size'] <= 0
|
|
):
|
|
ret.append('Max. size of uploaded files must be greater than 0')
|
|
|
|
if (
|
|
'max_zip_file_size' in config_data
|
|
and config_data['max_zip_file_size'] <= 0
|
|
):
|
|
ret.append('Max. size of zip archive must be greater than 0')
|
|
return ret
|