Files
2026-07-13 12:43:34 +08:00

69 lines
2.0 KiB
Python

import json
import uuid
from fastapi import APIRouter, Body
from fastapi import HTTPException, Depends
from fastapi_jwt_auth import AuthJWT
from fastapi_sqlalchemy import db
from pydantic import BaseModel
from superagi.helper.auth import get_user_organisation, validate_api_key
from superagi.helper.auth import check_auth
from superagi.models.api_key import ApiKey
from typing import Optional, Annotated
router = APIRouter()
class ApiKeyIn(BaseModel):
id: int
name: str
class Config:
orm_mode = True
class ApiKeyDeleteIn(BaseModel):
id: int
class Config:
orm_mode = True
@router.post("")
def create_api_key(name: Annotated[str, Body(embed=True)], Authorize: AuthJWT = Depends(check_auth),
organisation=Depends(get_user_organisation)):
api_key = str(uuid.uuid4())
obj = ApiKey(key=api_key, name=name, org_id=organisation.id)
db.session.add(obj)
db.session.commit()
db.session.flush()
return {"api_key": api_key}
@router.get("/validate")
def validate_api_key(api_key: str = Depends(validate_api_key)):
return {"success": True}
@router.get("")
def get_all(Authorize: AuthJWT = Depends(check_auth), organisation=Depends(get_user_organisation)):
api_keys = ApiKey.get_by_org_id(db.session, organisation.id)
return api_keys
@router.delete("/{api_key_id}")
def delete_api_key(api_key_id: int, Authorize: AuthJWT = Depends(check_auth)):
api_key = ApiKey.get_by_id(db.session, api_key_id)
if api_key is None:
raise HTTPException(status_code=404, detail="API key not found")
ApiKey.delete_by_id(db.session, api_key_id)
return {"success": True}
@router.put("")
def edit_api_key(api_key_in: ApiKeyIn, Authorize: AuthJWT = Depends(check_auth)):
api_key = ApiKey.get_by_id(db.session, api_key_in.id)
if api_key is None:
raise HTTPException(status_code=404, detail="API key not found")
ApiKey.update_api_key(db.session, api_key_in.id, api_key_in.name)
return {"success": True}