Task 1-2: Guard TestController và InitController
Phase: 1 - Security Priority: High Module:
adminDepends on: Không có Reference: SPEC.md — xem mục 4 (ADM-F-10 Init data) và mục 5 (Acceptance Criteria: "Unauthorized request → 401")
Background
TestController và InitController là development/setup endpoints không nên tồn tại trên production.
Tasks
TestController
File: admin/controller/health_check/TestController.java
- [ ] Thêm
@Profile("!main"):@Profile("!main") @RestController @RequestMapping("/api/admin/test") public class TestController { ... }Note:
@Profile("!main")yêu cầu Spring profilemainđược set trong productionapplication.properties/ environment variableSPRING_PROFILES_ACTIVE=main. Xác nhận profile name được dùng nhất quán trong project (có thể làprod,production, hoặcmain).
InitController
File: admin/controller/init/InitController.java
- [ ] Xác nhận
InitControllerlàm gì (có thể triggerInitializeDatamanually) - [ ] Option A:
@Profile("!main")nếu chỉ cần cho dev - [ ] Option B: Thêm guard kiểm tra flag "already initialized" trong DB:
@PostMapping("/init") public Result<?> init() { if (systemSettingRepository.isInitialized()) { throw new BadRequestException("ALREADY_INITIALIZED"); } initializeData.run(); systemSettingRepository.markInitialized(); return Result.OK(); }Injection note:
InitControllercần inject các dependency sau nếu chưa có:Xác nhận@Autowired private SystemSettingRepository systemSettingRepository; @Autowired private InitializeData initializeData;SystemSettingRepositorycó methodisInitialized()vàmarkInitialized()hoặc tạo thêm nếu chưa có.InitializeDatalà bean trongadmin/init/— kiểm tra đây là@Componenthay@Service.BadRequestException— kiểm tra package import đúng trong project:import com.figpop.common.exception.BadRequestException; // điều chỉnh theo package thực tế
Verification / Acceptance Criteria
- [ ] Code compiles: Cả
TestController.javavàInitController.javabuild thành công;@Profile,BadRequestException,SystemSettingRepository,InitializeDatađều resolve đúng - [ ] TestController ẩn trên production: Deploy với
SPRING_PROFILES_ACTIVE=main→GET /api/admin/test/*trả về 404 (bean không được load) - [ ] InitController guard - lần đầu: Gọi
POST /api/admin/initkhi DB chưa initialized →200 OK, data được seed - [ ] InitController guard - lần hai: Gọi lại
POST /api/admin/initsau khi đã initialized →400 Bad Requestvới messageALREADY_INITIALIZED - [ ] Option A nếu chọn:
@Profile("!main")trênInitController→ endpoint biến mất trên production profile - [ ] Test class tham khảo:
InitControllerTesthoặc integration test trongtask-3-1.md
Files to Modify
admin/controller/health_check/TestController.javaadmin/controller/init/InitController.java