[main.py] move settings stuff into its own import
also correct imports to use app namespace
This commit is contained in:
@@ -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"
|
||||
|
||||
@@ -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"])
|
||||
|
||||
33
app/main.py
33
app/main.py
@@ -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()
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
26
app/services/settings.py
Normal 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.')
|
||||
|
||||
Reference in New Issue
Block a user