- Add adb_service.dart with usb install capabilities - Add adb_service_test.dart for testing - Update project rules and phase documentation - Update milestone documents for jenkins-credential and usb-install - Add agent-task/m-usb-install/ directory with planning documents
78 lines
3.5 KiB
Markdown
78 lines
3.5 KiB
Markdown
# Milestone: Jenkins 로그인과 credential 수명주기
|
|
|
|
## 위치
|
|
|
|
- Roadmap: `agent-roadmap/ROADMAP.md`
|
|
- Phase: `agent-roadmap/phase/usable-mvp/PHASE.md`
|
|
|
|
## 목표
|
|
|
|
AppSok이 Jenkins에 접근할 수 있는 사용자인지 확인하고, 사용자별 권한으로 Jenkins API를 호출할 credential을 안전하게 저장한다. MVP에서는 사용자가 직접 token을 발급하지 않도록 Jenkins WebView 로그인 후 사용자별 API token을 자동 발급하고 Keychain에 저장한다.
|
|
|
|
## 상태
|
|
|
|
[계획]
|
|
|
|
## 승격 조건
|
|
|
|
- 없음
|
|
|
|
## 구현 잠금
|
|
|
|
- 상태: 해제
|
|
- 결정 필요: 없음
|
|
|
|
## 범위
|
|
|
|
- Jenkins base URL 저장과 WebView 로그인 진입
|
|
- WebView 로그인 세션에서 crumb와 사용자별 API token 자동 발급
|
|
- 자동 발급한 username/API token을 macOS Keychain에 저장
|
|
- 앱 시작 시 저장된 credential을 읽고 `/whoAmI` 또는 사용자 API 호출로 조용히 재검증
|
|
- credential 삭제, 재로그인, token 폐기/권한 없음/네트워크 실패 상태 구분
|
|
- macOS Keychain 저장과 로그 redaction
|
|
|
|
## 기능
|
|
|
|
### Epic: [web-login] WebView 로그인과 자동 token 발급
|
|
|
|
사용자가 Jenkins 계정으로 로그인하면 AppSok이 같은 세션에서 API token을 자동 발급해 저장한다.
|
|
|
|
- [ ] [login-webview] Jenkins 로그인 URL을 WebView로 열고 로그인 완료를 감지한다.
|
|
- [ ] [crumb-token] WebView same-origin 요청으로 crumb를 받고 사용자별 API token을 자동 발급한다.
|
|
- [ ] [keychain-store] 자동 발급한 username/API token을 `TokenStore`를 통해 macOS Keychain에 저장하고 삭제할 수 있다. 검증: mock storage 기반 unit test에서 save/read/clear가 통과한다.
|
|
- [ ] [redaction] API token이 화면 오류, debug log, test fixture에 원문으로 남지 않도록 처리한다.
|
|
|
|
### Epic: [session-restore] 로그인 상태 복원
|
|
|
|
앱을 다시 켤 때 매번 로그인하지 않고 저장된 credential을 검증해 Jenkins 접근 상태를 복원한다.
|
|
|
|
- [x] [startup-check] 앱 시작 시 Keychain credential을 읽고 Jenkins 사용자 확인 API로 조용히 검증한다.
|
|
- [x] [auth-state] 검증 성공 시 로그인 화면을 건너뛰고 build 목록으로 진입한다.
|
|
- [ ] [reauth] token 폐기, 권한 없음, Jenkins URL 변경, 네트워크 실패를 구분해 재로그인 또는 재시도 흐름으로 안내한다.
|
|
- [ ] [logout-clear] 사용자가 저장된 credential을 삭제하고 다시 로그인할 수 있다.
|
|
|
|
## 완료 리뷰
|
|
|
|
- 상태: 없음
|
|
- 요청일: 없음
|
|
- 완료 근거: 모든 기능 Task와 Task 안에 명시된 검증 충족 후 기록한다.
|
|
- 리뷰 필요:
|
|
- [ ] 사용자가 완료 결과를 확인했다
|
|
- [ ] archive 이동을 승인했다
|
|
- 리뷰 코멘트: 없음
|
|
|
|
## 범위 제외
|
|
|
|
- LDAP 직접 연동
|
|
- 공용 Jenkins API token 내장
|
|
- Auth Broker 또는 Jenkins plugin 구현
|
|
- 사용자가 Jenkins에서 API token을 직접 발급해 복사하는 흐름을 기본 UX로 삼는 방식
|
|
|
|
## 작업 컨텍스트
|
|
|
|
- 관련 경로: `lib/src/features/settings/`, `lib/src/services/token_store.dart`, `lib/src/services/jenkins_client.dart`, `macos/Runner/*.entitlements`
|
|
- 표준선(선택): 사용자별 Jenkins 권한, WebView 로그인 기반 자동 token 발급, Keychain 저장을 기본 전제로 한다.
|
|
- 표준선(선택): API token은 OAuth refresh token처럼 갱신하는 토큰이 아니라 저장 후 재검증하는 credential로 다룬다.
|
|
- 선행 작업: 제품 골격 안정화
|
|
- 후속 작업: Artifact 탐색과 다운로드
|
|
- 확인 필요: 없음
|