File size: 4,011 Bytes
f6412a2 7846ae2 f6412a2 7846ae2 f6412a2 7846ae2 f6412a2 7846ae2 f6412a2 7846ae2 f6412a2 7846ae2 f6412a2 7846ae2 f6412a2 7846ae2 f6412a2 7846ae2 f6412a2 7846ae2 f6412a2 7846ae2 f6412a2 7846ae2 f6412a2 7846ae2 f6412a2 7846ae2 f6412a2 7846ae2 f6412a2 7846ae2 f6412a2 7846ae2 f6412a2 7846ae2 f6412a2 7846ae2 f6412a2 7846ae2 f6412a2 7846ae2 f6412a2 7846ae2 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
import os
from azure.cosmos import CosmosClient, exceptions
from azure.cosmos.exceptions import CosmosHttpResponseError
import bcrypt
import base64
from ..database.sql_db import (
get_user,
get_student_user,
get_admin_user,
get_teacher_user,
create_student_user,
update_student_user,
delete_student_user
)
import logging
logger = logging.getLogger(__name__)
# ... (c贸digo de inicializaci贸n)
def clean_and_validate_key(key):
key = key.strip()
while len(key) % 4 != 0:
key += '='
try:
base64.b64decode(key)
return key
except:
raise ValueError("La clave proporcionada no es v谩lida")
# Verificar las variables de entorno
endpoint = os.getenv("COSMOS_ENDPOINT")
key = os.getenv("COSMOS_KEY")
if not endpoint or not key:
raise ValueError("Las variables de entorno COSMOS_ENDPOINT y COSMOS_KEY deben estar configuradas")
key = clean_and_validate_key(key)
####################################################
def authenticate_user(username, password):
try:
user_item = get_user(username)
if user_item and verify_password(user_item['password'], password):
logger.info(f"Usuario autenticado: {username}, Rol: {user_item['role']}")
return True, user_item['role']
logger.warning(f"Autenticaci贸n fallida para el usuario: {username}")
return False, None
except Exception as e:
logger.error(f"Error durante la autenticaci贸n del usuario: {str(e)}")
return False, None
def authenticate_admin(username, password):
return authenticate_user(username, password)
def authenticate_student(username, password):
return authenticate_user(username, password)
def authenticate_teacher(username, password):
return authenticate_user(username, password)
############################
def register_student(username, password, additional_info=None):
try:
if get_student_user(username):
logger.warning(f"Intento de registro de estudiante existente: {username}")
return False # El estudiante ya existe
success = create_student_user(username, password, additional_info)
if success:
logger.info(f"Nuevo estudiante registrado: {username}")
return True
else:
logger.error(f"Error al registrar nuevo estudiante: {username}")
return False
except Exception as e:
logger.error(f"Error al registrar estudiante: {str(e)}")
return False
def update_student_info(username, new_info):
try:
success = update_student_user(username, new_info)
if success:
logger.info(f"Informaci贸n del estudiante actualizada: {username}")
return True
else:
logger.error(f"Error al actualizar informaci贸n del estudiante: {username}")
return False
except Exception as e:
logger.error(f"Error al actualizar informaci贸n del estudiante: {str(e)}")
return False
def delete_student(username):
try:
success = delete_student_user(username)
if success:
logger.info(f"Estudiante eliminado: {username}")
return True
else:
logger.error(f"Error al eliminar estudiante: {username}")
return False
except Exception as e:
logger.error(f"Error al eliminar estudiante: {str(e)}")
return False
# ... (funciones de hash y verificaci贸n de contrase帽a)
def hash_password(password):
"""Hash a password for storing."""
return bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt()).decode('utf-8')
##################################################################################33
def verify_password(stored_password, provided_password):
"""Verify a stored password against one provided by user"""
return bcrypt.checkpw(provided_password.encode('utf-8'), stored_password.encode('utf-8'))
############################################################################# |