[main.py] move settings stuff into its own import

also correct imports to use app namespace
This commit is contained in:
2026-07-29 01:24:22 +02:00
parent 1dfd01fc71
commit 683cd9a545
6 changed files with 63 additions and 35 deletions

View File

@@ -6,4 +6,6 @@ MIFARE_ACL_WRITE_BASE_KEY="f1aa99f81cca268de98d422ee0ccb65c"
# 16 bytes AES key
SECRET_KEY="8b14d0b447bff7efa24d5019cc59a999786e31f6f865173bbd642bf18de5ad85"
#Key for oauth
#THESE ARE TESTING KEYS - DO NOT USE IN PROD
#THESE ARE TESTING KEYS - DO NOT USE IN PROD
SQLALCHEMY_DATABASE_URL="sqlite:///./gatekeeper.db"

View File

@@ -5,9 +5,9 @@ from sqlmodel import Session, select
from sqlalchemy.orm import selectinload
from typing import List
from ..model.models import *
from ..services.database import engine, get_session, add_and_refresh
from ..services.auth import auth_is_admin
from app.model.models import *
from app.services.database import engine, get_session, add_and_refresh
from app.services.auth import auth_is_admin
import uuid as gen_uuid
aa_router = APIRouter(prefix="/api/v1/aa", tags=["AccessAuth"])

View File

@@ -5,37 +5,32 @@ from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from fastapi.security import OAuth2PasswordBearer
from contextlib import asynccontextmanager
from dotenv import load_dotenv
from .controllers import userManager, cardManager, groupManager, aaManager, doorManager, debugManager
from .services.database import create_db_and_tables, get_db_session
from .services.auth import token_router, create_first_user
from dotenv import load_dotenv
load_dotenv()
from app.controllers import userManager, cardManager, groupManager, aaManager, doorManager, debugManager
from app.services.database import create_db_and_tables, get_db_session
from app.services.auth import token_router, create_first_user
from app.services.settings import verify_settings
from app.services.scanner import BackgroundScanner
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")
scanner = BackgroundScanner(db=get_db_session())
logging.basicConfig(level=logging.INFO)
def checkDeps():
load_dotenv()
MIFARE_APP_MASTER_KEY = os.getenv('MIFARE_APP_MASTER_KEY')
if not MIFARE_APP_MASTER_KEY:
logger.critical(f"MIFARE APP MASTER KEY not found!")
logger.critical("Writing and reading cards is disabled!")
@asynccontextmanager
async def lifespan(app: FastAPI):
logger.critical("-"*63)
logger.critical("---- Documentation is at http://127.0.0.1:8000/api/v1/docs ----")
logger.critical("-"*63)
checkDeps()
verify_settings()
create_db_and_tables()
create_first_user(db=get_db_session())
logger.info("Database created and tables initialized.")
disableCards = os.getenv("DISABLE_CARDS")
if not disableCards:
if not os.getenv("DISABLE_CARDS"):
scanner.start()
logger.info("-"*63)
logger.info("---- Documentation is at http://127.0.0.1:8000/api/v1/docs ----")
logger.info("-"*63)
yield
#scanner.stop()

View File

@@ -8,13 +8,10 @@ from sqlmodel import Session, select
from pwdlib import PasswordHash
import jwt
from jwt.exceptions import InvalidTokenError
from ..model.models import UserDB, Token, TokenData, UserCreate
from ..services.database import *
from app.model.models import UserDB, Token, TokenData, UserCreate
from app.services.database import *
import secrets, string, os
from dotenv import load_dotenv
load_dotenv()
SECRET_KEY = os.getenv("SECRET_KEY", default="ff"*16)
ALGORITHM = "HS256"
ACCESS_TOKEN_EXPIRE_MINUTES = 120

View File

@@ -1,17 +1,25 @@
import logging
logger = logging.getLogger(__name__)
from os import getenv, path
from sqlmodel import create_engine, SQLModel, Session
from ..model.models import Base
from app.model.models import Base
SQLALCHEMY_DATABASE_URL = "sqlite:///./gatekeeper.db"
SQLALCHEMY_DATABASE_URL = getenv("SQLALCHEMY_DATABASE_URL", "sqlite:///./gatekeeper.db")
engine = create_engine(SQLALCHEMY_DATABASE_URL)
def create_db_and_tables():
SQLModel.metadata.create_all(engine)
from alembic.config import Config
from alembic import command
alembic_cfg = Config("./alembic.ini")
command.stamp(alembic_cfg, "head")
if not path.exists(SQLALCHEMY_DATABASE_URL):
SQLModel.metadata.create_all(engine)
from alembic.config import Config
from alembic import command
alembic_cfg = Config("./alembic.ini")
command.stamp(alembic_cfg, "head")
logger.info("Database created and tables initialized.")
else:
logger.info("Database already exists")
def get_session():
with Session(engine) as db:

26
app/services/settings.py Normal file
View File

@@ -0,0 +1,26 @@
import os
import logging
logger = logging.getLogger(__name__)
def verify_settings():
card_envs = [
"MIFARE_APP_MASTER_KEY",
"MIFARE_ACL_READ_BASE_KEY",
"MIFARE_ACL_WRITE_BASE_KEY",
]
important_envs = [
"SECRET_KEY"
]
other_envs = [
"SQLALCHEMY_DATABASE_URL"
]
for setting in card_envs:
if (setting not in os.environ or setting == "") and not os.getenv("DISABLE_CARDS"):
raise ValueError(f"Missing environment variable for scanner start: {setting} \n Run with DISABLE_CARDS env var to disable cards")
for setting in important_envs:
if setting not in os.environ or setting == "":
raise ValueError(f'Missing critical environment variable {setting}. Stopping...')
for setting in other_envs:
if setting not in os.environ:
logger.critical(f'Env var {setting} not set. Continuing with defaults.')