From 57592562f488008e2eddec7b5af852cc19c3525f Mon Sep 17 00:00:00 2001 From: ValueOn AG Date: Fri, 16 May 2025 16:17:28 +0200 Subject: [PATCH] fix auth2 --- env_prod.env | 2 +- routes/routeUsers.py | 74 ++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 73 insertions(+), 3 deletions(-) diff --git a/env_prod.env b/env_prod.env index 47133cd6..072fcf75 100644 --- a/env_prod.env +++ b/env_prod.env @@ -25,7 +25,7 @@ APP_TOKEN_EXPIRY=300 APP_ALLOWED_ORIGINS=http://localhost:8080,https://playground.poweron-center.net,http://localhost:5176,https://nyla.poweron-center.net # Logging configuration -APP_LOGGING_LOG_LEVEL = WARNING +APP_LOGGING_LOG_LEVEL = INFO APP_LOGGING_LOG_FILE = /home/poweron.log APP_LOGGING_FORMAT = %(asctime)s - %(levelname)s - %(name)s - %(message)s APP_LOGGING_DATE_FORMAT = %Y-%m-%d %H:%M:%S diff --git a/routes/routeUsers.py b/routes/routeUsers.py index 0b8e4930..d73c52af 100644 --- a/routes/routeUsers.py +++ b/routes/routeUsers.py @@ -80,7 +80,10 @@ async def registerUser(userData: dict = Body(...)): rootMandateId = adminGateway.getInitialId("mandates") adminUserId = adminGateway.getInitialId("users") + logger.info(f"Root mandate ID: {rootMandateId}, Admin user ID: {adminUserId}") + if not rootMandateId or not adminUserId: + logger.error("System initialization error: Missing root mandate or admin user") raise HTTPException( status_code=500, detail="System is not properly initialized with root mandate and admin user" @@ -90,6 +93,7 @@ async def registerUser(userData: dict = Body(...)): gateway = getGatewayInterface(rootMandateId, adminUserId) if "username" not in userData or "password" not in userData: + logger.error("Missing required fields in registration data") raise HTTPException(status_code=400, detail="Username and password required") try: @@ -110,19 +114,82 @@ async def registerUser(userData: dict = Body(...)): if "fullName" in userData and userData["fullName"]: userCreateData["fullName"] = userData["fullName"] + logger.info(f"Attempting to create user with data: {userCreateData}") + + # First check if user already exists + existingUser = gateway.getUserByUsername(userData["username"]) + if existingUser: + logger.error(f"User {userData['username']} already exists") + raise HTTPException( + status_code=400, + detail=f"User {userData['username']} already exists" + ) + + # Create the user newUser = gateway.createUser(**userCreateData) + logger.info(f"User created successfully: {newUser}") + + # Wait a short moment to ensure database consistency + import time + time.sleep(0.5) # Verify that the password was properly stored createdUser = gateway.getUserByUsername(userData["username"]) - if not createdUser or "hashedPassword" not in createdUser: + logger.info(f"Retrieved created user: {createdUser}") + + if not createdUser: + logger.error("User creation verification failed: User not found after creation") + raise HTTPException( + status_code=500, + detail="Failed to verify user creation. Please try again." + ) + + if "hashedPassword" not in createdUser: + logger.error("User creation verification failed: Password not stored") # If password wasn't stored, delete the user and raise an error if createdUser: - gateway.deleteUser(createdUser["id"]) + logger.info(f"Attempting to delete user {createdUser['id']} due to missing password") + try: + gateway.deleteUser(createdUser["id"]) + logger.info(f"Successfully deleted user {createdUser['id']} after password storage failure") + except Exception as deleteError: + logger.error(f"Failed to delete user after password storage failure: {str(deleteError)}") raise HTTPException( status_code=500, detail="Failed to store password securely. Please try again." ) + # Final verification - try to authenticate the user + try: + authResult = gateway.authenticateUser(userData["username"], userData["password"]) + if not authResult: + logger.error("Final verification failed: Could not authenticate newly created user") + # Delete the user if authentication fails + if createdUser: + try: + gateway.deleteUser(createdUser["id"]) + logger.info(f"Successfully deleted user {createdUser['id']} after authentication failure") + except Exception as deleteError: + logger.error(f"Failed to delete user after authentication failure: {str(deleteError)}") + raise HTTPException( + status_code=500, + detail="Failed to verify user authentication. Please try again." + ) + except Exception as authError: + logger.error(f"Authentication verification failed: {str(authError)}") + # Delete the user if authentication fails + if createdUser: + try: + gateway.deleteUser(createdUser["id"]) + logger.info(f"Successfully deleted user {createdUser['id']} after authentication error") + except Exception as deleteError: + logger.error(f"Failed to delete user after authentication error: {str(deleteError)}") + raise HTTPException( + status_code=500, + detail="Failed to verify user authentication. Please try again." + ) + + logger.info("User registration completed successfully") return newUser except ValueError as e: logger.error(f"ValueError in registration: {str(e)}") @@ -133,7 +200,10 @@ async def registerUser(userData: dict = Body(...)): except Exception as e: import traceback logger.error(f"Unexpected error in registration: {str(e)}") + logger.error("Full traceback:") logger.error(traceback.format_exc()) + logger.error(f"Error type: {type(e).__name__}") + logger.error(f"Error args: {e.args}") raise HTTPException(status_code=500, detail=f"Registration failed: {str(e)}") @router.post("/register-with-msal", response_model=Dict[str, Any])