**task-1191.1 완료 보고** (dev5-team) **완료 보고서: 대시보드 파일 뷰어 — /home/jay/projects/ 경로 접근 허용** (5분 33초) **핵심 결과** `server.py`의 `/api/file` 엔드포인트에 절대경로 전용 처리 블록을 기존 로직 앞에 삽입. `ALLOWED_ABSOLUTE_PATHS = ("/home/jay/projects/",)` 화이트리스트 + `Path.resolve()` 후 재확인으로 보안 확보. 테스트 11건 전체 통과(0.07s), 기존 테스트 161건 회귀 없음. ## 수정 내용 ### 1. server.py — `/api/file` 엔드포인트 (라인 3125-3176) - `ALLOWED_ABSOLUTE_PATHS = ("/home/jay/projects/",)` 상수 추가 - 절대경로(`/`로 시작) 감지 시 별도 코드 경로 진입: - 1차 확인: `rel_path.startswith(allowed_path)` — 허용 목록 매칭 - 2차 확인: `Path.resolve()` 후 재확인 — symlink/`..` 우회 방지 - 확장자 화이트리스트(18종) 및 민감파일(.env 등) 차단 - 이미지는 base64 data URI, 텍스트는 UTF-8로 응답 - 블록 끝 `return`으로 기존 workspace 상대경로 로직과 완전 분리 - 기존 `ALLOWED_PREFIXES`, `normalize_file_path()`, workspace 범위 체크 — 변경 없음 ### 2. 프론트엔드 확인 결과 - `dashboard/components/utils.js`의 `FileViewerModal` (라인 734-750): `encodeURIComponent(path)`로 절대경로를 그대로 전송 → 수정 불필요 **발견/해결 이슈 4건** 1. **test_file_api.py 미사용 import (os, pytest)** — pyright 경고 대응으로 직접 제거 2. **ALLOWED_EXTENSIONS/BLOCKED_EXTENSIONS 상수 중복** — 절대경로 블록과 기존 블록에 동일 상수 존재. 기존 코드 수정 최소화 원칙에 따라 의도적으로 유지 (향후 공통 함수 추출 가능) 3. **`..` 체크 순서 확인** — `normalize_file_path` 후 `..` 체크(3122) → 절대경로 체크(3127) 순서가 올바른지 검증. `/home/jay/projects/foo/../bar` 같은 경로는 `..` 체크에서 먼저 차단되므로 안전 4. **test_composite_status.py 4건 실패** — 미해결: 범위 외 사유: composite_teams 기능 관련 기존 실패, 파일 API 수정과 무관