fix
This commit is contained in:
50
http-api/app/konviva.py
Normal file
50
http-api/app/konviva.py
Normal file
@@ -0,0 +1,50 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user