11import argparse
22import asyncio
33import datetime
4+ from dotenv import load_dotenv
45import io
56import json
67import logging
@@ -26,9 +27,9 @@ class Settings:
2627 config_dir : str = os .environ .get ("NEBULA_CONFIG_DIR" )
2728 cert_dir : str = os .environ .get ("NEBULA_CERTS_DIR" )
2829 root_host_path : str = os .environ .get ("NEBULA_ROOT_HOST" )
29- config_frontend_dir : str = os .environ .get ("FEDELLAR_CONFIG_FRONTEND_DIR" , "config" )
30+ config_frontend_dir : str = os .environ .get ("NEBULA_CONFIG_FRONTEND_DIR" , "config" )
31+ env_file : str = os .environ .get ("NEBULA_ENV_PATH" , ".env" )
3032 statistics_port : int = os .environ .get ("NEBULA_STATISTICS_PORT" , 8080 )
31- secret_key : str = os .environ .get ("SECRET_KEY" , os .urandom (24 ).hex ())
3233 PERMANENT_SESSION_LIFETIME : datetime .timedelta = datetime .timedelta (minutes = 60 )
3334 templates_dir : str = "templates"
3435 server_log : str = os .environ .get ("NEBULA_SERVER_LOG" , "/nebula/app/logs/server.log" )
@@ -53,6 +54,9 @@ class Settings:
5354 handler .setFormatter (logging .Formatter ("[%(asctime)s] [%(name)s] [%(levelname)s] %(message)s" ))
5455 logger .addHandler (handler )
5556
57+ if os .path .exists (settings .env_file ):
58+ logging .info (f"Loading environment variables from { settings .env_file } " )
59+ load_dotenv (settings .env_file , override = True )
5660
5761from ansi2html import Ansi2HTMLConverter
5862from fastapi import (
@@ -111,8 +115,17 @@ class Settings:
111115
112116logging .info (f"NEBULA_PRODUCTION: { settings .production } " )
113117
118+ if "SECRET_KEY" not in os .environ :
119+ logging .info ("Generating SECRET_KEY" )
120+ os .environ ["SECRET_KEY" ] = os .urandom (24 ).hex ()
121+ logging .info (f"Saving SECRET_KEY to { settings .env_file } " )
122+ with open (settings .env_file , "a" ) as f :
123+ f .write (f"SECRET_KEY={ os .environ ['SECRET_KEY' ]} \n " )
124+ else :
125+ logging .info ("SECRET_KEY already set" )
126+
114127app = FastAPI ()
115- app .add_middleware (SessionMiddleware , secret_key = settings . secret_key )
128+ app .add_middleware (SessionMiddleware , secret_key = os . environ . get ( "SECRET_KEY" ) )
116129app .add_middleware (
117130 CORSMiddleware ,
118131 allow_origins = ["*" ],
0 commit comments