Fix: Onboarding Completion Service Update
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -81,6 +81,8 @@ backend/research_cache.db
|
|||||||
gsc_credentials.json
|
gsc_credentials.json
|
||||||
**/gsc_credentials.json
|
**/gsc_credentials.json
|
||||||
|
|
||||||
|
.cursor
|
||||||
|
|
||||||
# Onboarding progress files
|
# Onboarding progress files
|
||||||
.onboarding_progress.json
|
.onboarding_progress.json
|
||||||
backend/.onboarding_progress.json
|
backend/.onboarding_progress.json
|
||||||
|
|||||||
@@ -156,10 +156,10 @@ class OnboardingManager:
|
|||||||
raise HTTPException(status_code=500, detail=str(e))
|
raise HTTPException(status_code=500, detail=str(e))
|
||||||
|
|
||||||
@self.app.get("/api/onboarding/api-keys/onboarding")
|
@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)."""
|
"""Get all configured API keys for onboarding (unmasked)."""
|
||||||
try:
|
try:
|
||||||
return await get_api_keys_for_onboarding()
|
return await get_api_keys_for_onboarding(current_user)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"Error in api_keys_for_onboarding: {e}")
|
logger.error(f"Error in api_keys_for_onboarding: {e}")
|
||||||
raise HTTPException(status_code=500, detail=str(e))
|
raise HTTPException(status_code=500, detail=str(e))
|
||||||
|
|||||||
@@ -70,20 +70,38 @@ class APIKeyManagementService:
|
|||||||
logger.error(f"Error getting API keys: {str(e)}")
|
logger.error(f"Error getting API keys: {str(e)}")
|
||||||
raise HTTPException(status_code=500, detail="Internal server error")
|
raise HTTPException(status_code=500, detail="Internal server error")
|
||||||
|
|
||||||
async def get_api_keys_for_onboarding(self) -> Dict[str, Any]:
|
async def get_api_keys_for_onboarding(self, user_id: str | None = None) -> Dict[str, Any]:
|
||||||
"""Get all configured API keys for onboarding (unmasked)."""
|
"""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:
|
try:
|
||||||
self.api_key_manager.load_api_keys() # Load keys from environment
|
# Prefer DB per-user keys when user_id is provided and DB is available
|
||||||
api_keys = self.api_key_manager.api_keys # Get the loaded keys
|
if user_id and getattr(self.api_key_manager, 'use_database', False) and getattr(self.api_key_manager, 'db_service', None):
|
||||||
|
try:
|
||||||
# Return actual API keys for onboarding pre-filling
|
from services.database import SessionLocal
|
||||||
result = {
|
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,
|
"api_keys": api_keys,
|
||||||
"total_providers": len(api_keys),
|
"total_providers": len(api_keys),
|
||||||
"configured_providers": [k for k, v in api_keys.items() if v]
|
"configured_providers": [k for k, v in api_keys.items() if v]
|
||||||
}
|
}
|
||||||
|
|
||||||
return result
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"Error getting API keys for onboarding: {str(e)}")
|
logger.error(f"Error getting API keys for onboarding: {str(e)}")
|
||||||
raise HTTPException(status_code=500, detail="Internal server error")
|
raise HTTPException(status_code=500, detail="Internal server error")
|
||||||
|
|||||||
@@ -25,11 +25,12 @@ async def get_api_keys():
|
|||||||
raise HTTPException(status_code=500, detail="Internal server error")
|
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:
|
try:
|
||||||
from api.onboarding_utils.api_key_management_service import APIKeyManagementService
|
from api.onboarding_utils.api_key_management_service import APIKeyManagementService
|
||||||
api_service = 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:
|
except Exception as e:
|
||||||
logger.error(f"Error getting API keys for onboarding: {str(e)}")
|
logger.error(f"Error getting API keys for onboarding: {str(e)}")
|
||||||
raise HTTPException(status_code=500, detail="Internal server error")
|
raise HTTPException(status_code=500, detail="Internal server error")
|
||||||
|
|||||||
Reference in New Issue
Block a user