Files
saladeaula.digital/http-api/app/konviva.py
2025-05-16 14:29:14 -03:00

51 lines
1.2 KiB
Python

from dataclasses import asdict, dataclass
from urllib.parse import quote as urlquote
from urllib.parse import urlencode, urlparse
from aws_lambda_powertools.event_handler.exceptions import BadRequestError
from glom import glom
import requests
from conf import KONVIVA_API_URL, KONVIVA_SECRET_KEY
class KonvivaError(BadRequestError):
pass
@dataclass
class KonvivaToken:
login: str
token: str
nonce: str
def token(username: str) -> KonvivaToken:
url = urlparse(KONVIVA_API_URL)._replace(
path='/action/api/usuarios/token',
query=f'login={urlquote(username)}',
)
headers = {
'Authorization': f'KONVIVA {KONVIVA_SECRET_KEY}',
'Content-Type': 'application/json',
}
r = requests.get(url.geturl(), headers=headers)
r.raise_for_status()
# Because Konviva does not return the proper HTTP status code
if err := glom(r.json(), 'errors.0', default=None):
raise KonvivaError(err)
return KonvivaToken(**r.json())
def redirect_uri(token: KonvivaToken) -> str:
url = urlparse(KONVIVA_API_URL)._replace(
path='/action/acessoExterno',
query=urlencode(asdict(token)),
)
return url.geturl()