from fastapi import APIRouter, Request, Cookie, Form from fastapi.responses import RedirectResponse, HTMLResponse import requests from icecream import ic from classes.constraints import Constraints from .db import Database router = APIRouter() @router.get('/dashboard', response_class=HTMLResponse) async def get_dashboard(request: Request, auth_code: str = Cookie(None)): if auth_code is None: return Constraints.templates.TemplateResponse('/errors/index.html', {'request': request, 'error': 'not logged in', 'url': '/login'}) url = "https://login.wownero.com/auth/realms/master/protocol/openid-connect/userinfo" response = requests.post(url, headers={"Authorization": f"Bearer {auth_code}"}) user_profile = response.json() if user_profile.get('preferred_username', None) is None: return Constraints.templates.TemplateResponse('/errors/index.html', {'request': request, 'error': 'account not found...', 'url': '/login'}) user_name = user_profile.get('preferred_username', None) return Constraints.templates.TemplateResponse('/dashboard/index.html', {'request': request, 'user_data': Database.Users.get_address(user_name)}) @router.post('/submit_address') async def post_submit_address(request: Request, auth_code: str = Cookie(None), address: str = Form(None)): if auth_code is None: return Constraints.templates.TemplateResponse('/errors/index.html', {'request': request, 'error': 'not logged in', 'url': '/login'}) if address is None: return Constraints.templates.TemplateResponse('/errors/index.html', {'request': request, 'error': 'invalid address', 'url': '/dashboard'}) if len(address) != 97: return Constraints.templates.TemplateResponse('/errors/index.html', {'request': request, 'error': 'invalid address length', 'url': '/dashboard'}) url = "https://login.wownero.com/auth/realms/master/protocol/openid-connect/userinfo" response = requests.post(url, headers={"Authorization": f"Bearer {auth_code}"}) user_name = response.json().get('preferred_username', None) if not Database.Users.get_address(user_name): new_user = Database.Users(username=user_name, address=address) Database.sqla.session.add(new_user) Database.sqla.session.commit() return RedirectResponse('/dashboard', status_code=303) update_address = Database.Users.query.filter_by(username=user_name).first() update_address.address = address Database.sqla.session.commit() return RedirectResponse('/dashboard', status_code=303)