97 lines
2.9 KiB
Python
97 lines
2.9 KiB
Python
from email.message import EmailMessage
|
|
import smtplib
|
|
import os
|
|
import json
|
|
import string
|
|
import secrets
|
|
from flask_bcrypt import Bcrypt
|
|
import shortuuid
|
|
|
|
|
|
bcrypt = Bcrypt()
|
|
|
|
|
|
v = {
|
|
'home': 'home/home.html',
|
|
'about-us': 'about-us/about-us.html',
|
|
'solutions': 'solutions/solutions.html',
|
|
'methodology': 'methodology/methodology.html',
|
|
'contact': 'contact/contact.html',
|
|
'login': 'login/login.html',
|
|
'usr_home': 'usr_home/usr_home.html',
|
|
'recover_pswd': 'login/recover_pswd.html'
|
|
}
|
|
|
|
|
|
def db_conf_obj(dbEnvVarName: str) -> object:
|
|
'''
|
|
dbEnvVarName = nombre de la variable de entorno
|
|
variable que contiene los datos de la base de datos
|
|
'''
|
|
db = os.getenv(dbEnvVarName)
|
|
db = json.loads(db)
|
|
return db
|
|
|
|
def generar_contrasena():
|
|
"""
|
|
Genera una contraseña aleatoria de 25 caracteres.
|
|
|
|
La contraseña se compone de una combinación de letras mayúsculas, letras minúsculas y dígitos. La función utiliza
|
|
el módulo `secrets` para asegurar que la generación de la contraseña sea adecuada para propósitos de seguridad.
|
|
|
|
Returns:
|
|
-------
|
|
str
|
|
Una cadena de caracteres aleatorios de 25 caracteres, formada por letras (mayúsculas y minúsculas) y dígitos.
|
|
|
|
Example:
|
|
--------
|
|
>>> generar_contrasena()
|
|
'A9gTz5bNp0Wk3L6Xq2vUv8YwRz1E'
|
|
"""
|
|
caracteres = string.ascii_letters + string.digits
|
|
contrasena = ''.join(secrets.choice(caracteres) for _ in range(25))
|
|
return contrasena
|
|
|
|
def hash_password(password):
|
|
"""
|
|
Genera un hash de la contraseña utilizando bcrypt.
|
|
|
|
Esta función toma una contraseña en texto plano y la convierte en un hash seguro utilizando el algoritmo bcrypt.
|
|
El hash generado es una cadena en formato UTF-8, adecuada para almacenamiento en bases de datos.
|
|
|
|
Parámetros:
|
|
----------
|
|
password : str
|
|
La contraseña en texto plano que se desea hashear.
|
|
|
|
Returns:
|
|
-------
|
|
str or None
|
|
El hash de la contraseña en formato UTF-8 si la operación es exitosa.
|
|
Devuelve `None` en caso de que ocurra una excepción durante el proceso de hashing.
|
|
|
|
Example:
|
|
--------
|
|
>>> hash_password('mi_contrasena_segura')
|
|
'$2b$12$D4yU/jEaK4xdgK0R2J6c6Odnk8p3k/RtG2ByjF26.4gnBR4tdA/2i'
|
|
"""
|
|
try:
|
|
hashed_password = bcrypt.generate_password_hash(password).decode('utf-8')
|
|
return hashed_password
|
|
except Exception as e:
|
|
return None
|
|
|
|
def getRandomId():
|
|
# POR DEFAULT SHORUUID SACA 22 CARACTERES
|
|
# LOS PODEMOS ACORTAR DE LA SIGUIENTE MANERA: short_id_custom = shortuuid.uuid()[:10]
|
|
# Configurar el generador con una semilla específica (opcional)
|
|
# shortuuid.set_alphabet("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-!#$!%&/()=?¡¿")
|
|
shortuuid.set_alphabet("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")
|
|
# Generar un UUID corto con la semilla personalizada
|
|
short_id_custom = shortuuid.uuid()
|
|
return short_id_custom
|
|
|
|
|
|
|