AIdeaText commited on
Commit
903a8ea
verified
1 Parent(s): 830e314

Update modules/auth/auth.py

Browse files
Files changed (1) hide show
  1. modules/auth/auth.py +30 -7
modules/auth/auth.py CHANGED
@@ -23,6 +23,7 @@ from datetime import datetime, timezone
23
 
24
  logger = logging.getLogger(__name__)
25
 
 
26
  def clean_and_validate_key(key):
27
  """Limpia y valida la clave de CosmosDB"""
28
  key = key.strip()
@@ -43,7 +44,7 @@ if not endpoint or not key:
43
 
44
  key = clean_and_validate_key(key)
45
 
46
-
47
  def authenticate_user(username, password):
48
  """Autentica un usuario y registra el inicio de sesi贸n"""
49
  try:
@@ -77,6 +78,7 @@ def authenticate_user(username, password):
77
  logger.error(f"Error durante la autenticaci贸n del usuario: {str(e)}")
78
  return False, None
79
 
 
80
  def authenticate_student(username, password):
81
  """Autentica un estudiante"""
82
  success, role = authenticate_user(username, password)
@@ -84,6 +86,7 @@ def authenticate_student(username, password):
84
  return True, role
85
  return False, None
86
 
 
87
  def authenticate_admin(username, password):
88
  """Autentica un administrador"""
89
  success, role = authenticate_user(username, password)
@@ -91,6 +94,7 @@ def authenticate_admin(username, password):
91
  return True, role
92
  return False, None
93
 
 
94
  def register_student(username, password, additional_info=None):
95
  """Registra un nuevo estudiante"""
96
  try:
@@ -98,6 +102,7 @@ def register_student(username, password, additional_info=None):
98
  logger.warning(f"Estudiante ya existe: {username}")
99
  return False
100
 
 
101
  hashed_password = hash_password(password)
102
 
103
  # Asegurarse que additional_info tenga el rol correcto
@@ -105,6 +110,7 @@ def register_student(username, password, additional_info=None):
105
  additional_info = {}
106
  additional_info['role'] = 'Estudiante'
107
 
 
108
  success = create_student_user(username, hashed_password, additional_info)
109
  if success:
110
  logger.info(f"Nuevo estudiante registrado: {username}")
@@ -117,6 +123,8 @@ def register_student(username, password, additional_info=None):
117
  logger.error(f"Error al registrar estudiante: {str(e)}")
118
  return False
119
 
 
 
120
  def update_student_info(username, new_info):
121
  """Actualiza la informaci贸n de un estudiante"""
122
  try:
@@ -135,6 +143,7 @@ def update_student_info(username, new_info):
135
  logger.error(f"Error en actualizaci贸n: {str(e)}")
136
  return False
137
 
 
138
  def delete_student(username):
139
  """Elimina un estudiante"""
140
  try:
@@ -150,6 +159,7 @@ def delete_student(username):
150
  logger.error(f"Error en eliminaci贸n: {str(e)}")
151
  return False
152
 
 
153
  def logout():
154
  """Cierra la sesi贸n del usuario"""
155
  try:
@@ -171,15 +181,28 @@ def logout():
171
  ########################################################
172
  def hash_password(password):
173
  """Hashea una contrase帽a usando bcrypt"""
174
- # Usar 12 rondas para el salt, que es lo que se ve en el hash proporcionado
175
- return bcrypt.hashpw(
176
- password.encode('utf-8'),
177
- bcrypt.gensalt(rounds=12)
178
- ).decode('utf-8')
 
 
 
 
 
 
 
 
 
 
 
 
 
179
  ########################################################
180
 
181
 
182
-
183
  def verify_password(stored_password, provided_password):
184
  """Verifica una contrase帽a"""
185
  return bcrypt.checkpw(
 
23
 
24
  logger = logging.getLogger(__name__)
25
 
26
+ #####################################################################
27
  def clean_and_validate_key(key):
28
  """Limpia y valida la clave de CosmosDB"""
29
  key = key.strip()
 
44
 
45
  key = clean_and_validate_key(key)
46
 
47
+ #####################################################################
48
  def authenticate_user(username, password):
49
  """Autentica un usuario y registra el inicio de sesi贸n"""
50
  try:
 
78
  logger.error(f"Error durante la autenticaci贸n del usuario: {str(e)}")
79
  return False, None
80
 
81
+ #####################################################################
82
  def authenticate_student(username, password):
83
  """Autentica un estudiante"""
84
  success, role = authenticate_user(username, password)
 
86
  return True, role
87
  return False, None
88
 
89
+ #####################################################################
90
  def authenticate_admin(username, password):
91
  """Autentica un administrador"""
92
  success, role = authenticate_user(username, password)
 
94
  return True, role
95
  return False, None
96
 
97
+ #####################################################################
98
  def register_student(username, password, additional_info=None):
99
  """Registra un nuevo estudiante"""
100
  try:
 
102
  logger.warning(f"Estudiante ya existe: {username}")
103
  return False
104
 
105
+ # Aqu铆 est谩 el problema - debemos hashear la contrase帽a ANTES de pasarla
106
  hashed_password = hash_password(password)
107
 
108
  # Asegurarse que additional_info tenga el rol correcto
 
110
  additional_info = {}
111
  additional_info['role'] = 'Estudiante'
112
 
113
+ # Pasar la contrase帽a hasheada, no la original
114
  success = create_student_user(username, hashed_password, additional_info)
115
  if success:
116
  logger.info(f"Nuevo estudiante registrado: {username}")
 
123
  logger.error(f"Error al registrar estudiante: {str(e)}")
124
  return False
125
 
126
+
127
+ #####################################################################
128
  def update_student_info(username, new_info):
129
  """Actualiza la informaci贸n de un estudiante"""
130
  try:
 
143
  logger.error(f"Error en actualizaci贸n: {str(e)}")
144
  return False
145
 
146
+ #####################################################################
147
  def delete_student(username):
148
  """Elimina un estudiante"""
149
  try:
 
159
  logger.error(f"Error en eliminaci贸n: {str(e)}")
160
  return False
161
 
162
+ #####################################################################
163
  def logout():
164
  """Cierra la sesi贸n del usuario"""
165
  try:
 
181
  ########################################################
182
  def hash_password(password):
183
  """Hashea una contrase帽a usando bcrypt"""
184
+ try:
185
+ # Usar 12 rondas para el salt
186
+ hashed = bcrypt.hashpw(
187
+ password.encode('utf-8'),
188
+ bcrypt.gensalt(rounds=12)
189
+ ).decode('utf-8')
190
+
191
+ # Verificar que el hash tenga el formato correcto
192
+ if not hashed.startswith('$2b$12$'):
193
+ logger.error(f"Hash generado con formato incorrecto: {hashed[:10]}...")
194
+ raise ValueError("Hash generado con formato incorrecto")
195
+
196
+ logger.info(f"Contrase帽a hasheada exitosamente. Hash comienza con: {hashed[:10]}...")
197
+ return hashed
198
+
199
+ except Exception as e:
200
+ logger.error(f"Error hasheando contrase帽a: {str(e)}")
201
+ raise
202
  ########################################################
203
 
204
 
205
+ #####################################################################
206
  def verify_password(stored_password, provided_password):
207
  """Verifica una contrase帽a"""
208
  return bcrypt.checkpw(