Commit Graph
49 Commits
Author SHA1 Message Date
lobo 7dc2fb613e feat(account): let users delete their account
Build, Test & Push Auth Service / quality-check (push) Successful in 32s
Build, Test & Push Auth Service / docker (push) Successful in 1m23s
DELETE /api/users/me with the password sets users.deleted_at, ends all logins and frees the Steam ID. A nightly job removes users flagged 30 days ago, Core first, and prunes Core orphans. Dry run by default.
2026-09-27 11:46:22 +02:00
lobo a1763addce feat(version): answer the build commit and time
Build, Test & Push Auth Service / quality-check (push) Successful in 31s
Build, Test & Push Auth Service / docker (push) Successful in 1m21s
GET /api/version is public. CI passes GIT_SHA and BUILD_TIME as Docker build args; a local build answers dev.
2026-09-27 10:27:01 +02:00
lobo 4ec47f1b2c feat(profile): let users share stat groups
Build, Test & Push Auth Service / quality-check (push) Successful in 30s
Build, Test & Push Auth Service / docker (push) Successful in 1m24s
Store the groups in user_settings.profile_stats and send them in the
profile ticket, so Core shows only these on the public profile.
2026-09-27 07:16:10 +02:00
lobo 4b2acef381 feat(steam): verify the Steam ID with Sign in through Steam
Build, Test & Push Auth Service / quality-check (push) Successful in 34s
Build, Test & Push Auth Service / docker (push) Successful in 1m31s
The Steam ID is no longer typed in at registration or in the settings.
A logged-in user links it through Steam OpenID 2.0: Auth checks the
answer with Steam (check_authentication) and stores the ID as verified
(V11 steam_id_verified). A one-time state plus a binding cookie tie the
callback to the browser that started the link, so a foreign Steam login
link cannot move someone's Steam ID into another account.

Typed-in IDs from before stay unverified; a verified link from another
account takes them away. DELETE /api/users/steam-link unlinks.
2026-09-26 11:20:04 +02:00
lobo e3433799f1 docs(readme): add the architecture overview 2026-09-26 07:37:44 +02:00
lobo 930e08e6dd feat(login): cookie session with rotating refresh token
Build, Test & Push Auth Service / quality-check (push) Successful in 30s
Build, Test & Push Auth Service / docker (push) Successful in 1m23s
The login token moves out of localStorage into an HttpOnly cookie
(15 min), so a script on the page can no longer read it. A random
refresh token (30 days, sliding) renews it; only its SHA-256 is
stored. Each refresh replaces the token, and a replaced token that
comes back revokes every token of that login.

Unsafe requests need an X-TBP-Client or Authorization header, and
CORS allows only the exact frontend origin. A missing or expired
token now answers 401 instead of 403, so the frontend can refresh.
2026-09-25 13:45:04 +02:00
lobo 600b0b143f feat(login): publish verify key as JWKS
Build, Test & Push Auth Service / quality-check (push) Successful in 26s
Build, Test & Push Auth Service / docker (push) Successful in 1m21s
Auth serves its Ed25519 public key at GET /.well-known/jwks.json, so
Core can find the key by the token kid. Startup fails on a blank
JWT_KID, because compose turns an unset value into "" and Core finds
keys only by kid.
2026-09-25 11:01:28 +02:00
lobo 3a48ce0ff1 feat(auth): rate limit registration, atomic login limit
10 failed registrations per IP block it for 15 minutes (429 TOO_MANY_ATTEMPTS with Retry-After). Login and registration now take an attempt before the check, so a burst of parallel requests cannot pass the limit.
2026-09-25 09:06:30 +02:00
lobo c63b7e6aaa test: generate the JWT test keys, drop application-dev.yml
Build, Test & Push Auth Service / quality-check (push) Successful in 28s
Build, Test & Push Auth Service / docker (push) Successful in 1m20s
The dev config held real keys. Local dev config now lives outside the repo; integration tests create a fresh Ed25519 keypair per run.
2026-09-25 08:37:55 +02:00
lobo 9df7389fab docs: rewrite the readme for the public showcase
Also ignore local secrets and stop tracking the generated effective-pom.
2026-09-25 08:22:56 +02:00
lobo 508e628d86 feat(user): pick or turn off the dashboard banner 2026-09-24 15:35:48 +02:00
lobo 1d88c30d48 feat(user): synced appearance settings 2026-09-24 15:06:16 +02:00
lobo 973b980e05 feat(profile): opt-in public profile with a ticket for Core
user_settings.public_profile (off by default, needs a display name).
GET /api/public/profiles/{displayName} answers only for enabled users with a
public profile and returns a 10-minute EdDSA ticket for Core. A token with a
typ claim is no login, so the ticket cannot be used as one.
2026-09-24 14:18:32 +02:00
lobo 07ccb489ec test: share one Postgres container across test classes
The per-class container was stopped under the Spring context that the next
integration test class reused, so health answered 503 there.
2026-09-24 14:18:32 +02:00
lobo 05e87b4396 feat(user): optional display name (player tag)
users.display_name (V6), 3-24 letters, digits, space, _ . -, unique ignoring case. Set in settings (409 DISPLAY_NAME_ALREADY_IN_USE, also for the DB constraint race) and optionally at registration. Returned by /api/users/me.
2026-09-24 10:39:04 +02:00
lobo 4ebca75be4 fix(cors): expose Retry-After so the login page can show the block time 2026-09-24 10:29:57 +02:00
lobo f3b6d67b5b fix(security): hide health details and close Prometheus to the public
/actuator/health showed database and disk details to anyone, and /actuator/prometheus was open. Only health stays public, as plain UP/DOWN for the Docker health check.
2026-09-24 10:26:53 +02:00
lobo da7c3ed069 fix(login): same error for every failed login, block disabled users, rate limit
Unknown email, wrong password and disabled account now all return 401 INVALID_CREDENTIALS; unknown emails still run bcrypt against a dummy hash so timing does not leak them. After 5 failures per email or 20 per client IP, login returns 429 with Retry-After for 15 minutes. LoginRequest is now validated.
2026-09-24 10:22:30 +02:00
lobo 3b6acb2b34 fix(db): remove the seeded test user from all environments
V1 inserted test@example.com / password123 everywhere, including prod. V5 deletes that row only when email and seed hash both match.
2026-09-24 10:14:58 +02:00
lobo 0f8c724556 chore(deps): update Spring Boot to 4.1.1 and ArchUnit to 1.5.0 2026-09-24 08:56:45 +02:00
lobo 0e830aca72 fix(user): send Steam ID as string and refresh token on settings save
JavaScript rounds 17-digit Steam IDs, so 76561198000000001 was stored as
76561198005679790. Steam IDs are now JSON strings (17 digits, numbers
rejected), and null means "no Steam ID" instead of 0 (V4 migrates old rows).

