2024-08-22 10:09:10 +00:00
|
|
|
import os
|
|
|
|
|
2024-09-09 03:56:44 +00:00
|
|
|
from fastapi import FastAPI, Request
|
|
|
|
from fastapi.middleware.cors import CORSMiddleware
|
|
|
|
from fastapi.responses import (
|
|
|
|
RedirectResponse,
|
|
|
|
)
|
|
|
|
from infoserver.dependencies import Dependencies
|
|
|
|
from infoserver.router_login import router_login
|
2024-09-11 16:58:42 +00:00
|
|
|
from infoserver.router_pdf_preso import router_pdf
|
2024-09-11 19:19:48 +00:00
|
|
|
from infoserver.router_projects import router_projects
|
2024-09-09 03:56:44 +00:00
|
|
|
from infoserver.router_static import router_static
|
2024-09-11 16:58:42 +00:00
|
|
|
from infoserver.router_template import router_template
|
2024-09-09 03:56:44 +00:00
|
|
|
from jwt.exceptions import PyJWTError
|
|
|
|
from starlette.middleware.sessions import SessionMiddleware
|
|
|
|
|
|
|
|
# Set your paths here
|
|
|
|
DB_PATH = '~/code/git.ourworld.tf/freeflowuniverse/heroweb/authdb_example'
|
|
|
|
TEMPLATES_DIR = '~/code/git.ourworld.tf/freeflowuniverse/heroweb/poc/out'
|
|
|
|
STATIC_DIR = '~/code/git.ourworld.tf/freeflowuniverse/heroweb/poc/static'
|
2024-09-11 16:58:42 +00:00
|
|
|
HEROWEB_DIR = '~/code/git.ourworld.tf/tfgrid/info_tfgrid/heroweb'
|
|
|
|
COLLECTIONS_DIR = '~/hero/var/collections'
|
2024-09-09 03:56:44 +00:00
|
|
|
|
|
|
|
DB_PATH = os.path.abspath(os.path.expanduser(DB_PATH))
|
|
|
|
TEMPLATES_DIR = os.path.abspath(os.path.expanduser(TEMPLATES_DIR))
|
|
|
|
STATIC_DIR = os.path.abspath(os.path.expanduser(STATIC_DIR))
|
2024-09-11 16:58:42 +00:00
|
|
|
HEROWEB_DIR = os.path.abspath(os.path.expanduser(HEROWEB_DIR))
|
|
|
|
COLLECTIONS_DIR = os.path.abspath(os.path.expanduser(COLLECTIONS_DIR))
|
|
|
|
|
|
|
|
SERVERHOST = 'http://localhost:8000'
|
2024-09-09 03:56:44 +00:00
|
|
|
|
|
|
|
if not os.path.exists(DB_PATH):
|
|
|
|
raise FileNotFoundError(f'Database path does not exist: {DB_PATH}')
|
|
|
|
if not os.path.exists(TEMPLATES_DIR):
|
|
|
|
raise FileNotFoundError(
|
|
|
|
f'Templates directory does not exist: {TEMPLATES_DIR}'
|
|
|
|
)
|
|
|
|
if not os.path.exists(STATIC_DIR):
|
|
|
|
raise FileNotFoundError(f'Static directory does not exist: {STATIC_DIR}')
|
2024-08-22 10:09:10 +00:00
|
|
|
|
|
|
|
app = FastAPI()
|
|
|
|
|
2024-09-09 03:56:44 +00:00
|
|
|
# Add session middleware for cookie management
|
|
|
|
jwt_secret_key = os.getenv('JWT_SECRET_KEY')
|
|
|
|
if not jwt_secret_key:
|
|
|
|
raise EnvironmentError('JWT_SECRET_KEY environment variable is not set')
|
|
|
|
app.add_middleware(SessionMiddleware, secret_key=jwt_secret_key)
|
2024-08-22 10:09:10 +00:00
|
|
|
|
2024-09-09 03:56:44 +00:00
|
|
|
# Include your routers here
|
|
|
|
app.include_router(router_login)
|
|
|
|
app.include_router(router_pdf)
|
|
|
|
app.include_router(router_static)
|
2024-09-11 16:58:42 +00:00
|
|
|
app.include_router(router_template)
|
2024-09-11 19:19:48 +00:00
|
|
|
app.include_router(router_projects)
|
2024-08-22 10:09:10 +00:00
|
|
|
|
2024-09-11 16:58:42 +00:00
|
|
|
deps = Dependencies(
|
|
|
|
DB_PATH, TEMPLATES_DIR, STATIC_DIR, HEROWEB_DIR, COLLECTIONS_DIR, SERVERHOST
|
|
|
|
)
|
2024-09-09 03:56:44 +00:00
|
|
|
app.deps = deps
|
2024-08-22 10:09:10 +00:00
|
|
|
|
|
|
|
|
2024-09-09 03:56:44 +00:00
|
|
|
app.add_middleware(
|
|
|
|
CORSMiddleware,
|
|
|
|
allow_origins=['*'], # Allows all origins
|
|
|
|
allow_credentials=True,
|
|
|
|
allow_methods=['*'], # Allows all methods
|
|
|
|
allow_headers=['*'], # Allows all headers
|
2024-08-22 10:09:10 +00:00
|
|
|
)
|
|
|
|
|
2024-09-07 03:54:06 +00:00
|
|
|
|
2024-09-09 03:56:44 +00:00
|
|
|
@app.middleware('http')
|
|
|
|
async def check_authentication(
|
|
|
|
request: Request,
|
|
|
|
call_next,
|
|
|
|
):
|
|
|
|
if request.url.path in ['/signup', '/loginsubmit', '/register']:
|
|
|
|
return await call_next(request)
|
2024-09-01 18:00:13 +00:00
|
|
|
|
2024-09-09 03:56:44 +00:00
|
|
|
token = request.cookies.get('access_token')
|
|
|
|
if not token:
|
|
|
|
return RedirectResponse(url='/signup')
|
2024-08-22 10:09:10 +00:00
|
|
|
|
2024-09-09 03:56:44 +00:00
|
|
|
jwt_handler = request.app.deps.jwt_handler
|
2024-09-01 18:00:13 +00:00
|
|
|
try:
|
2024-09-09 03:56:44 +00:00
|
|
|
email = jwt_handler.verify_access_token(token)
|
2024-09-11 16:58:42 +00:00
|
|
|
except PyJWTError as e:
|
|
|
|
print(e)
|
2024-09-09 03:56:44 +00:00
|
|
|
return RedirectResponse(url='/signup')
|
2024-09-07 03:54:06 +00:00
|
|
|
|
2024-09-09 03:56:44 +00:00
|
|
|
request.state.email = email
|
|
|
|
# print(f'Authenticated: {email}')
|
2024-09-07 03:54:06 +00:00
|
|
|
|
2024-09-09 03:56:44 +00:00
|
|
|
return await call_next(request)
|
2024-09-07 03:54:06 +00:00
|
|
|
|
|
|
|
|
2024-09-09 03:56:44 +00:00
|
|
|
if __name__ == '__main__':
|
2024-08-22 10:09:10 +00:00
|
|
|
import uvicorn
|
2024-09-07 03:54:06 +00:00
|
|
|
|
2024-09-09 03:56:44 +00:00
|
|
|
uvicorn.run(app, host='0.0.0.0', port=8000)
|