feat: record DDS protection evidence

This commit is contained in:
devmrko
2026-06-30 20:56:52 +09:00
parent f162851bc6
commit 22a7eda219
17 changed files with 985 additions and 18 deletions

View File

@@ -2,6 +2,10 @@
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
<body>
<div th:fragment="directComparison" class="table-responsive">
<form hx-post="/dds-protection/verify/direct" hx-target="#direct-comparison-result" hx-swap="innerHTML" class="mb-3">
<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}">
<button class="btn btn-sm rw-btn-primary" type="submit">직접 비교 fixture 검증 실행</button>
</form>
<table class="table table-sm align-middle protection-direct-table">
<thead><tr><th>검증 프로필</th><th>보호 상태</th><th>권한 반영</th><th>검색 검증</th><th>조치</th></tr></thead>
<tbody>

View File

@@ -12,6 +12,13 @@
<section th:replace="~{fragments/layout :: architectureStrip('protection')}"></section>
<div class="alert alert-success" th:if="${successMessage}" th:text="${successMessage}"></div>
<div class="alert alert-danger" th:if="${errorMessage}" th:text="${errorMessage}"></div>
<form method="post" action="/dds-protection/setup" class="mb-3">
<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}">
<button class="btn btn-sm rw-btn-secondary" type="submit">DDS 검증 이력·fixture 구성 확인</button>
</form>
<section class="content-band protection-summary" aria-labelledby="service-path-heading">
<div class="section-heading">
<div>
@@ -24,7 +31,7 @@
<span class="badge text-bg-warning" th:unless="${protection.actionRequiredCount() > 0}">검증 확인 필요</span>
</div>
<article class="protection-status-card"
<article id="service-verify" class="protection-status-card"
th:classappend="${' status-' + protection.servicePath.primaryTone()}"
aria-label="토큰 기반 서비스 경로 보호 상태">
<div class="protection-status-topline">
@@ -56,8 +63,13 @@
<footer class="protection-status-footer">
<span th:text="${'마지막 관측 ' + protection.servicePath.observedAtLabel()}">마지막 관측</span>
<a class="btn rw-btn-primary" th:href="${protection.servicePath.actionHref()}"
th:text="${protection.servicePath.actionLabel()}">토큰 권한으로 검색</a>
<div class="d-flex gap-2 flex-wrap">
<a class="btn rw-btn-secondary" href="/vector-knowledge">지식 검색 열기</a>
<form method="post" action="/dds-protection/verify/service" class="d-inline">
<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}">
<button class="btn rw-btn-primary" type="submit">결정적 보호 검증 실행</button>
</form>
</div>
</footer>
</article>
</section>