PUT /api/users/settings returns a new token, because Core reads the Steam ID
from the token. A Steam ID owned by another user returns 409.
2026-09-24 08:51:01 +02:00
lobo 89fdc7841b Merge pull request 'Changed from JWT token to public/privat key' (#2) from feat/jwt-eddsa into main
Reviewed-on: #2
2026-05-12 08:58:57 +02:00
lobo 2dc3cda51c Support now null as not initialized for SteamId 2026-04-19 14:59:27 +02:00
lobo 2d4fb5bef7 Support now null as not initialized for SteamId 2026-04-19 14:35:02 +02:00
lobo c7ec8c2f7c Added new db migration to set default SteamId to 2026-04-19 14:17:49 +02:00
lobo 2a5839b736 Refactor package structure: domain -> modules
Move domain packages into a new modules.* hierarchy and rename controller packages to api.* across login, registration, and user modules. Update package declarations and imports (including shared.api DTOs and JwtService -> modules login TokenGenerator), adjust tests and persistence/mapper paths accordingly, and apply minor formatting fixes (missing EOF newlines). This reorganizes the project to better separate API surface and module boundaries.
2026-04-19 12:50:01 +02:00
lobo 3fcba271a6 Merge pull request 'feature-cleanup' (#1) from feature-cleanup into main
Reviewed-on: #1
2026-04-18 11:52:46 +02:00
lobo 37b0fcdd21 Fixed tests 2026-04-18 11:49:09 +02:00
lobo f90b674ed2 Fixed tests 2026-04-18 11:47:58 +02:00
lobo 20402eb7c4 Added new tests fixed some problem 2026-04-18 11:28:06 +02:00
lobo 14a4ccfb87 Fixed tests 2026-04-11 12:32:32 +02:00
lobo 03d5a011ae Added lots of new stuff
- extended the jwt and put userid into it
- completed update settings
- added settings also in me call
2026-04-11 12:07:27 +02:00
lobo 6e194b9c9a Added transactional 2026-04-06 09:57:39 +02:00
lobo 954669d1a4 changed default profile to prod 2026-04-06 09:35:31 +02:00
lobo afbe950ba4 Finished registration Process and added tests 2026-04-06 09:12:45 +02:00
lobo 5dcdf7bd61 Started with:
- Registration logic for new players
- Extended User table with more information
2026-04-04 17:11:13 +02:00
lobo ad30de4190 Added tests for all services and controller 2026-04-04 16:01:05 +02:00
lobo c028e8d382 Added arch unit tests 2026-04-04 11:22:26 +02:00
lobo 7ba38fbbce Fixed problem with token response 2026-04-04 10:55:39 +02:00
lobo 5dc3632687 Cleaned a little bit up 2026-04-04 10:43:18 +02:00
lobo afd71b82be Implemented user service 2026-04-04 09:58:09 +02:00
lobo 3ee636253b Disabled test for now until db config is ready for testing 2026-04-03 12:32:40 +02:00
lobo a94b2bf9e7 Added jwt token validation and api endpoint versioning 2026-04-03 12:25:03 +02:00
lobo 161381ebe5 Cleaned up the architecture 2026-04-03 11:35:53 +02:00
lobo cc24c43ab8 Updated pipeline 2026-03-31 19:54:02 +02:00
lobo 1ce56590d1 Updated pipeline 2026-03-31 19:52:09 +02:00
lobo 132bb6bb64 Login should work now, tests are missing 2026-03-31 19:48:23 +02:00
lobo eecda99d22 Setup of springboot 2026-03-31 18:57:06 +02:00
lobo a7c9364c7a First commit 2026-03-31 18:20:40 +02:00