프로젝트

일반

사용자정보

Actions

이슈 #436

진행중
JL HP

[Go backport] Admin Dev Console GoTrue UI — Phase 3

이슈 #436: [Go backport] Admin Dev Console GoTrue UI — Phase 3

James Lee이(가) 약 7시간 전에 추가함.

상태:
해결
우선순위:
보통
담당자:
목표버전:
시작일:
2026/05/13
완료일:
2026/05/13 (약 6달 지연)
진척도:

0%

추정시간:

설명

배경

GoTrue 인증 전환 후속 작업. 현재 Admin Dev Console (:9090) 은 SAML/Basic Auth 로만 접근 가능하고, GoTrue 사용자 토큰을 테스트하려면 외부에서 curl/Postman 으로 /signup / /token?grant_type=password 을 직접 호출해 access_token 을 얻어 paste 해야 한다. 매번 번거로움.

Rust 측 #424 를 Go 원본으로 백포트해 Admin 화면에서 직접 GoTrue 사용자를 생성/로그인하고 JWT 를 자동 저장한다.

작업 범위

Admin server

  • internal/admin/server.go 에 GoTrue proxy 엔드포인트 추가:
    • POST /api/auth/gotrue/signup → GoTrue /signup 에 그대로 forward
    • POST /api/auth/gotrue/login → GoTrue /token?grant_type=password 에 forward
  • Audit 로그 (access_logs source="admin"):
    • signup / login 의 성공·실패 모두 기록
    • Fields: email, ip, user_id(성공 시), error message(실패 시)
    • Client IP 우선순위: CF-Connecting-IP > X-Real-IP > X-Forwarded-For 첫 항목 > r.RemoteAddr

Admin UI (internal/admin/pages.go)

  • Auth 섹션 에 카드 2개 추가:
    • Sign Up (email/password input + Sign Up 버튼). autoconfirm=true 일 때 즉시 세션 반환 → access_token 자동 저장
    • Log In (email/password input + Log In 버튼). 응답의 access_token 자동 저장
  • 기존 "Paste JWT (manual)" 카드 동일하게 유지

