from fastapi import FastAPI, Depends from fastapi.staticfiles import StaticFiles from fastapi.middleware.cors import CORSMiddleware from .database import engine, Base, SessionLocal from .routers import auth, users, apps, sso, requests from . import models, auth_utils from sqlalchemy.orm import Session # Create tables Base.metadata.create_all(bind=engine) app = FastAPI(title="ASF SSO Service") # CORS app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # Routers app.include_router(auth.router) app.include_router(users.router) app.include_router(apps.router) app.include_router(sso.router) app.include_router(requests.router) import os # Mount static files (Frontend) static_dir = os.path.join(os.path.dirname(os.path.dirname(__file__)), "frontend") app.mount("/", StaticFiles(directory=static_dir, html=True), name="static") # Create initial admin user if not exists def create_initial_admin(): db = SessionLocal() try: admin = db.query(models.User).filter(models.User.username == "admin").first() if not admin: print("Creating initial admin user...") hashed_pwd = auth_utils.get_password_hash("admin") # Default password, should be changed admin_user = models.User( username="admin", email="admin@nabd-co.com", hashed_password=hashed_pwd, is_admin=True, is_active=True ) db.add(admin_user) db.commit() print("Admin user created.") finally: db.close() create_initial_admin()