55 lines
1.6 KiB
Python
55 lines
1.6 KiB
Python
"""
|
|
Settings loader for the SMTP server.
|
|
Automatically generates settings.ini with default values if not present.
|
|
"""
|
|
|
|
import configparser
|
|
from pathlib import Path
|
|
|
|
SETTINGS_PATH = Path(__file__).parent.parent / 'settings.ini'
|
|
|
|
# Default values for settings.ini
|
|
DEFAULTS = {
|
|
'Server': {
|
|
'SMTP_PORT': '4025',
|
|
'SMTP_TLS_PORT': '40587',
|
|
'HOSTNAME': 'localhost',
|
|
'BIND_IP': '0.0.0.0',
|
|
},
|
|
'Database': {
|
|
'DATABASE_URL': 'sqlite:///email_server/server_data/smtp_server.db',
|
|
},
|
|
'Logging': {
|
|
'LOG_LEVEL': 'INFO',
|
|
'hide_info_aiosmtpd': 'true',
|
|
},
|
|
'Relay': {
|
|
'RELAY_TIMEOUT': '10',
|
|
},
|
|
'TLS': {
|
|
'TLS_CERT_FILE': 'email_server/ssl_certs/server.crt',
|
|
'TLS_KEY_FILE': 'email_server/ssl_certs/server.key',
|
|
},
|
|
'DKIM': {
|
|
'DKIM_SELECTOR': 'default',
|
|
'DKIM_KEY_SIZE': '2048',
|
|
},
|
|
}
|
|
|
|
def generate_settings_ini(settings_path: Path = SETTINGS_PATH) -> None:
|
|
"""Generate settings.ini with default values if it does not exist."""
|
|
if settings_path.exists():
|
|
return
|
|
config_parser = configparser.ConfigParser()
|
|
for section, values in DEFAULTS.items():
|
|
config_parser[section] = values
|
|
with open(settings_path, 'w') as f:
|
|
config_parser.write(f)
|
|
|
|
def load_settings(settings_path: Path = SETTINGS_PATH) -> configparser.ConfigParser:
|
|
"""Load settings from settings.ini, generating it if needed."""
|
|
generate_settings_ini(settings_path)
|
|
config_parser = configparser.ConfigParser()
|
|
config_parser.read(settings_path)
|
|
return config_parser
|