global key detect
This commit is contained in:
@@ -5,7 +5,8 @@
|
||||
cp .env.example .env
|
||||
```
|
||||
|
||||
# edit SECRET_KEY & DEFAULT_ADMIN_PASSWORD
|
||||
edit SECRET_KEY & DEFAULT_ADMIN_PASSWORD
|
||||
and run:
|
||||
|
||||
`bash start_prod.sh`
|
||||
|
||||
|
||||
@@ -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}")
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
<td>
|
||||
<div class="inline-tags">
|
||||
<p-tag [value]="routerItem.ssh_password ? ('routers.passwordMode' | translate) : ('routers.noPassword' | translate)" [severity]="routerItem.ssh_password ? 'warning' : 'secondary'"></p-tag>
|
||||
<p-tag [value]="routerItem.ssh_key ? ('routers.keyMode' | translate) : ('routers.noKey' | translate)" [severity]="routerItem.ssh_key ? 'success' : 'secondary'"></p-tag>
|
||||
<p-tag [value]="hasEffectiveSshKey(routerItem) ? ((usesGlobalSshKey(routerItem) ? 'routers.globalKeyMode' : 'routers.keyMode') | translate) : ('routers.noKey' | translate)" [severity]="hasEffectiveSshKey(routerItem) ? 'success' : 'secondary'"></p-tag>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
|
||||
@@ -23,6 +23,8 @@ interface RouterItem {
|
||||
ssh_user: string;
|
||||
ssh_password?: string;
|
||||
ssh_key?: string;
|
||||
uses_global_ssh_key?: boolean;
|
||||
has_effective_ssh_key?: boolean;
|
||||
}
|
||||
|
||||
@Component({
|
||||
@@ -58,7 +60,15 @@ export class RoutersPageComponent implements OnInit {
|
||||
}
|
||||
|
||||
get keyCount(): number {
|
||||
return this.routers.filter((item) => !!item.ssh_key).length;
|
||||
return this.routers.filter((item) => this.hasEffectiveSshKey(item)).length;
|
||||
}
|
||||
|
||||
hasEffectiveSshKey(item: RouterItem): boolean {
|
||||
return !!item.has_effective_ssh_key;
|
||||
}
|
||||
|
||||
usesGlobalSshKey(item: RouterItem): boolean {
|
||||
return !!item.uses_global_ssh_key;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user