global key detect
This commit is contained in:
@@ -5,7 +5,8 @@
|
|||||||
cp .env.example .env
|
cp .env.example .env
|
||||||
```
|
```
|
||||||
|
|
||||||
# edit SECRET_KEY & DEFAULT_ADMIN_PASSWORD
|
edit SECRET_KEY & DEFAULT_ADMIN_PASSWORD
|
||||||
|
and run:
|
||||||
|
|
||||||
`bash start_prod.sh`
|
`bash start_prod.sh`
|
||||||
|
|
||||||
|
|||||||
@@ -13,9 +13,20 @@ from app.services.settings_service import settings_service
|
|||||||
router = APIRouter()
|
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])
|
@router.get("", response_model=list[RouterResponse])
|
||||||
def list_routers(current_user: User = Depends(get_current_user), db: Session = Depends(get_db)):
|
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)
|
@router.post("", response_model=RouterResponse)
|
||||||
@@ -24,7 +35,8 @@ def create_router(payload: RouterCreate, current_user: User = Depends(get_curren
|
|||||||
db.add(router)
|
db.add(router)
|
||||||
db.commit()
|
db.commit()
|
||||||
db.refresh(router)
|
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)
|
@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()
|
router = db.query(Router).filter(Router.id == router_id, Router.owner_id == current_user.id).first()
|
||||||
if not router:
|
if not router:
|
||||||
raise HTTPException(status_code=404, detail="Router not found")
|
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)
|
@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.add(router)
|
||||||
db.commit()
|
db.commit()
|
||||||
db.refresh(router)
|
db.refresh(router)
|
||||||
return router
|
settings = settings_service.get_or_create(db)
|
||||||
|
return serialize_router(router, settings.global_ssh_key)
|
||||||
|
|
||||||
|
|
||||||
@router.delete("/{router_id}")
|
@router.delete("/{router_id}")
|
||||||
|
|||||||
@@ -38,6 +38,8 @@ class RouterUpdate(BaseModel):
|
|||||||
class RouterResponse(RouterBase):
|
class RouterResponse(RouterBase):
|
||||||
id: int
|
id: int
|
||||||
owner_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_status: bool | None = None
|
||||||
last_connection_tested_at: datetime | None = None
|
last_connection_tested_at: datetime | None = None
|
||||||
last_connection_error: str | None = None
|
last_connection_error: str | None = None
|
||||||
|
|||||||
@@ -39,7 +39,7 @@
|
|||||||
<td>
|
<td>
|
||||||
<div class="inline-tags">
|
<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_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>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
|
|||||||
@@ -23,6 +23,8 @@ interface RouterItem {
|
|||||||
ssh_user: string;
|
ssh_user: string;
|
||||||
ssh_password?: string;
|
ssh_password?: string;
|
||||||
ssh_key?: string;
|
ssh_key?: string;
|
||||||
|
uses_global_ssh_key?: boolean;
|
||||||
|
has_effective_ssh_key?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
@@ -58,7 +60,15 @@ export class RoutersPageComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
get keyCount(): number {
|
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