fix(monitor): harden server delete and remove challenge docs
- Delete server state before monitored server to avoid FK 500s - Keep legacy cleanup for obsolete challenge tables - Rewrite monitor docs to API key-only flow
This commit is contained in:
@@ -5,6 +5,7 @@ from typing import List
|
||||
|
||||
from fastapi import APIRouter, Depends, Header, HTTPException, status
|
||||
from pydantic import BaseModel
|
||||
from sqlalchemy import text
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from app.core.config import get_db
|
||||
@@ -132,9 +133,20 @@ def delete_server(server_id: int, db: Session = Depends(get_db), _: models.User
|
||||
obj = db.query(MonitoredServer).filter(MonitoredServer.id == server_id).first()
|
||||
if not obj:
|
||||
raise HTTPException(status_code=404, detail='Server not found')
|
||||
state = db.query(ServerState).filter(ServerState.server_id == server_id).first()
|
||||
if state:
|
||||
db.delete(state)
|
||||
|
||||
# Delete dependent rows first to avoid FK errors.
|
||||
db.query(ServerState).filter(ServerState.server_id == server_id).delete(synchronize_session=False)
|
||||
|
||||
# Backward-compatible cleanup for deprecated challenge tables that may still exist in older DBs.
|
||||
try:
|
||||
db.execute(text('DELETE FROM server_handshake_nonces WHERE server_id = :server_id'), {'server_id': server_id})
|
||||
except Exception:
|
||||
pass
|
||||
try:
|
||||
db.execute(text('DELETE FROM server_challenges WHERE server_id = :server_id'), {'server_id': server_id})
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
db.delete(obj)
|
||||
db.commit()
|
||||
return None
|
||||
|
||||
Reference in New Issue
Block a user