Ananthakr1shnan commited on
Commit
94f10f5
Β·
verified Β·
1 Parent(s): 04daea4

Update main.py

Browse files
Files changed (1) hide show
  1. main.py +65 -15
main.py CHANGED
@@ -252,7 +252,7 @@ async def register(request: RegisterRequest):
252
  @app.post("/api/auth/login")
253
  async def login(request: LoginRequest):
254
  """
255
- Enhanced login endpoint with better error handling and debugging
256
  """
257
  try:
258
  print(f"πŸ” Login attempt for username: {request.username}")
@@ -262,6 +262,10 @@ async def login(request: LoginRequest):
262
  print("❌ Missing username or password")
263
  raise HTTPException(status_code=400, detail="Username and password are required")
264
 
 
 
 
 
265
  # Ensure admin user exists (critical for first-time setup)
266
  admin_result = auth_manager.create_default_admin()
267
  print(f"πŸ‘€ Admin user status: {admin_result.get('message', 'Ready')}")
@@ -271,24 +275,50 @@ async def login(request: LoginRequest):
271
  print(f"πŸ“Š Available users: {list(users.keys())}")
272
 
273
  # Authenticate user
274
- result = auth_manager.authenticate_user(request.username, request.password)
275
 
276
  if result["success"]:
277
- print(f"βœ… Login successful for: {request.username}")
278
- return {
 
 
279
  "success": True,
280
  "token": result["token"],
281
  "user_id": result["user_id"],
282
- "username": result["username"]
 
283
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
284
  else:
285
- print(f"❌ Login failed for: {request.username} - {result.get('error')}")
286
- raise HTTPException(status_code=401, detail=result["error"])
 
 
 
287
 
288
  except HTTPException:
289
  raise
290
  except Exception as e:
291
  print(f"πŸ’₯ Login endpoint error: {e}")
 
 
292
  raise HTTPException(status_code=500, detail="Internal server error")
293
 
294
  @app.get("/api/auth/debug")
@@ -323,14 +353,34 @@ async def login_page(request: Request):
323
 
324
  @app.post("/api/auth/logout")
325
  async def logout(request: Request):
326
- # Get current user to invalidate their session
327
- user = await get_current_user_web(request)
328
- if user:
329
- auth_manager.logout_user(user['user_id'])
330
-
331
- response = JSONResponse({"success": True, "message": "Logged out successfully"})
332
- response.delete_cookie("authToken", path="/")
333
- return response
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
334
 
335
  # Web interface routes (protected)
336
  @app.get("/", response_class=HTMLResponse)
 
252
  @app.post("/api/auth/login")
253
  async def login(request: LoginRequest):
254
  """
255
+ Enhanced login endpoint with cookie setting and proper redirection
256
  """
257
  try:
258
  print(f"πŸ” Login attempt for username: {request.username}")
 
262
  print("❌ Missing username or password")
263
  raise HTTPException(status_code=400, detail="Username and password are required")
264
 
265
+ # Strip whitespace
266
+ username = request.username.strip()
267
+ password = request.password
268
+
269
  # Ensure admin user exists (critical for first-time setup)
270
  admin_result = auth_manager.create_default_admin()
271
  print(f"πŸ‘€ Admin user status: {admin_result.get('message', 'Ready')}")
 
275
  print(f"πŸ“Š Available users: {list(users.keys())}")
276
 
277
  # Authenticate user
278
+ result = auth_manager.authenticate_user(username, password)
279
 
280
  if result["success"]:
281
+ print(f"βœ… Login successful for: {username}")
282
+
283
+ # Create response data
284
+ response_data = {
285
  "success": True,
286
  "token": result["token"],
287
  "user_id": result["user_id"],
288
+ "username": result["username"],
289
+ "redirect_url": "/"
290
  }
291
+
292
+ # Create JSON response
293
+ response = JSONResponse(content=response_data)
294
+
295
+ # Set authentication cookie with proper settings for Hugging Face Spaces
296
+ response.set_cookie(
297
+ key="authToken",
298
+ value=result["token"],
299
+ httponly=True, # Prevent XSS attacks
300
+ secure=True, # HTTPS only (Hugging Face Spaces uses HTTPS)
301
+ samesite="lax", # CSRF protection while allowing normal navigation
302
+ max_age=24*60*60, # 24 hours
303
+ path="/"
304
+ )
305
+
306
+ print(f"πŸͺ Cookie set for user: {username}")
307
+ return response
308
+
309
  else:
310
+ print(f"❌ Login failed for: {username} - {result.get('error')}")
311
+ raise HTTPException(
312
+ status_code=401,
313
+ detail=result.get("error", "Invalid username or password")
314
+ )
315
 
316
  except HTTPException:
317
  raise
318
  except Exception as e:
319
  print(f"πŸ’₯ Login endpoint error: {e}")
320
+ import traceback
321
+ traceback.print_exc()
322
  raise HTTPException(status_code=500, detail="Internal server error")
323
 
324
  @app.get("/api/auth/debug")
 
353
 
354
  @app.post("/api/auth/logout")
355
  async def logout(request: Request):
356
+ """Enhanced logout with proper cookie clearing"""
357
+ try:
358
+ # Get current user to invalidate their session
359
+ user = await get_current_user_web(request)
360
+ if user:
361
+ auth_manager.logout_user(user['user_id'])
362
+ print(f"πŸ”“ User logged out: {user.get('username', 'Unknown')}")
363
+
364
+ response_data = {"success": True, "message": "Logged out successfully"}
365
+ response = JSONResponse(content=response_data)
366
+
367
+ # Clear the authentication cookie
368
+ response.delete_cookie(
369
+ key="authToken",
370
+ path="/",
371
+ domain=None,
372
+ secure=True,
373
+ samesite="lax"
374
+ )
375
+
376
+ return response
377
+
378
+ except Exception as e:
379
+ print(f"❌ Logout error: {e}")
380
+ # Still return success and clear cookie even if there's an error
381
+ response = JSONResponse(content={"success": True, "message": "Logged out"})
382
+ response.delete_cookie("authToken", path="/")
383
+ return response
384
 
385
  # Web interface routes (protected)
386
  @app.get("/", response_class=HTMLResponse)