Skip to content

feat: multi-browser cookie source (EAC_BROWSER) + config-driven GSBER#2

Open
gr8woo wants to merge 1 commit into
mainfrom
feat/multi-browser-and-gsber-config
Open

feat: multi-browser cookie source (EAC_BROWSER) + config-driven GSBER#2
gr8woo wants to merge 1 commit into
mainfrom
feat/multi-browser-and-gsber-config

Conversation

@gr8woo

@gr8woo gr8woo commented Jun 22, 2026

Copy link
Copy Markdown

배경

두 가지 운영 마찰을 해소한다.

  1. 브라우저 고정 — auth가 Chrome 쿠키 저장소만 읽어서, Comet(Perplexity)/Brave/Edge를 주 브라우저로 쓰면 EAC 세션을 못 잡는다. (지금까지는 로컬에서 Comet 쿠키를 직접 복호화하는 별도 래퍼로 우회)
  2. GSBER=K200 하드코딩corpcard create/voucher create가 사업영역을 K200으로 박아 보낸다. 비용센터가 K300 영역(e.g. 343000, FE)인 사용자는 차/대변 사업영역 불일치로 Please input only the same 'Business Area'(ZUNIEFI_1009) 400 에러가 나서 전표를 못 만든다. (지금까지는 바이너리 문자열을 K300으로 패치한 복사본으로 우회)

변경

Auth (src/lib/auth.ts)

  • macOS 쿠키 추출을 Chrome 전용 → Chromium 계열 브라우저 레지스트리로 일반화. EAC_BROWSER로 선택 (default: chrome).

    EAC_BROWSER Browser
    chrome (default) Google Chrome
    comet Comet (Perplexity)
    brave Brave
    edge Microsoft Edge

    복호화(PBKDF2 salt=saltysalt/1003/16B → AES-128-CBC, 32B hash prefix strip)는 모든 브라우저 동일. 브라우저별로 다른 건 쿠키 경로 + Keychain 서비스명뿐.

  • 쿠키 prefix v10뿐 아니라 v11도 복호화 (기존 v10 only).

  • 재로그인 플로우(open -a 대상, 한글 안내문)를 선택 브라우저명으로 파라미터화.

GSBER (types / ops / config)

  • UserProfile에 optional gsber 추가(비용센터와 일치 주석). payload 3곳에서 GSBER: "K200"GSBER: user.gsber ?? "K200". 미설정 시 K200 fallback이라 하위호환.
  • DEFAULT_CONFIGgsber 노출 → config init이 신규 사용자에게 필드를 보여준다.

README

  • EAC_BROWSER 선택 및 gsber(비용센터 일치 규칙) 문서화.

스코프 주의 (리뷰 포인트)

  • GSBER 변경은 corpcard뿐 아니라 자기관리비/일반경비 경로(computeDefaults/createTempDoc)도 거친다. 다만 자기관리비(FI_21)는 기존에도 K200을 보냈고 서버가 비용센터로 사업영역을 덮어쓰므로 결과 동일(회귀 아님). gsber 미설정 사용자는 전 경로 K200 유지.

검증

  • bun build --compile 통과.
  • EAC_BROWSER=comet로 빌드본이 EAC_JSESSIONID 없이 Comet 쿠키에서 세션을 읽어 voucher list 정상 동작(읽기전용) 확인.
  • GSBER는 회계 시스템 오염 방지를 위해 신규 전표 생성 검증은 생략. payload 로직(user.gsber ?? "K200") + 빌드로 확인. (K300 하드코딩 패치본이 이미 프로덕션에서 동일 payload로 증명됨.)
  • 기존 tsc 에러(update-check.ts, package.json version 누락)는 본 변경과 무관하며 CI(release.yml)는 bun build만 수행.

🤖 Generated with Claude Code

Auth (auth.ts):
- Generalize macOS cookie extraction from Chrome-only to a Chromium-family
  browser registry (Chrome/Comet/Brave/Edge), selected via EAC_BROWSER
  (default: chrome). Only the cookie path and Keychain service name differ;
  crypto is identical.
- Decrypt both v10 and v11 cookie prefixes (was v10-only).
- Parameterize the re-login flow (open -a target, prompts) by browser name.

GSBER (types/ops/config):
- Add optional UserProfile.gsber (business area). ops.ts payloads now use
  `user.gsber ?? "K200"` instead of a hardcoded K200, so users on a K300
  cost center can post vouchers without the "same Business Area" rejection.
- Surface gsber in DEFAULT_CONFIG so `config init` exposes it.

README: document EAC_BROWSER selection and the gsber/cost-center match rule.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@gemini-code-assist

Copy link
Copy Markdown

Warning

You have reached your daily quota limit. Please wait up to 24 hours and I will start processing your requests again!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant