Skip to content

Task 1-3: Guard create-account-fake Endpoint

Phase: 1 - Security Priority: Medium Module: authentication Depends on: Không có Blocks: task-4-1 Reference: docs/BountyHunter-Backend/details/feature-authentication/SPEC.md

Background

POST /api/auth/create-account-fake tạo user giả mà không có bất kỳ guard nào. Nếu tồn tại trên production, có thể bị lợi dụng để tạo tài khoản tùy ý.

Tasks

File: authentication/controllers/auth/AuthController.java

DI / Import notes per option: - Option A: @Profile — import org.springframework.context.annotation.Profile. Không cần inject thêm bean; Spring container tự xử lý khi load context. - Option B: HttpServletRequest — import jakarta.servlet.http.HttpServletRequest (hoặc javax.servlet nếu dùng Spring Boot 2.x). ForbiddenException phải là class đã được khai báo trong project (kiểm tra tại common/exception/ hoặc tương đương). isInternalRequest(HttpServletRequest) phải là một helper method được khai báo trong chính AuthController hoặc một utility class được inject vào. - Option C: Không cần thêm import hay dependency.

  • [ ] Chọn một trong các options:

Option A (đề xuất): Profile guard

@Profile("!main")
@PostMapping("/create-account-fake")
public void createAccountFake(@Valid @RequestBody BaseMap baseMap) { ... }

Option B: Internal IP check

@PostMapping("/create-account-fake")
public void createAccountFake(HttpServletRequest request, @Valid @RequestBody BaseMap baseMap) {
    if (!isInternalRequest(request)) {
        throw new ForbiddenException("NOT_ALLOWED");
    }
    // ...
}

Option C: Xóa endpoint nếu không còn dùng

  • [ ] Nếu chọn Option A hoặc C: verify endpoint không xuất hiện trong production swagger/routes
  • [ ] Document decision trong code comment

Verification / Acceptance Criteria

  • [ ] Compile check: AuthController.java compile thành công với option đã chọn — không có lỗi import thiếu (Profile, HttpServletRequest, ForbiddenException, v.v.).
  • [ ] Option A — Profile guard: Khởi động application với spring.profiles.active=mainPOST /api/auth/create-account-fake trả HTTP 404 (endpoint không được register).
  • [ ] Option A — Non-main profile: Khởi động với profile khác (ví dụ: dev) → endpoint hoạt động bình thường.
  • [ ] Option B — IP check: Request từ IP nội bộ → thực thi; request từ IP bên ngoài → nhận HTTP 403 NOT_ALLOWED.
  • [ ] Option C — Removed: Endpoint không tồn tại trong codebase và không xuất hiện trong Swagger/OpenAPI spec.
  • [ ] No regression: Các endpoint khác của AuthController không bị ảnh hưởng (compile và runtime bình thường).

Files to Modify

  • authentication/src/main/java/com/figpop/authentication/controllers/auth/AuthController.java