import logging from fasthtml.fastapp import fast_app from starlette.responses import RedirectResponse from auth.auth_manager import AuthManager from auth.email_auth import EmailAuth from components.login.constants import Routes, LOGIN_INSTANCE_ID from components.page_layout_new import page_layout_new from core.instance_manager import InstanceManager logger = logging.getLogger("LoggingApp") login_app, rt = fast_app() @rt(Routes.Login) def get(error_message: str = None, success_message: str = None): """Handler for the login page route.""" instance = InstanceManager.get(None, LOGIN_INSTANCE_ID) return page_layout_new(None, instance.settings_manager, instance.login_page(error_message, success_message)) @rt(Routes.Logout) def get(session): """Handler for logout.""" # Clear session data AuthManager.logout_user(session) # Redirect to login page return RedirectResponse('/login', status_code=303) @rt(Routes.LoginByEmail) def post(session, email: str, password: str): """Handler for email login.""" # Authenticate user success, message, user_data = EmailAuth.authenticate( email=email, password=password ) instance = InstanceManager.get(None, LOGIN_INSTANCE_ID) if not success: return page_layout_new( session, instance.settings_manager, instance.login_page(error_message=message), ) # Log in user by setting session data AuthManager.login_user(session, user_data) # Redirect to home page return RedirectResponse('/', status_code=303)