You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
YellWOWPages/routers/dashboard.py

64 lines
3.3 KiB

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)