This commit is contained in:
50
src/apps/esia/v1/router.py
Normal file
50
src/apps/esia/v1/router.py
Normal file
@ -0,0 +1,50 @@
|
||||
import secrets
|
||||
from logging import getLogger
|
||||
|
||||
from fastapi import APIRouter
|
||||
|
||||
from apps.esia.sign import get_url
|
||||
from clients import clients as c
|
||||
from shared import exceptions as e
|
||||
from shared.redis import client as cache
|
||||
|
||||
from . import schema as s
|
||||
|
||||
logger = getLogger(__name__)
|
||||
router = APIRouter(
|
||||
prefix='/esia',
|
||||
tags=[
|
||||
'ESIA',
|
||||
],
|
||||
)
|
||||
|
||||
|
||||
@router.get('/login', response_model=s.LoginURL)
|
||||
async def login():
|
||||
url = get_url()
|
||||
return s.LoginURL(url=url)
|
||||
|
||||
|
||||
@router.post('/callback')
|
||||
async def callback(code: str):
|
||||
token = None
|
||||
for i in range(3):
|
||||
try:
|
||||
token = await c.esia_api.access_token(code)
|
||||
break
|
||||
except Exception:
|
||||
logger.warning(
|
||||
'Error occurred while accessing ESI API. Retrying...'
|
||||
)
|
||||
if i == 2:
|
||||
raise
|
||||
|
||||
if token is None:
|
||||
raise e.BadRequestException
|
||||
|
||||
await c.esia_api.get_user_info(token.access_token, token.id_token)
|
||||
|
||||
access_token = secrets.token_urlsafe(32)
|
||||
cache.set(access_token, access_token)
|
||||
|
||||
return s.Token(access_token=access_token)
|
||||
Reference in New Issue
Block a user