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