Патч
This commit is contained in:
@ -2,9 +2,12 @@ import secrets
|
||||
from logging import getLogger
|
||||
|
||||
from fastapi import APIRouter
|
||||
from sqlmodel import select
|
||||
|
||||
from apps.esia.sign import get_url
|
||||
from apps.users.models import User
|
||||
from clients import clients as c
|
||||
from database import AsyncSessionDep
|
||||
from shared import exceptions as e
|
||||
from shared.redis import client as cache
|
||||
|
||||
@ -26,7 +29,7 @@ async def login():
|
||||
|
||||
|
||||
@router.post('/callback')
|
||||
async def callback(code: str):
|
||||
async def callback(session: AsyncSessionDep, code: str):
|
||||
token = None
|
||||
for i in range(3):
|
||||
try:
|
||||
@ -42,9 +45,34 @@ async def callback(code: str):
|
||||
if token is None:
|
||||
raise e.BadRequestException
|
||||
|
||||
await c.esia_api.get_user_info(token.access_token, token.id_token)
|
||||
esia_user = await c.esia_api.get_user_info(
|
||||
token.access_token, token.id_token
|
||||
)
|
||||
|
||||
vita_user = await c.vitacore_api.findBySnils(esia_user.snils)
|
||||
|
||||
if len(vita_user.patients) == 0:
|
||||
raise e.BadRequestException(detail='Patient not found')
|
||||
|
||||
vita_user = vita_user.patients[0]
|
||||
|
||||
existing_user_stmt = (
|
||||
select(User).where(User.vita_id == vita_user.id).limit(1)
|
||||
)
|
||||
existing_user = (
|
||||
await session.execute(existing_user_stmt)
|
||||
).scalar_one_or_none()
|
||||
|
||||
if existing_user is None:
|
||||
user = User(vita_id=vita_user.id)
|
||||
session.add(user)
|
||||
await session.commit()
|
||||
await session.refresh(user)
|
||||
|
||||
else:
|
||||
user = existing_user
|
||||
|
||||
access_token = secrets.token_urlsafe(32)
|
||||
cache.set(access_token, access_token)
|
||||
cache.set(access_token, f'user:{user.id}')
|
||||
|
||||
return s.Token(access_token=access_token)
|
||||
|
||||
Reference in New Issue
Block a user