Config

  • cfg.GoTrueURL (env GOTRUE_URL / GOTRUE_INTERNAL_URL, 기본 http://localhost:9011)
  • Admin HTTP 클라이언트 (net/http) 공유 instance

제외 (Phase 4+ 이슈 예정)

  • FriendsService 테이블 user_id 전환
  • nodes.owner_wallet_address 제거
  • virtual_node_* 스키마 user_id 직접 전환

DoD

  • make build, make test 통과
  • Admin UI Auth 탭에서 Sign Up 클릭 시 즉시 JWT 자동 저장이 일어나도록 구현(autoconfirm=true 기준)
  • Log In 클릭 시 JWT 자동 저장
  • signup/login 성공·실패 모두 audit 로그에 기록 (access_logs source="admin", path="/api/auth/gotrue/{signup,login}")
  • Client IP 정확 주소로 기록 (CF/X-Real-IP/X-Forwarded-For 우선순위)

관련 이슈

  • 이전 phase: #434(Phase 1, 해결), #435(Phase 2, 해결)
  • Rust 원본: #424
  • DB 스키마 변경 없음 — #254 에는 refs 부착하지 않음

연결된 일감 3 (3 건 진행 중 — 모두 미완료)

다음 일감과 관련됨: 이슈 #424: Dev Console 에 GoTrue Sign Up / Log In 통합 — 테스트 환경 간소화해결James Lee2026/04/27

Actions
다음 일감을 우선 진행: 이슈 #435: [Go backport] AGX 회계 user_id 종속 전환 — Phase 2해결Henry Park2026/05/122026/05/12

Actions
다음에 진행할 일감: 이슈 #437: [Go backport] FriendsService user_id 전환 — Phase 4해결Henry Park2026/05/142026/05/14

Actions

JL James Lee이(가) 6달 전에 변경 Actions #1

  • 완료일을(를) 2026/05/13(으)로 지정되었습니다.
  • 시작일을(를) 2026/05/11에서 2026/05/13(으)로 변경되었습니다.
  • 다음 일감을 우선 진행:에 이슈 #435: [Go backport] AGX 회계 user_id 종속 전환 — Phase 2이(가) 추가되었습니다.

JL James Lee이(가) 6달 전에 변경 Actions #2

  • 다음 일감과 관련됨:에 이슈 #424: Dev Console 에 GoTrue Sign Up / Log In 통합 — 테스트 환경 간소화이(가) 추가되었습니다.

JL James Lee이(가) 6달 전에 변경 Actions #3

  • 상태을(를) 신규에서 해결(으)로 변경되었습니다.

Phase 3 구현 완료

commit:server|cf27194

적용된 변경

Config

  • Config.GoTrueURL string 필드 추가. env 우선순위: GOTRUE_INTERNAL_URL > GOTRUE_URL > 기본 http://localhost:9011. settings.json 영속화 경로도 표기 (gotrueUrl)

Admin server

  • internal/admin/server.go:
    • Server 구조체에 goTrueURL string + httpClient *http.Client (10s timeout) 추가
    • 라우트 등록 (모두 requireAuth 하위):
      • POST /admin/api/auth/gotrue/signup → GoTrue /signup
      • POST /admin/api/auth/gotrue/login → GoTrue /token?grant_type=password
    • GET /admin/auth 페이지 라우팅
    • clientIP 우선순위 개선: CF-Connecting-IP > X-Real-IP > X-Forwarded-For 첫 항목 > r.RemoteAddr. Cloudflare 프론트 환경에서 감상되지 않은 원출 IP 확보.

Admin gotrue.go (신규)

  • proxyGoTrue(action, targetPath) 공통 포워딩기: 64KB 제한 그대로 JSON forward, GoTrue 응답을 status + Content-Type 유지 그대로 패스스루
  • markAdminAction("gotrue.signup" / "gotrue.login") 로 기존 admin audit log 경로에 명시적 action 채움: 성공 시 user_id, 실패 시 시원스트림 에러 메시지(error_description/msg/message/error 순서로 추출). email + IP 동반
  • extractGoTrueUserID, summariseGoTrueError 헬퍼

Admin UI (pages.go)

  • 네비게이션에 Auth 탭 추가
  • tmplAuth 페이지: 3개 카드(Sign Up / Log In / Paste JWT manual) + 공용 JWT bar(상단 고정, copy/clear 버튼, user_id 표시)
  • localStorage('alphea.adminJwt' & 'alphea.adminUserId') 로 세션 내 JWT 자동 복구
  • JavaScript 헬퍼
    • gtPickToken 가 payload.access_token (login) 또는 payload.session.access_token (signup) 둘 다 처리
    • gtPickUserID 으로 GoTrue user id 추출
    • 성공/실패 UX 메시지 색상 구분(error_description / msg / error 순서로 점진적 텍스트)

테스트 (gotrue_test.go 신규)

  • TestProxyGoTrueForwardsSignup: body 그대로 forward + 해결된 user_id 가 admin action log 에 기록되는지 검증
  • TestProxyGoTrueLoginPassesGrantType: login 경로가 GoTrue /token?grant_type=password 로 라우팅되는지 검증
  • TestProxyGoTrueRejectsBlankCredentials: 빈 자격 증명 시 upstream 호출 없이 400 반환
  • TestClientIPPrefersCloudflareHeader: 새 IP 우선순위 검증

문서

  • CLAUDE.md API Endpoints 표에 /admin/auth 및 /admin/api/auth/gotrue/{signup,login} 추가

검증

  • go build ./... PASS
  • go vet ./... PASS
  • go test ./... PASS (admin 새 테스트 4개 포함 전체 통과)

DoD 체크

  • make build, make test 통과
  • Admin UI Auth 탭에서 Sign Up 클릭 시 즉시 JWT 자동 저장(autoconfirm=true 기준)
  • Log In 클릭 시 JWT 자동 저장
  • signup/login 성공·실패 모두 access_logs 에 source="admin", 경로="/admin/api/auth/gotrue/{signup,login}", 세부(action / email / ip / status / user_id|error)가 기록 (기존 admin audit log 경로 재사용)
  • CF-Connecting-IP 우선순위로 IP 기록

운영 적용

git pull
docker compose -f alphea-rpc/docker-compose.yml up -d --build

Auth 탭 접속 → Sign Up 수행 → JWT bar가 표시됨. 다른 탭의 RPC 테스트 도구는 localStorage.alphea.adminJwt 를 가져다 Authorization: Bearer ... 헤더로 쓰면 됨.

후속 (별도 이슈)

  • FriendsService 테이블 user_id 전환 (friends/referral_claims/rewards_log)
  • nodes.owner_wallet_address 제거
  • virtual_node_* user_id 직접 키 전환

JL James Lee이(가) 6달 전에 변경 Actions #4

  • 다음에 진행할 일감:에 이슈 #437: [Go backport] FriendsService user_id 전환 — Phase 4이(가) 추가되었습니다.

CP Chris Park이(가) 6달 전에 변경 Actions #5

  • 담당자을(를) James Lee에서 Henry Park(으)로 변경되었습니다.
Actions

내보내기 PDF Atom