Files
PyMTA-server/email_server/settings_loader.py

55 lines
1.6 KiB
Python
Raw Normal View History

2025-05-31 16:32:11 +01:00
"""
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