47 lines
1.8 KiB
JSON
47 lines
1.8 KiB
JSON
{
|
|
"run_id": "20260916_033500",
|
|
"environment": "MOCK DMS ONLY",
|
|
"audit_timestamp": "2026-09-16T11:35:00+08:00",
|
|
"security_verdict": "PASS",
|
|
"checks": {
|
|
"password_plaintext_persistence_count": {
|
|
"count": 0,
|
|
"status": "PASS",
|
|
"detail": "No plaintext passcodes stored in train_dorm_auth, dms_external_operation, or any persistent table."
|
|
},
|
|
"secret_ui_exposure_count": {
|
|
"count": 0,
|
|
"status": "PASS",
|
|
"detail": "No token, appsecret, password, or raw request/response payloads exposed in frontend views or API responses."
|
|
},
|
|
"remote_unlock_callable_entry_count": {
|
|
"count": 0,
|
|
"status": "PASS",
|
|
"detail": "No /train/dms/remote-unlock API endpoint or UI trigger implemented or permitted."
|
|
},
|
|
"teacher_access_to_admin_dms_api": {
|
|
"status": "DENIED",
|
|
"detail": "Strictly restricted by Spring Security @PreAuthorize('hasPermi(...)') with dedicated train:access permissions."
|
|
},
|
|
"student_access_to_admin_dms_api": {
|
|
"status": "DENIED",
|
|
"detail": "Students have no access privileges to /train/access/** endpoints."
|
|
},
|
|
"manual_reconcile_prerequisite_bypass": {
|
|
"bypassed": false,
|
|
"status": "PASS",
|
|
"detail": "reconcile(enrollmentId) strictly enforces enrollment status, accommodation presence, room mapping, and exactly one primary lock."
|
|
},
|
|
"operation_history_sanitized": {
|
|
"sanitized": true,
|
|
"status": "PASS",
|
|
"detail": "DmsSanitizedOperationVO only returns non-sensitive fields (id, type, status, attempt, timestamps, sanitized error message)."
|
|
},
|
|
"live_dms_request_count": {
|
|
"count": 0,
|
|
"status": "PASS",
|
|
"detail": "dms.enabled=false by default in application.yml. All E2E tests target MockDmsServer exclusively."
|
|
}
|
|
}
|
|
}
|