v1.18.0 — 신원
첫 진입에서 "당신은 누구인가"를 한 번 정하고, 그 이름을 CLI 와 갤러리가 함께 씁니다.
지금까지 히스토리의 actor 는 git user.name 한 줄이었습니다. 한 레포를 여럿이 쓰거나 git 설정이 회사 계정으로 박혀 있으면 기록이 전부 같은 사람 것처럼 보였습니다.
쓰는 법
갤러리를 처음 열면 이름을 묻습니다. 셋 중 하나를 고르면 됩니다.
- GitHub / Google 로 계속하기 — 마켓플레이스로 이동해 로그인하고 돌아옵니다. 아바타가 함께 들어오고, 토큰 잔액과 발행이 그 계정에 묶입니다.
- 이름만 정하기 — 로그인 없이 표시할 이름만 정합니다. 오프라인에서도 갤러리는 떠야 하므로 이 길은 항상 열려 있습니다.
정한 신원은 ~/.instant/identity.json 에 있습니다(토큰이 든 credentials.json 과는 별개 파일입니다). 헤더 오른쪽 아바타를 누르면 언제든 바꿀 수 있습니다.
설계
로그인은 마켓플레이스를 경유합니다. 갤러리에 @supabase/supabase-js 를 넣지 않기 위해서입니다 — 갤러리는 런타임 서드파티 의존성이 0인 것이 원칙입니다. 브라우저를 마켓플레이스로 보내고 신원만 돌려받으므로, Supabase 리다이렉트 허용목록도 건드리지 않습니다.
돌아오는 값은 이름표이지 열쇠가 아닙니다. 세션은 마켓플레이스 도메인의 쿠키에 남고 로컬로 오지 않습니다. 위조해 봐야 이 컴퓨터의 표시 이름이 바뀔 뿐이라, 서명 대신 갤러리가 발급한 state 대조만 합니다.
남의 아바타는 이니셜입니다. github.com/<이름>.png 로 추측해 채울 수 있지만, 그러면 히스토리에 있는 모든 사람의 이름이 GitHub 으로 새어 나갑니다. 갤러리는 바깥으로 요청을 하나도 보내지 않는 로컬 도구이고, 그 성질을 아바타 그림과 바꾸지 않았습니다. 이니셜 원형의 색이 이름에서 결정되므로 사람은 충분히 구분됩니다.
함께 고친 것
CSRF 가드가 config.gallery.port 로 허용 origin 을 만들고 있어, ie gallery --port 로 다른 포트에 띄우면 갤러리의 정상 쓰기 요청이 전부 403 이 됐습니다. 이제 요청의 Host 를 기준으로 삼습니다.