mirror of
https://github.com/aljazceru/enclava.git
synced 2025-12-17 07:24:34 +01:00
cleanup of api key generation
This commit is contained in:
@@ -957,130 +957,3 @@ async def external_chatbot_chat_completions(
|
||||
await db.rollback()
|
||||
log_api_request("external_chatbot_chat_completions_error", {"error": str(e), "chatbot_id": chatbot_id})
|
||||
raise HTTPException(status_code=500, detail=f"Failed to process chat completions: {str(e)}")
|
||||
|
||||
|
||||
@router.post("/{chatbot_id}/api-key")
|
||||
async def create_chatbot_api_key(
|
||||
chatbot_id: str,
|
||||
current_user: User = Depends(get_current_user),
|
||||
db: AsyncSession = Depends(get_db)
|
||||
):
|
||||
"""Create an API key for a specific chatbot"""
|
||||
user_id = current_user.get("id") if isinstance(current_user, dict) else current_user.id
|
||||
log_api_request("create_chatbot_api_key", {
|
||||
"user_id": user_id,
|
||||
"chatbot_id": chatbot_id
|
||||
})
|
||||
|
||||
try:
|
||||
# Get existing chatbot and verify ownership
|
||||
result = await db.execute(
|
||||
select(ChatbotInstance)
|
||||
.where(ChatbotInstance.id == chatbot_id)
|
||||
.where(ChatbotInstance.created_by == str(user_id))
|
||||
)
|
||||
chatbot = result.scalar_one_or_none()
|
||||
|
||||
if not chatbot:
|
||||
raise HTTPException(status_code=404, detail="Chatbot not found or access denied")
|
||||
|
||||
# Generate API key
|
||||
from app.api.v1.api_keys import generate_api_key
|
||||
full_key, key_hash = generate_api_key()
|
||||
key_prefix = full_key[:8]
|
||||
|
||||
# Create chatbot-specific API key
|
||||
new_api_key = APIKey.create_chatbot_key(
|
||||
user_id=user_id,
|
||||
name=f"{chatbot.name} API Key",
|
||||
key_hash=key_hash,
|
||||
key_prefix=key_prefix,
|
||||
chatbot_id=chatbot_id,
|
||||
chatbot_name=chatbot.name
|
||||
)
|
||||
|
||||
db.add(new_api_key)
|
||||
await db.commit()
|
||||
await db.refresh(new_api_key)
|
||||
|
||||
return {
|
||||
"api_key_id": new_api_key.id,
|
||||
"name": new_api_key.name,
|
||||
"key_prefix": new_api_key.key_prefix + "...",
|
||||
"secret_key": full_key, # Only returned on creation
|
||||
"chatbot_id": chatbot_id,
|
||||
"chatbot_name": chatbot.name,
|
||||
"endpoint": f"/api/v1/chatbot/external/{chatbot_id}/chat/completions",
|
||||
"scopes": new_api_key.scopes,
|
||||
"rate_limit_per_minute": new_api_key.rate_limit_per_minute,
|
||||
"created_at": new_api_key.created_at.isoformat()
|
||||
}
|
||||
|
||||
except HTTPException:
|
||||
raise
|
||||
except Exception as e:
|
||||
await db.rollback()
|
||||
log_api_request("create_chatbot_api_key_error", {"error": str(e), "user_id": user_id})
|
||||
raise HTTPException(status_code=500, detail=f"Failed to create chatbot API key: {str(e)}")
|
||||
|
||||
|
||||
@router.get("/{chatbot_id}/api-keys")
|
||||
async def list_chatbot_api_keys(
|
||||
chatbot_id: str,
|
||||
current_user: User = Depends(get_current_user),
|
||||
db: AsyncSession = Depends(get_db)
|
||||
):
|
||||
"""List API keys for a specific chatbot"""
|
||||
user_id = current_user.get("id") if isinstance(current_user, dict) else current_user.id
|
||||
log_api_request("list_chatbot_api_keys", {
|
||||
"user_id": user_id,
|
||||
"chatbot_id": chatbot_id
|
||||
})
|
||||
|
||||
try:
|
||||
# Get existing chatbot and verify ownership
|
||||
result = await db.execute(
|
||||
select(ChatbotInstance)
|
||||
.where(ChatbotInstance.id == chatbot_id)
|
||||
.where(ChatbotInstance.created_by == str(user_id))
|
||||
)
|
||||
chatbot = result.scalar_one_or_none()
|
||||
|
||||
if not chatbot:
|
||||
raise HTTPException(status_code=404, detail="Chatbot not found or access denied")
|
||||
|
||||
# Get API keys that can access this chatbot
|
||||
api_keys_result = await db.execute(
|
||||
select(APIKey)
|
||||
.where(APIKey.user_id == user_id)
|
||||
.where(APIKey.allowed_chatbots.contains([chatbot_id]))
|
||||
.order_by(APIKey.created_at.desc())
|
||||
)
|
||||
api_keys = api_keys_result.scalars().all()
|
||||
|
||||
api_key_list = []
|
||||
for api_key in api_keys:
|
||||
api_key_list.append({
|
||||
"id": api_key.id,
|
||||
"name": api_key.name,
|
||||
"key_prefix": api_key.key_prefix + "...",
|
||||
"is_active": api_key.is_active,
|
||||
"created_at": api_key.created_at.isoformat(),
|
||||
"last_used_at": api_key.last_used_at.isoformat() if api_key.last_used_at else None,
|
||||
"total_requests": api_key.total_requests,
|
||||
"rate_limit_per_minute": api_key.rate_limit_per_minute,
|
||||
"scopes": api_key.scopes
|
||||
})
|
||||
|
||||
return {
|
||||
"chatbot_id": chatbot_id,
|
||||
"chatbot_name": chatbot.name,
|
||||
"api_keys": api_key_list,
|
||||
"total": len(api_key_list)
|
||||
}
|
||||
|
||||
except HTTPException:
|
||||
raise
|
||||
except Exception as e:
|
||||
log_api_request("list_chatbot_api_keys_error", {"error": str(e), "user_id": user_id})
|
||||
raise HTTPException(status_code=500, detail=f"Failed to list chatbot API keys: {str(e)}")
|
||||
Reference in New Issue
Block a user