Files
export-sereia-guardia-fastapi/service/auth_service.py
2025-01-25 15:58:24 -03:00

73 lines
2.1 KiB
Python

import logging as log
from typing import Type
import requests
from sqlalchemy.orm import Session
from sqlalchemy import select, desc
import constants
from db.helpers import get_engine
from db.models import ApiToken
from constants import *
def generate_token(persist=False):
body = {
"consumer_key": api_consumer_key,
"consumer_secret": api_consumer_secret,
"code": api_code
}
response = requests.post(f"{constants.api_url}/auth", json=body)
if response.status_code in [201, 200]:
log.info('Generated tray access token: %s', response.json())
if persist:
log.info('Persisting token')
persist_auth_token(response.json())
return response
def refresh_access_token():
generate_token(persist=True)
token = get_last_api_token()
log.info('Refreshing token')
response = requests.get(f"{api_url}/auth?refresh_token={token.refresh_token}").json()
try:
persist_auth_token(response)
return response['access_token']
except Exception as e:
log.error(e)
return None
def persist_auth_token(api_token):
with Session(get_engine()) as session:
token = ApiToken(message=api_token["message"],
code=api_token["code"],
access_token=api_token["access_token"],
refresh_token=api_token["refresh_token"],
date_expiration_access_token=api_token["date_expiration_access_token"],
date_expiration_refresh_token=api_token["date_expiration_refresh_token"],
date_activated=api_token["date_activated"],
api_host=api_token["api_host"],
store_id=api_token["store_id"])
session.add(token)
session.commit()
def delete_token(token):
with Session(get_engine()) as session:
log.info('Deleting token %s', token.id)
session.delete(token)
session.commit()
def get_last_api_token() -> Type[ApiToken] | None:
with Session(get_engine()) as session:
return session.query(ApiToken).order_by(desc(ApiToken.id)).first()