# SPTarkov Personal Authentication Mod (C#) PostgreSQL 기반의 외부 데이터베이스를 연동하여 SPTarkov 서버의 인증 및 프로필 관리를 수행하는 확장 모드입니다. ## 주요 기능 (Key Features) - **외부 DB 연동**: PostgreSQL을 사용하여 유저 정보 및 세션을 안전하게 저장합니다. - **보안 인증**: SHA256 해싱과 유저별 고유 Salt, 서버 Pepper를 결합한 비밀번호 보안을 제공합니다. - **하모니 패치 (Interception)**: - SPT 코어의 엄격한 JSON 역직렬화를 우회하기 위해 전역 전처리 패치를 적용했습니다. - `password` 필드를 중간에서 추출하고 제거하여 서버 크래시를 방지합니다. - **프로필 격리 (Isolation)**: 로그인한 유저가 오직 자신의 프로필만 보고 접근할 수 있도록 하모니 기반의 강력한 필터링을 제공합니다. - **세션 관리**: SPT `MongoId` 규격(24자 16진수)에 맞는 세션을 발급하여 클라이언트 호환성을 보장합니다. ## 엔드포인트 상세 (Endpoints) | 엔드포인트 | 메서드 | 설명 | | :--- | :--- | :--- | | `/launcher/profile/register` | POST | 새로운 유저를 가입시키고 로컬 프로필을 생성합니다. | | `/launcher/profile/login` | POST | 비밀번호 검증 후 24자리 세션 ID를 발급합니다. | | `/launcher/profiles` | POST | 현재 세션 유저의 프로필 목록만 필터링하여 반환합니다. | | `/launcher/profile/get` | POST | 특정 프로필 정보를 가져오며, 소유권 여부를 검증합니다. | | `/launcher/profile/remove` | POST | 프로필 삭제를 처리하며, 세션 기반 보호를 적용합니다. | ## 사용 설명서 (Usage Guide) ### 1. 사전 준비 - **PostgreSQL 서버**: 버전 13 이상을 권장합니다. - **데이터베이스 생성**: `spt`라는 이름의 데이터베이스를 생성하십시오. - **유저 권한**: `configs.jsonc`에 설정된 계정이 해당 DB에 테이블 생성 권한이 있어야 합니다. ### 2. 설정 (`configs.jsonc`) `user/mods/PersonalAuthMod/configs.jsonc` 파일을 수정하여 DB 정보를 입력합니다. ```jsonc { "db_url": "10.0.1.101", // DB 호스트 주소 "db_port": 5432, // 포트 "db_user": "spt", // 계정명 "db_password": "...", // 비밀번호 "db_name": "spt" // 데이터베이스 이름 } ``` ### 3. 설치 및 빌드 ```bash # 모드 빌드 (자동으로 서버 폴더에 배포됨) dotnet build Testing/PersonalAuthMod/PersonalAuthMod.csproj -c Debug ``` ### 4. 서버 실행 `SPTarkov.Server`를 실행하면 콘솔에 다음과 같은 로그가 나타납니다: - `[PersonalAuthMod] Config loaded successfully.` - `[PersonalAuthMod] DB Manager connected.` - `[PersonalAuthMod] Register/Login patches enabled.` ## 테스트 방법 루트 디렉토리에 포함된 `test_mod.sh` 스크립트를 통해 모든 기능을 자동으로 검증할 수 있습니다. ```bash ./test_mod.sh ``` **테스트 항목:** - 신규 회원가입 - 중복 아이디 가입 차단 (Negative) - 틀린 비밀번호 로그인 차단 (Negative) - 정상 로그인 및 세션 발급 - 프로필 목록 조회 및 본인 데이터 격리 확인 ## 데이터베이스 스키마 서버 시작 시 `users`와 `sessions` 테이블이 자동으로 생성됩니다. - `users`: `username`, `password_hash`, `salt`, `edition` 등 저장 - `sessions`: `session_id`, `username`, `created_at` 등 저장 (세션 만료 지원)