49 lines
1.9 KiB
Python
49 lines
1.9 KiB
Python
import configparser
|
||
import os
|
||
import secrets
|
||
import logging
|
||
|
||
logging.basicConfig(level=logging.INFO)
|
||
logger = logging.getLogger(__name__)
|
||
|
||
|
||
def init_config():
|
||
"""
|
||
Инициализация конфигурации приложения (JWT SECRET_KEY).
|
||
|
||
Назначение:
|
||
- Создаёт файл `/etc/gonets/config.ini` с секцией `[JWT]` и случайным
|
||
`secret_key`, если он отсутствует. Устанавливает права `0o600`.
|
||
|
||
Замечания:
|
||
- Функция предназначена для однократного запуска (в инсталляторе/скрипте
|
||
подготовки окружения) и безопасно пропускает работу, если файл уже существует.
|
||
"""
|
||
"""Создаёт конфигурационный файл с SECRET_KEY."""
|
||
config_path = "/etc/gonets/config.ini"
|
||
config_dir = os.path.dirname(config_path)
|
||
|
||
if os.path.exists(config_path):
|
||
logger.info(
|
||
f"Конфигурационный файл {config_path} уже существует, пропускаем инициализацию"
|
||
)
|
||
return
|
||
|
||
try:
|
||
secret_key = secrets.token_urlsafe(32)
|
||
os.makedirs(config_dir, exist_ok=True)
|
||
config = configparser.ConfigParser()
|
||
config["JWT"] = {"secret_key": secret_key}
|
||
with open(config_path, "w") as config_file:
|
||
config.write(config_file)
|
||
os.chmod(config_path, 0o600)
|
||
logger.info(f"Создан конфигурационный файл {config_path}")
|
||
except Exception as e:
|
||
logger.error(
|
||
f"Ошибка при создании конфигурационного файла: {type(e).__name__} - {str(e)}"
|
||
)
|
||
raise
|
||
|
||
# Нативный запуск для тестов
|
||
if __name__ == "__main__":
|
||
init_config()
|