Files
dilib_operations/scripts/configure.py
T
ms 2c1c48df0c
PostgreSQL integration / tests (push) Has been cancelled
init
2026-11-09 13:15:48 +01:00

26 lines
1.3 KiB
Python

"""Configure a new deployment; never reads secrets from shell arguments."""
import argparse,os,re,secrets
from pathlib import Path
from dotenv import dotenv_values,set_key
def main():
parser=argparse.ArgumentParser()
parser.add_argument('--domain',required=True)
parser.add_argument('--env',default='/etc/dilib-dashboard/dashboard.env')
args=parser.parse_args()
if not re.fullmatch(r'[a-zA-Z0-9](?:[a-zA-Z0-9.-]*[a-zA-Z0-9])?',args.domain):
parser.error('Domain ohne Protokoll oder Port angeben')
path=Path(args.env)
if not path.is_file():parser.error('Env-Datei fehlt; zuerst install-central.sh ausführen')
current=dotenv_values(path)
# Updating the domain does not rotate existing secrets or change the database.
changes={'ALLOWED_HOSTS':args.domain+',127.0.0.1,localhost',
'CSRF_TRUSTED_ORIGINS':'https://'+args.domain}
for key in ('DJANGO_SECRET_KEY','NICEGUI_STORAGE_SECRET'):
if not current.get(key) or current[key].startswith('CHANGE_ME'):
changes[key]=secrets.token_urlsafe(64)
os.umask(0o077)
for key,value in changes.items():set_key(path,key,value,quote_mode='never')
print('Domain und gegebenenfalls Secrets gesetzt. DATABASE_URL und SMTP separat konfigurieren.')
if __name__=='__main__':main()