97 lines
4.0 KiB
Java
97 lines
4.0 KiB
Java
package com.cloudhandson.ddsbackoffice.web;
|
|
|
|
import com.cloudhandson.ddsbackoffice.config.DdsProperties;
|
|
import com.cloudhandson.ddsbackoffice.service.DdsProtectionStatusService;
|
|
import com.cloudhandson.ddsbackoffice.service.DdsProtectionValidationService;
|
|
import com.cloudhandson.ddsbackoffice.service.DdsProtectionSchemaService;
|
|
import com.cloudhandson.ddsbackoffice.service.DdsSqlEvidenceHistory;
|
|
import org.springframework.stereotype.Controller;
|
|
import org.springframework.ui.Model;
|
|
import org.springframework.web.bind.annotation.GetMapping;
|
|
import org.springframework.web.bind.annotation.PostMapping;
|
|
import org.springframework.web.servlet.view.RedirectView;
|
|
|
|
/** DDS protection status, deliberately separate from the legacy VPD route. */
|
|
@Controller
|
|
public class DdsProtectionController {
|
|
|
|
private final DdsProperties properties;
|
|
private final DdsProtectionStatusService protectionStatusService;
|
|
private final DdsProtectionValidationService validationService;
|
|
private final DdsProtectionSchemaService schemaService;
|
|
private final DdsSqlEvidenceHistory evidenceHistory;
|
|
|
|
public DdsProtectionController(
|
|
DdsProperties properties,
|
|
DdsProtectionStatusService protectionStatusService,
|
|
DdsProtectionValidationService validationService,
|
|
DdsProtectionSchemaService schemaService,
|
|
DdsSqlEvidenceHistory evidenceHistory
|
|
) {
|
|
this.properties = properties;
|
|
this.protectionStatusService = protectionStatusService;
|
|
this.validationService = validationService;
|
|
this.schemaService = schemaService;
|
|
this.evidenceHistory = evidenceHistory;
|
|
}
|
|
|
|
@GetMapping("/dds-protection")
|
|
public String page(Model model) {
|
|
model.addAttribute("ddsVectorObject", properties.vectorObject());
|
|
model.addAttribute("protection", protectionStatusService.overview());
|
|
return "vpd-policies";
|
|
}
|
|
|
|
@GetMapping("/dds-evidence")
|
|
public String evidence(Model model) {
|
|
model.addAttribute("evidenceEntries", evidenceHistory.recent());
|
|
return "dds-evidence";
|
|
}
|
|
|
|
@GetMapping("/dds-protection/direct")
|
|
public String directComparison(Model model) {
|
|
model.addAttribute("directPaths", protectionStatusService.directComparison());
|
|
return "fragments/dds-protection-direct :: directComparison";
|
|
}
|
|
|
|
@PostMapping("/dds-protection/verify/service")
|
|
public RedirectView verifyService(org.springframework.web.servlet.mvc.support.RedirectAttributes attributes) {
|
|
try {
|
|
var result = validationService.runServiceFixtures();
|
|
attributes.addFlashAttribute(result.passed() ? "successMessage" : "errorMessage", result.message());
|
|
} catch (RuntimeException exception) {
|
|
attributes.addFlashAttribute("errorMessage", "DDS 보호 검증을 실행하지 못했습니다. fixture와 DB 설정을 확인하세요.");
|
|
}
|
|
return new RedirectView("/dds-protection#service-verify");
|
|
}
|
|
|
|
@PostMapping("/dds-protection/verify/direct")
|
|
public String verifyDirect(Model model) {
|
|
validationService.runDirectFixtures();
|
|
model.addAttribute("directPaths", protectionStatusService.directComparison());
|
|
return "fragments/dds-protection-direct :: directComparison";
|
|
}
|
|
|
|
@PostMapping("/dds-protection/setup")
|
|
public RedirectView setup(org.springframework.web.servlet.mvc.support.RedirectAttributes attributes) {
|
|
try {
|
|
schemaService.initialize();
|
|
attributes.addFlashAttribute("successMessage", "DDS 검증 이력과 fixture 구성을 완료했습니다.");
|
|
} catch (RuntimeException exception) {
|
|
attributes.addFlashAttribute("errorMessage", "DDS 검증 구성을 완료하지 못했습니다. DB 권한과 선행 DDS 객체를 확인하세요.");
|
|
}
|
|
return new RedirectView("/dds-protection");
|
|
}
|
|
|
|
/** Existing bookmarks resolve to the DDS canonical route without retaining VPD in the UI. */
|
|
@GetMapping("/vpd-policies")
|
|
public RedirectView legacyPolicies() {
|
|
return new RedirectView("/dds-protection");
|
|
}
|
|
|
|
@GetMapping("/vpd-filter-policies")
|
|
public RedirectView filterPolicies() {
|
|
return new RedirectView("/dds-protection");
|
|
}
|
|
}
|