AIdeaText commited on
Commit
8c3ba2c
1 Parent(s): 1c6cfb4

Update modules/auth.py

Browse files
Files changed (1) hide show
  1. modules/auth.py +34 -29
modules/auth.py CHANGED
@@ -1,17 +1,37 @@
 
1
  from azure.cosmos import CosmosClient, exceptions
2
  import bcrypt
3
- import os
 
 
 
 
 
 
 
 
 
 
4
 
5
  # Azure Cosmos DB configuration
6
  endpoint = os.environ.get("COSMOS_ENDPOINT")
7
  key = os.environ.get("COSMOS_KEY")
8
- database_name = "user_database"
9
- container_name = "users"
10
 
11
- # Initialize the Cosmos client
12
- client = CosmosClient(endpoint, key)
13
- database = client.get_database_client(database_name)
14
- container = database.get_container_client(container_name)
 
 
 
 
 
 
 
 
 
 
 
15
 
16
  def hash_password(password):
17
  """Hash a password for storing."""
@@ -24,17 +44,12 @@ def verify_password(stored_password, provided_password):
24
  def register_user(username, password, role, additional_info=None):
25
  """Register a new user."""
26
  try:
27
- # Check if user already exists
28
  query = f"SELECT * FROM c WHERE c.id = '{username}'"
29
- existing_user = list(container.query_items(
30
- query=query,
31
- enable_cross_partition_query=True
32
- ))
33
 
34
  if existing_user:
35
  return False # User already exists
36
 
37
- # Create new user document
38
  new_user = {
39
  'id': username,
40
  'password': hash_password(password),
@@ -51,10 +66,7 @@ def authenticate_user(username, password):
51
  """Authenticate a user."""
52
  try:
53
  query = f"SELECT * FROM c WHERE c.id = '{username}'"
54
- results = list(container.query_items(
55
- query=query,
56
- partition_key=username
57
- ))
58
 
59
  if results:
60
  stored_user = results[0]
@@ -62,15 +74,14 @@ def authenticate_user(username, password):
62
  return True
63
  except exceptions.CosmosHttpResponseError:
64
  pass
 
 
65
 
66
  def get_user_role(username):
67
  """Get the role of a user."""
68
  try:
69
  query = f"SELECT c.role FROM c WHERE c.id = '{username}'"
70
- results = list(container.query_items(
71
- query=query,
72
- partition_key=username
73
- ))
74
 
75
  if results:
76
  return results[0]['role']
@@ -83,10 +94,7 @@ def update_user_info(username, new_info):
83
  """Update user information."""
84
  try:
85
  query = f"SELECT * FROM c WHERE c.id = '{username}'"
86
- results = list(container.query_items(
87
- query=query,
88
- partition_key=username
89
- ))
90
 
91
  if results:
92
  user = results[0]
@@ -102,10 +110,7 @@ def delete_user(username):
102
  """Delete a user."""
103
  try:
104
  query = f"SELECT * FROM c WHERE c.id = '{username}'"
105
- results = list(container.query_items(
106
- query=query,
107
- partition_key=username
108
- ))
109
 
110
  if results:
111
  user = results[0]
 
1
+ import os
2
  from azure.cosmos import CosmosClient, exceptions
3
  import bcrypt
4
+ import base64
5
+
6
+ def clean_and_validate_key(key):
7
+ key = key.strip()
8
+ while len(key) % 4 != 0:
9
+ key += '='
10
+ try:
11
+ base64.b64decode(key)
12
+ return key
13
+ except:
14
+ raise ValueError("La clave proporcionada no es válida")
15
 
16
  # Azure Cosmos DB configuration
17
  endpoint = os.environ.get("COSMOS_ENDPOINT")
18
  key = os.environ.get("COSMOS_KEY")
 
 
19
 
20
+ if not endpoint or not key:
21
+ raise ValueError("Las variables de entorno COSMOS_ENDPOINT y COSMOS_KEY deben estar configuradas")
22
+
23
+ key = clean_and_validate_key(key)
24
+
25
+ try:
26
+ client = CosmosClient(endpoint, key)
27
+ database = client.get_database_client("user_database")
28
+ container = database.get_container_client("users")
29
+ # Prueba de conexión
30
+ database_list = list(client.list_databases())
31
+ print(f"Conexión exitosa. Bases de datos encontradas: {len(database_list)}")
32
+ except Exception as e:
33
+ print(f"Error al conectar con Cosmos DB: {str(e)}")
34
+ raise
35
 
36
  def hash_password(password):
37
  """Hash a password for storing."""
 
44
  def register_user(username, password, role, additional_info=None):
45
  """Register a new user."""
46
  try:
 
47
  query = f"SELECT * FROM c WHERE c.id = '{username}'"
48
+ existing_user = list(container.query_items(query=query, enable_cross_partition_query=True))
 
 
 
49
 
50
  if existing_user:
51
  return False # User already exists
52
 
 
53
  new_user = {
54
  'id': username,
55
  'password': hash_password(password),
 
66
  """Authenticate a user."""
67
  try:
68
  query = f"SELECT * FROM c WHERE c.id = '{username}'"
69
+ results = list(container.query_items(query=query, partition_key=username))
 
 
 
70
 
71
  if results:
72
  stored_user = results[0]
 
74
  return True
75
  except exceptions.CosmosHttpResponseError:
76
  pass
77
+
78
+ return False
79
 
80
  def get_user_role(username):
81
  """Get the role of a user."""
82
  try:
83
  query = f"SELECT c.role FROM c WHERE c.id = '{username}'"
84
+ results = list(container.query_items(query=query, partition_key=username))
 
 
 
85
 
86
  if results:
87
  return results[0]['role']
 
94
  """Update user information."""
95
  try:
96
  query = f"SELECT * FROM c WHERE c.id = '{username}'"
97
+ results = list(container.query_items(query=query, partition_key=username))
 
 
 
98
 
99
  if results:
100
  user = results[0]
 
110
  """Delete a user."""
111
  try:
112
  query = f"SELECT * FROM c WHERE c.id = '{username}'"
113
+ results = list(container.query_items(query=query, partition_key=username))
 
 
 
114
 
115
  if results:
116
  user = results[0]