Validate AVConnect credentials on saving. Improved AVConnect login method. Fixed issue with UTC datetimes
This commit is contained in:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user