Skip to main content

Request Facade

Esta librería es una fachada de la librería requests que añade una abstracción de la autenticación JWT mediante configuración en el archivo properties.ini

Propiedades

Debido a la naturaleza de la librería y que deberemos de indicar en texto claro user y password, posee una forma de encriptar dicho contenido mediante una variable de entorno FERNET_KEY de la cual se extraerá una llave necesaria para desencriptar usuario y password que están en el properties.ini y asi no vulnerar ningún principio de seguridad.

Existen dos grupos de propiedades:
ENDPOINT_CONFIG: Relacionado con la configuración que se encarga de saber donde encontrar el endpoint del API a consultar para obtener la autenticación. AUTH: Relaciona con el formato y datos que se le enviaran al endpoint de la autenticación.

base_url_api

Es el nombre o ip del host junto con su puerto de donde está localizada el API de autenticación como por ejemplo http://127.0.0.1:5000

base_endpoint_api

Parte del endpoint que es fijo normalmente usado para marcar la versión del API y mantener una retrocompatibilidad en el largo plazo.

Ejemplo: /v1/api que unido a la propiedad anterior tendriamos algo como http://127.0.0.1:5000/v1/api y a partir de esta ruta se podria acceder a la version 1 de dicha api evitando asi que modificaciones futuras afecten a cosas antiguas.

endpoint_auth

Part del endpoint en concreto que se usa para la autenticacion como por ejemplo /auth o /login que mezclado con las propiedades anteriores quedari asi http://127.0.0.1:5000/v1/api/auth

base_url_api

No se deberia de tocar es un punto de union de las tres propiedades anteriores para realizar llamadas mas simples en el código.

AUTH

Normalmente cuando enviamos los datos para la petición de auth el cuerpo de la peticion suele tener un aspecto similar a {"username": "xxxxx", "password": "xxxxx"} pero otras veces es de este modo {"email": "xxxxx", "pass": "xxxxx"} para controlar todas estas variantes se a dado la opcion de iniciar el nombre de las keys de los json que se envian hacia el API de autenticación de este modo adaptarse a varios casos.

user_key

Key del parametro usado para el usuario.

Ejemplo:
{"{user_key}": "xxxxx", "password": "xxxxx"}

user_value

Valor del parametro usado para el usuario.

Ejemplo:
{"username": "{user_value}", "password": "xxxxx"}

password_key

Key del parametro usado para el password.

Ejemplo:
{"username": "xxxxx", "{password_key}": "xxxxx"}

password_value

Valor del parametro usado para el password.

Ejemplo:
{"username": "xxxxx", "password": "{password_value}"}

Configurando propiedades

Añadir que aparte de esta configuración existe una variable de entorno en el sistema llamada FERNET_KEY, dicha llave se puede generar de cualquier forma que sea valida para la libreria de cryptography==37.0.2 en particular para la clase Fernet del paquete from import Fernet.

Se recomienda usar esto para generar llaves validad:

from generic_utils import CleanDevGenericUtils

utils: CleanDevGenericUtils = CleanDevGenericUtils

if __name__ == '__main__':
    print(utils.get_fernet_key())

mrvhq-I67IuR_vFh3L_bG-9DqVO7WOo84vxnjQdD_qg=

Una vez tengamos dicha llave la importamos al sistema export FERNET_KEY=mrvhq-I67IuR_vFh3L_bG-9DqVO7WOo84vxnjQdD_qg=

A continuación, encriptamos el usuario y la password para la autenticacion de la siguiente forma:

from generic_utils import CleanDevGenericUtils
from requests_facade.config import FERNET_KEY

utils: CleanDevGenericUtils = CleanDevGenericUtils

if __name__ == '__main__':
    username = 'admin'
    password = '123456789'

    print(utils.encrypt(username, FERNET_KEY))
    print(utils.encrypt(password, FERNET_KEY))

gAAAAABilNDxJbYFfPDVPi64C0wA5jOsdu6O83WVNx3-Vg2BOUJ5W8EI-AKoOfindZJJN58SOxq2klRLfqTGy6failyB_GtAAg==
gAAAAABilNDxyv1pb55y8LpETyu5fBQ0AegC9z1uV8uMKIRKyZXljMVHtbJK3e4DgZvyUlI2abfqKJ9ndiV9b6cUkXAtBUZomg==

y estos son los valores que deberemos de poner en el properties.ini respectivamente.

Ejemplo de uso

Una vez configurado todas las configuraciones hacemos lo siguiente

[ENDPOINT_CONFIG]
base_url_api=http://127.0.0.1:5000
base_endpoint_api=
endpoint_auth=/auth
url_api=%(base_url_api)s%(base_endpoint_api)s
[AUTH]
user_key=email
user_value=gAAAAABikQpzO4MnZd-u5Hg2i3-kdS1FkWVPr3s5xwDxsaS-1zaOj7S_XcTOV4f4qIIzW1liJaqOc_hewjRk1Udj6DS4Vj8vrNisZBZYsI-6Nmf7RdIqn9s=
password_key=password
password_value=gAAAAABikQpzpoABdCzse9Nop6dnDfcSWsKdQiufY8Q-mMsmF2Xfu_mXMM4CI-cevurPZrB7ngjD8kuCFycV78mO2zCqADZ68A==
from requests_facade import RequestFacade
from requests import Response

if __name__ == '__main__':
    req_facade: RequestFacade = RequestFacade(need_auth=True)
    resp: Response = req_facade.get(url='http://127.0.0.1:5000/test/jwt')
    resp: Response = req_facade.get(url='http://127.0.0.1:5000/test')

El endpoint http://127.0.0.1:5000/test/jwt esta securizado mientras que http://127.0.0.1:5000/test no lo esta como se observa en el ejemplo no tenemos que preocuparnos de añadir el Bearer en las cabeceras ya que lo hace automaticamente.

Unicamente resta con usar el metodo req_facade.get() o req_facade.post() para realizar peticiones al API.

Metadata

Release files for cleandev-requests-facade 0.1.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for cleandev-requests-facade 0.1.5
File Size Uploaded Provenance Actions
cleandev-requests-facade-0.1.5.tar.gz 4.6 kB Without provenance Details for cleandev-requests-facade-0.1.5.tar.gz

Release files / cleandev-requests-facade-0.1.5.tar.gz

Download URL cleandev-requests-facade-0.1.5.tar.gz
Size 4.6 kB
Tags Source
SHA-256 checksum
How to use checksums
a5a5aea4cf75fea31db33ec099db74256da4d5b64c16d4abe64aaec79ac09775
BLAKE2b-256 checksum
How to use checksums
a4673f2949f2061e0432fc0c86c264d059bb53e38acf8831893f263f9a75c4b0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.0 CPython/3.9.10

Security for cleandev-requests-facade 0.1.5

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.5 This release

1 release file No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page