Skip to content

Phase 1.5 Round 2: identity foundation + Google OAuth - #1

Merged
Okazakee merged 2 commits into
masterfrom
phase-1.5-round-2
Aug 26, 2026
Merged

Okazakee merged 2 commits into
masterfrom
phase-1.5-round-2

Conversation

@Okazakee

Copy link
Copy Markdown
Contributor

Vertical slice: hosted Google OAuth login with backend-issued sessions, explicit link confirmation, hardened session substrate.

  • atomic SHA-256(jti) refresh rotation, single TTL, per-class 401 codes (B-P1-1/2/3/5)
  • canonical lowercase usernames + collision-preflight migration (D-10)
  • nullable passwordHash, googleId/githubId unique, single-use hash-only OAuth challenges (D-5)
  • Google OAuth: local JWKS, challenge-bound nonce, LinkConfirmationRequired (D-7), same session path
  • cross-backend isolation proven (two-backend live e2e)
  • docs/roadmap/licensing truth sync (D-11 MIT)

…OAuth

Phase 1.5 Round 2 vertical slice: a user authenticates to a self-hosted
backend from the hosted PWA via Google OAuth with backend-issued sessions,
correct account-linking semantics, and safe challenge binding.

- refresh rotation: SHA-256(jti)-keyed atomic rotation (exactly-one-winner
  under concurrency), TTL from JWT_REFRESH_EXPIRES_IN, session hygiene and
  stable per-class 401 machine codes (B-P1-1/2/3/5)
- identity normalization: canonical lowercase usernames at write with
  case-collision-preflight migration (D-10)
- identity foundation: nullable passwordHash, googleId/githubId unique,
  minecraftVerified, single-use hash-only 5-min OAuth challenge table (D-5)
- Google OAuth: local JWKS verification, challenge-bound nonce, explicit
  LinkConfirmationRequired linking (D-7), same session path, capability flag
- cross-backend isolation: challenge rows per backend DB (confused-deputy
  proof), full unit/e2e matrix incl. live concurrency and isolation tests
- SPEC: D-5/D-7/D-10/D-11 adopted; seven-table schema incl. oauth_challenges;
  current-state refresh/identity sections; DELIVERED backlog markers;
  OAuth endpoint contract; Appendix A identity + MIT license truth
- README: Phase 1.5 Google OAuth shipped; OAuth endpoints in API table; MIT
- minepanel-site.json: Phase 1.5 50% with Google OAuth done (live roadmap data)
- package.json: license MIT (D-11); .env.example: JWT_REFRESH_EXPIRES_IN,
  GOOGLE_CLIENT_ID, and removed stray typescript-language-server devDep
@Okazakee
Okazakee merged commit 8abe560 into master Aug 26, 2026
5 checks passed
@Okazakee
Okazakee deleted the phase-1.5-round-2 branch August 26, 2026 01:07
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