global key detect

This commit is contained in:
Mateusz Gruszczyński
2026-04-13 09:20:03 +02:00
parent fe1e731e44
commit 93a03b84c0
5 changed files with 34 additions and 7 deletions

View File

@@ -13,9 +13,20 @@ from app.services.settings_service import settings_service
router = APIRouter()
def serialize_router(router: Router, global_ssh_key: str | None = None) -> RouterResponse:
has_router_key = bool((router.ssh_key or '').strip())
has_global_key = bool((global_ssh_key or '').strip())
payload = RouterResponse.model_validate(router, from_attributes=True).model_dump()
payload['uses_global_ssh_key'] = has_global_key and not has_router_key
payload['has_effective_ssh_key'] = has_router_key or has_global_key
return RouterResponse.model_validate(payload)
@router.get("", response_model=list[RouterResponse])
def list_routers(current_user: User = Depends(get_current_user), db: Session = Depends(get_db)):
return db.query(Router).filter(Router.owner_id == current_user.id).order_by(Router.created_at.desc()).all()
settings = settings_service.get_or_create(db)
routers = db.query(Router).filter(Router.owner_id == current_user.id).order_by(Router.created_at.desc()).all()
return [serialize_router(router, settings.global_ssh_key) for router in routers]
@router.post("", response_model=RouterResponse)
@@ -24,7 +35,8 @@ def create_router(payload: RouterCreate, current_user: User = Depends(get_curren
db.add(router)
db.commit()
db.refresh(router)
return router
settings = settings_service.get_or_create(db)
return serialize_router(router, settings.global_ssh_key)
@router.get("/{router_id}", response_model=RouterResponse)
@@ -32,7 +44,8 @@ def get_router(router_id: int, current_user: User = Depends(get_current_user), d
router = db.query(Router).filter(Router.id == router_id, Router.owner_id == current_user.id).first()
if not router:
raise HTTPException(status_code=404, detail="Router not found")
return router
settings = settings_service.get_or_create(db)
return serialize_router(router, settings.global_ssh_key)
@router.put("/{router_id}", response_model=RouterResponse)
@@ -45,7 +58,8 @@ def update_router(router_id: int, payload: RouterUpdate, current_user: User = De
db.add(router)
db.commit()
db.refresh(router)
return router
settings = settings_service.get_or_create(db)
return serialize_router(router, settings.global_ssh_key)
@router.delete("/{router_id}")

View File

@@ -38,6 +38,8 @@ class RouterUpdate(BaseModel):
class RouterResponse(RouterBase):
id: int
owner_id: int
uses_global_ssh_key: bool = False
has_effective_ssh_key: bool = False
last_connection_status: bool | None = None
last_connection_tested_at: datetime | None = None
last_connection_error: str | None = None