ChandimaPrabath commited on
Commit
f59a9a4
·
verified ·
1 Parent(s): 0903287

session token test

Browse files
Files changed (1) hide show
  1. relay.py +31 -9
relay.py CHANGED
@@ -26,10 +26,14 @@ active_connections = {}
26
  # Dictionary to store undelivered messages
27
  message_store = {}
28
 
29
- async def register_client(websocket: WebSocket, username: str):
30
- """Register a new client."""
 
 
 
31
  active_connections[username] = websocket
32
- print(f"DEBUG: {username} connected.")
 
33
 
34
  # Deliver undelivered messages if any
35
  if username in message_store:
@@ -40,15 +44,17 @@ async def register_client(websocket: WebSocket, username: str):
40
  print(f"DEBUG: Cleared stored messages for {username}")
41
 
42
  async def unregister_client(username: str):
43
- """Unregister a client."""
44
  if username in active_connections:
45
  del active_connections[username]
 
46
  print(f"DEBUG: {username} disconnected.")
47
 
48
  @app.websocket("/ws")
49
  async def relay_server(websocket: WebSocket):
50
  """Relay server handling WebSocket connections."""
51
  username = None
 
52
  try:
53
  await websocket.accept()
54
  print("DEBUG: WebSocket connection accepted.")
@@ -69,9 +75,17 @@ async def relay_server(websocket: WebSocket):
69
  if response.status_code == 200:
70
  print(f"DEBUG: Registration successful for {username}")
71
  await websocket.send_text(json.dumps({"status": "success", "message": "Registration successful"}))
72
- # Register the client after successful signup
73
- await register_client(websocket, username)
74
- return # Exit the websocket function after successful signup
 
 
 
 
 
 
 
 
75
  else:
76
  error_message = response.json().get("detail", "Registration failed")
77
  print(f"DEBUG: Registration failed for {username}: {error_message}")
@@ -85,8 +99,9 @@ async def relay_server(websocket: WebSocket):
85
  response = await client.post(f"{SERVICES_URL}/login", json={"username": username, "password": password})
86
  if response.status_code == 200:
87
  print(f"DEBUG: Authentication successful for {username}")
88
- await websocket.send_text(json.dumps({"status": "success", "message": "Authenticated"}))
89
- await register_client(websocket, username)
 
90
  else:
91
  error_message = response.json().get("detail", "Invalid credentials")
92
  print(f"DEBUG: Authentication failed for {username}: {error_message}")
@@ -106,6 +121,13 @@ async def relay_server(websocket: WebSocket):
106
  msg_content = msg_data.get("message")
107
  timestamp = datetime.now().isoformat()
108
 
 
 
 
 
 
 
 
109
  # Create message object
110
  message_obj = {
111
  "from": username,
 
26
  # Dictionary to store undelivered messages
27
  message_store = {}
28
 
29
+ # Store session tokens (for simplicity, in-memory storage)
30
+ session_tokens = {}
31
+
32
+ async def register_client(websocket: WebSocket, username: str, token: str):
33
+ """Register a new client with a session token."""
34
  active_connections[username] = websocket
35
+ session_tokens[username] = token # Store the session token
36
+ print(f"DEBUG: {username} connected with token.")
37
 
38
  # Deliver undelivered messages if any
39
  if username in message_store:
 
44
  print(f"DEBUG: Cleared stored messages for {username}")
45
 
46
  async def unregister_client(username: str):
47
+ """Unregister a client and delete their session token."""
48
  if username in active_connections:
49
  del active_connections[username]
50
+ del session_tokens[username] # Delete session token on disconnect
51
  print(f"DEBUG: {username} disconnected.")
52
 
53
  @app.websocket("/ws")
54
  async def relay_server(websocket: WebSocket):
55
  """Relay server handling WebSocket connections."""
56
  username = None
57
+ token = None
58
  try:
59
  await websocket.accept()
60
  print("DEBUG: WebSocket connection accepted.")
 
75
  if response.status_code == 200:
76
  print(f"DEBUG: Registration successful for {username}")
77
  await websocket.send_text(json.dumps({"status": "success", "message": "Registration successful"}))
78
+
79
+ # Create session token upon registration
80
+ token_response = await client.post(f"{SERVICES_URL}/login", json={"username": username, "password": password})
81
+ if token_response.status_code == 200:
82
+ token = token_response.json().get("token")
83
+ await websocket.send_text(json.dumps({"status": "success", "token": token}))
84
+ # Register the client after successful signup and token retrieval
85
+ await register_client(websocket, username, token)
86
+ return
87
+ else:
88
+ await websocket.send_text(json.dumps({"status": "error", "message": "Token retrieval failed"}))
89
  else:
90
  error_message = response.json().get("detail", "Registration failed")
91
  print(f"DEBUG: Registration failed for {username}: {error_message}")
 
99
  response = await client.post(f"{SERVICES_URL}/login", json={"username": username, "password": password})
100
  if response.status_code == 200:
101
  print(f"DEBUG: Authentication successful for {username}")
102
+ token = response.json().get("token")
103
+ await websocket.send_text(json.dumps({"status": "success", "message": "Authenticated", "token": token}))
104
+ await register_client(websocket, username, token)
105
  else:
106
  error_message = response.json().get("detail", "Invalid credentials")
107
  print(f"DEBUG: Authentication failed for {username}: {error_message}")
 
121
  msg_content = msg_data.get("message")
122
  timestamp = datetime.now().isoformat()
123
 
124
+ # Check session token for message validation
125
+ if recipient in session_tokens:
126
+ received_token = msg_data.get("token")
127
+ if received_token != session_tokens[recipient]:
128
+ await websocket.send_text(json.dumps({"status": "error", "message": "Invalid session token"}))
129
+ continue
130
+
131
  # Create message object
132
  message_obj = {
133
  "from": username,