Initial curated Unraid-AppOps-Gateway source from 3bd6f6fee310125bfbb4d4650389a817f498724d
This commit is contained in:
commit
1dfbca08a1
528 files changed
+131054
No files matched your search
@@ -0,0 +1,83 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from fastapi import APIRouter, Depends, HTTPException
|
||||
from sqlmodel import Session
|
||||
|
||||
from ..db.session import get_session
|
||||
from ..schemas.ai_security import SecurityReviewScope
|
||||
from ..services import ai_security_reviewer
|
||||
from .connector_runtime import load_connector_runtime
|
||||
|
||||
router = APIRouter(prefix='/api/ai/security', dependencies=[Depends(load_connector_runtime)])
|
||||
|
||||
|
||||
@router.get('/status')
|
||||
def status(session: Session = Depends(get_session)):
|
||||
summary = ai_security_reviewer.get_summary(session)
|
||||
return {
|
||||
'enabled': True,
|
||||
'mode': 'deterministic_rule_based',
|
||||
'externalAiRequired': False,
|
||||
'canExecuteActions': False,
|
||||
'status': summary['status'],
|
||||
'score': summary['score'],
|
||||
'generatedAt': summary['generatedAt'],
|
||||
}
|
||||
|
||||
|
||||
@router.get('/summary')
|
||||
def summary(session: Session = Depends(get_session)):
|
||||
return ai_security_reviewer.get_summary(session)
|
||||
|
||||
|
||||
@router.get('/findings')
|
||||
def findings(scope: SecurityReviewScope = 'all', session: Session = Depends(get_session)):
|
||||
return ai_security_reviewer.get_findings(session, scope)
|
||||
|
||||
|
||||
@router.get('/findings/{finding_id}')
|
||||
def finding_detail(finding_id: str, session: Session = Depends(get_session)):
|
||||
finding = ai_security_reviewer.get_finding(session, finding_id)
|
||||
if not finding:
|
||||
raise HTTPException(status_code=404, detail='finding_not_found')
|
||||
return finding
|
||||
|
||||
|
||||
@router.get('/recommendations')
|
||||
def recommendations(session: Session = Depends(get_session)):
|
||||
return ai_security_reviewer.get_recommendations(session)
|
||||
|
||||
|
||||
@router.post('/review')
|
||||
def review(session: Session = Depends(get_session)):
|
||||
return ai_security_reviewer.generate_review(session, audit_run=True).model_dump()
|
||||
|
||||
|
||||
@router.post('/review/scope/{scope}')
|
||||
def review_scope(scope: SecurityReviewScope, session: Session = Depends(get_session)):
|
||||
return ai_security_reviewer.generate_review(session, scope=scope, audit_run=True).model_dump()
|
||||
|
||||
|
||||
@router.post('/findings/{finding_id}/acknowledge')
|
||||
def acknowledge_finding(finding_id: str, session: Session = Depends(get_session)):
|
||||
return ai_security_reviewer.set_finding_status(session, finding_id, 'acknowledged')
|
||||
|
||||
|
||||
@router.post('/findings/{finding_id}/dismiss')
|
||||
def dismiss_finding(finding_id: str, session: Session = Depends(get_session)):
|
||||
return ai_security_reviewer.set_finding_status(session, finding_id, 'dismissed')
|
||||
|
||||
|
||||
@router.post('/recommendations/{recommendation_id}/snooze')
|
||||
def snooze_recommendation(recommendation_id: str, session: Session = Depends(get_session)):
|
||||
return ai_security_reviewer.set_recommendation_status(session, recommendation_id, 'snoozed')
|
||||
|
||||
|
||||
@router.post('/recommendations/{recommendation_id}/dismiss')
|
||||
def dismiss_recommendation(recommendation_id: str, session: Session = Depends(get_session)):
|
||||
return ai_security_reviewer.set_recommendation_status(session, recommendation_id, 'dismissed')
|
||||
|
||||
|
||||
@router.post('/recommendations/{recommendation_id}/accept')
|
||||
def accept_recommendation(recommendation_id: str, session: Session = Depends(get_session)):
|
||||
return ai_security_reviewer.set_recommendation_status(session, recommendation_id, 'accepted')
|
||||
Reference in new issue
Block a user