Commit Graph

15 Commits

Author SHA1 Message Date
b71c0d7baf fix: URI 스킴 검증 추가
handleURI에서 parsed.Scheme이 "a301"인지 검증하여
잘못된 스킴의 URI 입력 방지

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 17:49:54 +09:00
a0face763a fix: 다운로드·파일 처리 버그 수정 및 에러 핸들링 강화
- 416 응답 시 무한 재귀를 doDownloadRequest 반복문으로 교체
- copyFile에서 out.Close() 에러를 반환하도록 수정
- ContentLength=-1일 때 잘못된 total 계산 방지
- fetchServerInfo 재시도 로직을 errNoRetry 타입 에러로 교체
- extractZip에서 최상위 디렉토리 엔트리 스킵 처리
- moveContents 크로스 드라이브 복사 후 원본 파일 삭제
- 진행률 100% 초과 클램핑
- install() SetStringValue 에러 체크 추가
- handleURI에서 gameDir 미존재 시 MkdirAll 방어 코드 추가
- ensureGame에서 os.Stat 비정상 에러 명시적 처리

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 13:08:39 +09:00
48df55a82e fix: 보안 강화, 안정성 및 UX 개선
- 토큰 전달 방식 변경: 명령줄 인자(-token) → 환경변수(A301_TOKEN)로 프로세스 목록 노출 방지
- 고정 설치 경로: %LOCALAPPDATA%\A301\로 런처 복사 후 레지스트리 등록 (Downloads 정리 시 깨짐 방지)
- zip 추출 시 symlink 엔트리 스킵 (경로 탈출 방지)
- fetchServerInfo 3회 재시도 (exponential backoff)
- 다운로드 이어받기: Range 헤더 지원, 취소/오류 시 임시 파일 유지
- 416 응답 시 서버 파일 변경 감지하여 처음부터 재다운로드
- 단일 인스턴스 UX: 기존 창 FindWindow+SetForegroundWindow로 활성화
- uninstall 시 설치 디렉토리 정리

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 11:10:11 +09:00
9bb422f9b2 fix: 보안 강화 및 안정성 개선
- extractZip: io.LimitReader 적용으로 zip bomb 방어 (개별 파일 4GB 제한)
- moveContents: cross-drive 복사 실패 시 부분 파일 제거

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-06 09:51:43 +09:00
9fb98b0028 fix: 보안 및 안정성 보강
- Zip Slip 경로 검증 추가
- HTTP 상태 코드 검증 (doDownload)
- HTTP 타임아웃 설정 (API/다운로드 클라이언트 분리)
- 다운로드 URL 스킴 검증 (https/http만 허용)
- 리다이렉트 스킴 제한 (CheckRedirect)
- 다운로드 크기 제한 (2GB)
- fetchServerInfo 응답 크기 제한 (1MB)
- 다운로드 후 해시 검증
- 다중 인스턴스 실행 방지 (CreateMutexW)
- 다운로드 취소 기능 (wmClose 핸들러)
- 압축 해제 실패 시 잔여 파일 정리 (임시 디렉토리 추출)
- 도달 불가능한 dead code 및 미사용 코드 제거

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 11:04:45 +09:00
10651d294a docs: README, CLAUDE.md 작성
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-25 00:20:43 +09:00
f77a7e0e23 feat: 게임 가제 'One of the plans' UI 텍스트 적용
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-25 00:18:13 +09:00
28c1b377df feat: 다운로드 창 다크 테마 적용
- 배경 #2E2C2F, 타이틀 #BACDB0(강조색), 상태 텍스트 밝은 회색
- WM_CTLCOLORSTATIC으로 STATIC 컨트롤 색상 제어
- SetWindowTheme + PBM_SETBARCOLOR로 진행 막대 색상 변경
- "A301" 타이틀 레이블(13pt bold) + 상태 레이블(9pt) 분리
- 웹사이트 색상 팔레트와 통일

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-25 00:14:39 +09:00
22b5efdaab feat: DPI 인식 및 진행 막대 UI 추가
- SetProcessDpiAwarenessContext(PER_MONITOR_AWARE_V2)로 고DPI 디스플레이 지원
- GetDpiForSystem()으로 시스템 DPI 조회 후 모든 크기 동적 스케일링
- 다운로드 진행창에 msctls_progress32 진행 막대 추가 (0~100%)
- Segoe UI 9pt 폰트를 DPI에 맞게 CreateFontIndirectW로 생성
- 4K(200% / 192 DPI)와 FHD(100% / 96 DPI) 모두 동일한 시각적 크기 보장

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-25 00:08:06 +09:00
6fafe1f3af fix: serverInfoURL을 API 서버 주소로 수정
프론트엔드 nginx에 /api/ 프록시 없음 → index.html 반환 → JSON 파싱 실패
직접 API 서버(a301.api.tolelom.xyz)로 요청하도록 변경

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-24 23:40:48 +09:00
90fcc0f94e fix: 서버 상태 코드별 명확한 에러 메시지 처리
- 404: 게임이 아직 준비되지 않았습니다
- 4xx/5xx: 서버 오류 (HTTP 상태코드)
- JSON 파싱 실패는 진짜 비정상 응답일 때만 표시

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-24 23:38:24 +09:00
ad9d372d7c feat: 자동 다운로드/설치 기능 추가
- 게임 파일 없거나 해시 불일치 시 서버에서 zip 자동 다운로드
- Win32 진행률 창으로 다운로드 진행률 표시 (X% 업데이트)
- zip 압축 해제 후 게임 실행 (런처 자신은 덮어쓰기 방지)
- 더블클릭 시 프로토콜만 등록 (토큰 없으므로 다운로드 불필요)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-24 23:00:19 +09:00
7cff574c1d feat: 게임 실행 전 서버 해시 검증으로 버전 강제 차단
- 서버 /api/download/info에서 최신 fileHash 조회
- 로컬 A301.exe SHA256과 비교
- 불일치 시 게임 실행 차단 + 다운로드 페이지 열기

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
v0.0.1
2026-02-24 22:22:58 +09:00
861796fe5a feat: 더블클릭 시 MessageBox로 프로토콜 등록 안내
- 인자 없이 실행(더블클릭) 시 install 확인 팝업 표시
- 모든 결과/에러를 Windows MessageBox로 표시
- -H windowsgui 빌드 플래그로 콘솔창 표시 제거

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-24 22:15:54 +09:00
c3b557419d chore: first commit 2026-02-24 20:52:16 +09:00