69 lines
2.0 KiB
Python
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}
|