Implement OAuth 2.0 login via GitHub as an alternative to email/password. Uses a provider registry pattern (internal/auth/oauth/) so adding Google or other providers later requires only a new Provider implementation. Flow: GET /v1/auth/oauth/github redirects to GitHub, callback exchanges the code for a user profile, upserts the user + team atomically, and redirects to the frontend with a JWT token. Key changes: - Migration: make password_hash nullable, add oauth_providers table - Provider registry with GitHubProvider (profile + email fallback) - CSRF state cookie with HMAC-SHA256 validation - Race-safe registration (23505 collision retries as login) - Startup validation: CP_PUBLIC_URL required when OAuth is configured Not fully tested — needs integration tests with a real GitHub OAuth app and end-to-end testing with the frontend callback page.
28 lines
814 B
Modula-2
28 lines
814 B
Modula-2
module git.omukk.dev/wrenn/sandbox
|
|
|
|
go 1.25.0
|
|
|
|
require (
|
|
connectrpc.com/connect v1.19.1
|
|
github.com/go-chi/chi/v5 v5.2.5
|
|
github.com/golang-jwt/jwt/v5 v5.3.1
|
|
github.com/google/uuid v1.6.0
|
|
github.com/gorilla/websocket v1.5.3
|
|
github.com/jackc/pgx/v5 v5.8.0
|
|
github.com/joho/godotenv v1.5.1
|
|
github.com/vishvananda/netlink v1.1.1-0.20210330154013-f5de75959ad5
|
|
github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f
|
|
golang.org/x/crypto v0.49.0
|
|
golang.org/x/oauth2 v0.36.0
|
|
golang.org/x/sys v0.42.0
|
|
google.golang.org/protobuf v1.36.11
|
|
)
|
|
|
|
require (
|
|
github.com/jackc/pgpassfile v1.0.0 // indirect
|
|
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect
|
|
github.com/jackc/puddle/v2 v2.2.2 // indirect
|
|
golang.org/x/sync v0.20.0 // indirect
|
|
golang.org/x/text v0.35.0 // indirect
|
|
)
|