Validate AVConnect credentials on saving. Improved AVConnect login method. Fixed issue with UTC datetimes

This commit is contained in:
Ettore
2026-05-09 18:18:10 +02:00
parent 69e4f594de
commit 0cb35a30cb
8 changed files with 60 additions and 16 deletions

View File

@@ -1,6 +1,6 @@
from typing import Optional
from fastapi import APIRouter, Depends
from fastapi import APIRouter, Depends, HTTPException
from pydantic import BaseModel
from sqlalchemy.orm import Session
@@ -8,6 +8,7 @@ from core.auth import encrypt_secret
from core.database import ApiCredential, get_db
from core.dependencies import require_admin
from core.schemas import CredentialRead, CredentialUpsert
from services.avconnect import validate_credentials
router = APIRouter(prefix="/api/admin/credentials", tags=["admin-credentials"])
@@ -25,15 +26,23 @@ async def upsert_credential(
db: Session = Depends(get_db),
_: dict = Depends(require_admin),
):
try:
ok, session_id = validate_credentials(req.username, req.password)
except Exception as exc:
raise HTTPException(502, f"Could not reach AVConnect: {exc}")
if not ok:
raise HTTPException(422, "AVConnect rejected these credentials")
cred: Optional[ApiCredential] = db.query(ApiCredential).first()
if cred:
cred.username = req.username
cred.password_enc = encrypt_secret(req.password)
cred.session_id = None # invalidate any cached session
cred.session_id = session_id # reuse the session obtained during validation
else:
cred = ApiCredential(
username=req.username,
password_enc=encrypt_secret(req.password),
session_id=session_id,
)
db.add(cred)
db.commit()