diff --git a/docs/design/0002-game-account-management.md b/docs/design/0002-game-account-management.md index 76d9487b..04f45df8 100644 --- a/docs/design/0002-game-account-management.md +++ b/docs/design/0002-game-account-management.md @@ -244,8 +244,37 @@ anything, including scripts. would only create disagreement between two existing ones. - **One account per user per server.** Unique on `(userId, serverSlug)`. +## Status + +| Phase | State | +|---|---| +| 1. provider-svc `/internal/v1/*` | **DONE, deployed.** mmo-portal `dd31f44`. Verified live against the real TrinityCore and EQEmu auth DBs; 401 without a token; router not mounted at all when `INTERNAL_API_TOKEN` is unset. | +| 2. Drop read path | **DONE.** `GameAccountLink`, `account.get.ts`, `GameAccountPanel.vue`. | +| 3. Drop write path | **DONE.** `account.post.ts` — provision + password change. | +| 4. Admin dashboard | not started | +| 5. `/account/settings` cross-game view | not started — the panel component already takes a `serverId`, so it is a loop over links, not new UI | +| 6. Retire mmo-portal account routes | not started, and deliberately last | + +### Things learned building 1-3, which the doc had wrong + +- **`slug != key` for WoW.** Drop names the game, the provider names the + emulator. Now an explicit three-entry map in `gameAccountProvider.ts`, + asserted by mmo-portal's tests. +- **`daoc` is unconfigured on the live portal.** The stack sets `TC_*` and + `EQEMU_*` but no `DAOC_AUTH_DB_HOST`, so OpenDAoC reports + `configured=false` and its panel correctly renders nothing. Real gap, not + a bug. +- **Prisma here uses the multi-file schema.** `prisma generate --schema + prisma/schema.prisma` silently produces a client with NO models; it must + point at the `prisma/` FOLDER. +- **The fork's build needs real git history.** `postinstall` runs `git + rev-parse --short HEAD`, so a `git archive` tarball fails the build. Clone + (from Forgejo on .88) rather than export. + ## Open - **Does `LinkedAuthMec.credentials` carry the Authentik `sub`?** Determines whether the existing mmo-portal links migrate by join or by one-time - re-confirmation. Verify before building phase 2; do not assume. + re-confirmation. Not yet answered — phases 2 and 3 were built without + depending on it, so an empty panel is the current, correct behaviour for a + user whose account predates the bridge. diff --git a/server/components/GameAccountPanel.vue b/server/components/GameAccountPanel.vue index 95623f4d..25220995 100644 --- a/server/components/GameAccountPanel.vue +++ b/server/components/GameAccountPanel.vue @@ -91,13 +91,26 @@

{{ $t("community.gameAccount.noAccount") }}

- +
+ + +
+

+ {{ $t("community.gameAccount.recoverHint") }} +

-
- - diff --git a/server/pages/account/settings.vue b/server/pages/account/settings.vue index 0ada1d8a..09915270 100644 --- a/server/pages/account/settings.vue +++ b/server/pages/account/settings.vue @@ -1 +1,68 @@ - + + + diff --git a/server/pages/community/servers/[id]/index.vue b/server/pages/community/servers/[id]/index.vue index ec1e28e3..74290243 100644 --- a/server/pages/community/servers/[id]/index.vue +++ b/server/pages/community/servers/[id]/index.vue @@ -104,6 +104,12 @@ (see GameAccountPanel.vue). Placed after "how to join" on purpose: the account is the thing you need BEFORE the join instructions are any use. --> + + {{ $t("community.gameAccount.manageAll") }} +
diff --git a/server/pages/user/[id]/index.vue b/server/pages/user/[id]/index.vue index 74855a10..14b6be24 100644 --- a/server/pages/user/[id]/index.vue +++ b/server/pages/user/[id]/index.vue @@ -1,10 +1,14 @@