Actions
업무 #391
진행중
JL
JL
Add admin HTTP server with dev console UI (port 9090)
업무 #391:
Add admin HTTP server with dev console UI (port 9090)
설명
목표¶
포팅 완료된 gRPC 서비스를 브라우저에서 직접 테스트할 수 있는 개발자 콘솔 UI를 구현한다.
범위¶
-
axum의존성 추가 -
src/config.rs—admin_port설정 추가 (기본값 9090) -
src/admin/mod.rs— axum HTTP 서버 + REST API + 임베디드 HTML UI -
src/lib.rs,src/main.rs— admin 서버 등록 및 병렬 실행
REST API 엔드포인트¶
| Method | Path | 설명 |
|---|---|---|
| GET | /api/auth/keypair | secp256k1 키페어 생성 |
| POST | /api/auth/challenge | 로그인 챌린지 발급 |
| POST | /api/dev/sign | 챌린지 서명 (dev helper) |
| POST | /api/auth/verify | 서명 검증 + JWT 발급 |
| GET | /api/users/:wallet | 사용자 프로필 조회 |
| GET | /api/nodes | 노드 목록 |
| GET | /api/nodes/:id | 노드 상세 |
| POST | /api/nodes/challenge | 노드 챌린지 발급 |
| POST | /api/nodes/register | 노드 등록 |
| POST | /api/nodes/:id/heartbeat | 하트비트 (JWT 필요) |
| DELETE | /api/nodes/:id | 노드 삭제 (JWT 필요) |
| GET | /api/wallets/:wallet/receipts | 수익 영수증 (JWT 필요) |
| GET | /api/wallets/:wallet/earnings | 수익 요약 (JWT 필요) |
UI 기능¶
- 서비스별 탭 (Auth / User / Node / Wallet)
- 엔드포인트별 입력 카드 + 응답 JSON 패널
- 자동 채우기: Keypair → Challenge → Sign → Verify 순서 흐름
- JWT 헤더 표시 및 저장
DoD¶
-
cargo build통과 - port 9090에서 UI 접근 가능
- 모든 API 엔드포인트 정상 동작
- 브라우저에서 전체 Auth 흐름 테스트 가능
JL James Lee이(가) 6달 전에 변경
- 상태을(를) 신규에서 해결(으)로 변경되었습니다.
구현 완료 — commit:server|47de6a4¶
변경 파일¶
| 파일 | 내용 |
|---|---|
Cargo.toml |
axum = "0.8" 의존성 추가 |
src/config.rs |
admin_port 필드 추가 (ADMIN_PORT 환경변수, 기본 9090) |
src/admin/mod.rs |
axum HTTP 서버 + 13개 REST API + 임베디드 HTML+JS UI |
src/server/mod.rs |
run_with_state(Arc<AppState>) 추출 — AppState 공유를 위한 리팩터링 |
src/lib.rs |
pub mod admin 추가 |
src/main.rs |
단일 AppState 빌드 후 admin 서버를 tokio::spawn으로 병렬 실행 |
REST API 엔드포인트 (모두 동작 확인)¶
| Method | Path | 비고 |
|---|---|---|
| GET | /api/auth/keypair |
키페어 생성 |
| POST | /api/auth/challenge |
챌린지 발급 |
| POST | /api/dev/sign |
서버사이드 서명 (dev helper) |
| POST | /api/auth/verify |
JWT 발급 |
| GET | /api/users/:wallet |
사용자 프로필 |
| GET | /api/nodes |
노드 목록 (필터/페이징) |
| GET | /api/nodes/:id |
노드 상세 |
| POST | /api/nodes/challenge |
노드 챌린지 |
| POST | /api/nodes/register |
노드 등록 + Node JWT 발급 |
| POST | /api/nodes/:id/heartbeat |
하트비트 (JWT 필요) |
| DELETE | /api/nodes/:id |
노드 삭제 (JWT 필요) |
| GET | /api/wallets/:wallet/receipts |
영수증 목록 (JWT 필요) |
| GET | /api/wallets/:wallet/earnings |
수익 요약 (JWT 필요) |
UI 기능¶
- 서비스별 탭 (Auth / User / Node / Wallet)
- 자동 채우기: Keypair → Challenge → Sign → Verify 순서대로 입력값 전파
- Quick Sign 버튼: Node 탭에서 저장된 private key로 노드 챌린지 즉시 서명
- JWT 헤더 표시 (App JWT + Node JWT 별도 저장)
- 응답 JSON 구문 강조 + 응답 시간 표시
DoD 체크¶
-
cargo build통과 (경고 0) - port 9090에서 UI 접근 가능
- 모든 API 엔드포인트 정상 동작 (curl 테스트 완료)
- 전체 Auth 흐름 (keypair → challenge → sign → verify → GetUser) 확인
Actions