From 20b01717cd9ba1c344fcb0761b835f37fed422cd Mon Sep 17 00:00:00 2001 From: ajaysi Date: Sun, 12 Oct 2025 16:03:52 +0530 Subject: [PATCH] Fix: Onboarding Completion Service Update --- .gitignore | 2 ++ backend/alwrity_utils/onboarding_manager.py | 4 +-- .../api_key_management_service.py | 36 ++++++++++++++----- .../onboarding_utils/endpoints_config_data.py | 5 +-- 4 files changed, 34 insertions(+), 13 deletions(-) diff --git a/.gitignore b/.gitignore index 62f171f2..96894b1b 100644 --- a/.gitignore +++ b/.gitignore @@ -81,6 +81,8 @@ backend/research_cache.db gsc_credentials.json **/gsc_credentials.json +.cursor + # Onboarding progress files .onboarding_progress.json backend/.onboarding_progress.json diff --git a/backend/alwrity_utils/onboarding_manager.py b/backend/alwrity_utils/onboarding_manager.py index 2778c44a..63b5aa31 100644 --- a/backend/alwrity_utils/onboarding_manager.py +++ b/backend/alwrity_utils/onboarding_manager.py @@ -156,10 +156,10 @@ class OnboardingManager: raise HTTPException(status_code=500, detail=str(e)) @self.app.get("/api/onboarding/api-keys/onboarding") - async def api_keys_for_onboarding(): + async def api_keys_for_onboarding(current_user: dict = Depends(get_current_user)): """Get all configured API keys for onboarding (unmasked).""" try: - return await get_api_keys_for_onboarding() + return await get_api_keys_for_onboarding(current_user) except Exception as e: logger.error(f"Error in api_keys_for_onboarding: {e}") raise HTTPException(status_code=500, detail=str(e)) diff --git a/backend/api/onboarding_utils/api_key_management_service.py b/backend/api/onboarding_utils/api_key_management_service.py index 44f46111..c543e92e 100644 --- a/backend/api/onboarding_utils/api_key_management_service.py +++ b/backend/api/onboarding_utils/api_key_management_service.py @@ -70,20 +70,38 @@ class APIKeyManagementService: logger.error(f"Error getting API keys: {str(e)}") raise HTTPException(status_code=500, detail="Internal server error") - async def get_api_keys_for_onboarding(self) -> Dict[str, Any]: - """Get all configured API keys for onboarding (unmasked).""" + async def get_api_keys_for_onboarding(self, user_id: str | None = None) -> Dict[str, Any]: + """Get all configured API keys for onboarding (unmasked), user-aware. + + In production, keys are per-user and stored in DB; in local, we use env. + """ try: - self.api_key_manager.load_api_keys() # Load keys from environment - api_keys = self.api_key_manager.api_keys # Get the loaded keys - - # Return actual API keys for onboarding pre-filling - result = { + # Prefer DB per-user keys when user_id is provided and DB is available + if user_id and getattr(self.api_key_manager, 'use_database', False) and getattr(self.api_key_manager, 'db_service', None): + try: + from services.database import SessionLocal + db = SessionLocal() + try: + api_keys = self.api_key_manager.db_service.get_api_keys(user_id, db) or {} + logger.info(f"Loaded {len(api_keys)} API keys from database for user {user_id}") + return { + "api_keys": api_keys, + "total_providers": len(api_keys), + "configured_providers": [k for k, v in api_keys.items() if v] + } + finally: + db.close() + except Exception as db_err: + logger.warning(f"DB lookup for API keys failed, falling back to env: {db_err}") + + # Fallback: load from environment/in-memory + self.api_key_manager.load_api_keys() + api_keys = self.api_key_manager.api_keys + return { "api_keys": api_keys, "total_providers": len(api_keys), "configured_providers": [k for k, v in api_keys.items() if v] } - - return result except Exception as e: logger.error(f"Error getting API keys for onboarding: {str(e)}") raise HTTPException(status_code=500, detail="Internal server error") diff --git a/backend/api/onboarding_utils/endpoints_config_data.py b/backend/api/onboarding_utils/endpoints_config_data.py index 736641a1..035ef531 100644 --- a/backend/api/onboarding_utils/endpoints_config_data.py +++ b/backend/api/onboarding_utils/endpoints_config_data.py @@ -25,11 +25,12 @@ async def get_api_keys(): raise HTTPException(status_code=500, detail="Internal server error") -async def get_api_keys_for_onboarding(): +async def get_api_keys_for_onboarding(current_user: dict = None): try: from api.onboarding_utils.api_key_management_service import APIKeyManagementService api_service = APIKeyManagementService() - return await api_service.get_api_keys_for_onboarding() + user_id = str(current_user.get('id')) if current_user and current_user.get('id') else None + return await api_service.get_api_keys_for_onboarding(user_id) except Exception as e: logger.error(f"Error getting API keys for onboarding: {str(e)}") raise HTTPException(status_code=500, detail="Internal server error")