Skip to content

Forever ownership checks, character details and share links - #35

Merged
Lucrona merged 4 commits into
wow-playedfrom
feat/forever-account-verify
Nov 10, 2026
Merged

Lucrona merged 4 commits into
wow-playedfrom
feat/forever-account-verify

Conversation

@Lucrona

@Lucrona Lucrona commented Nov 10, 2026 •

Copy link
Copy Markdown
Owner

What changed

Forever ownership

The account check reads separate name/surname fields and matches existing realmless rows by full name, Blizzard id or exact GUID when both sources supply one. Ambiguous/conflicting identities stay unverified. Forever ownership checks cannot rename/merge/delete characters, change UUIDs or /played, record/reduce hours, or replay quarantine. Retail reconciliation remains Retail-only.

Forever character popup

A read-only app-token probe found real Forever equipment, combat statistics, character renders/avatars, talent specializations, professions, achievements/statistics and item icons. All 25 distinct equipped item-media ids returned 200 in static-forever-us. The tested raid resources had no progress and neither character had a guild. Probe details and field shapes are documented in docs/forever-character-details.md.

Clicking a shown Forever character now opens the existing popup when BNET_FOREVER_LOOKUP is on. It displays actual gear/icons/quality/item levels, ranged weapons, the character render (or avatar), core combat stats, dominant active specialization, professions and real PvP activity. Missing sections and empty gear slots are omitted. View on Armory uses the verified official realmless Forever URL; Retail item-tooltip lookup remains disabled for Forever. Public enrichment is not ownership proof; an unverified Forever row can have public details without getting a tick.

Responses use the existing 12-hour character cache/lock/stale-refresh behaviour. Forever item-media caching is version-scoped, avoiding Retail item-id collisions. This refresh writes only disposable details/image caches, not character identities, hours or ownership.

Stable sharing for both versions

  • /u/<handle>/wow/retail/<Fraglink character UUID>
  • /u/<handle>/wow/forever/<Fraglink character UUID>

Opening updates the URL and adds a small Share control (copies the link, briefly shows Link copied). Direct visits open the normal profile with the popup; closing restores the profile/gallery URL. Back/forward are supported. Shared entry first passes an anonymous/public visibility check, even for the owner: private, hidden, wrong-version and unknown ids leave the normal profile open without a character error.

Server-rendered Open Graph tags include character name, level/class, opted-in guild and a cached render (generic site image if uncached). Crawlers do not trigger Blizzard refreshes. Hidden/private/unknown ids get generic profile tags. Detail/image routes enforce Show on profile, hidden characters/games, hide-all and profile privacy. Guild text stays behind Show guild; images are no-store. Share pages remain noindex.

Gates and untested account call

Both BNET_FOREVER_ACCOUNT and BNET_FOREVER_LOOKUP remain off by default. No live flags/database rows changed, no merge or deployment.

Public character/subresource calls were probed. The user-token account endpoint is still untested against a real linked account: assumed US /profile/user/wow?namespace=profile-forever-us. Partial/unknown schemas and HTTP errors, including 404, leave its cache alone. A default-off ACCOUNT_PROBE also requires ACCOUNT_PROBE_USER to match the intended Fraglink UUID. With ACCOUNT off it only GETs/parses/logs limited metadata, with no Forever writes. Ordinary Retail OAuth sync still runs. Tokens/raw bodies are never persisted or logged; the existing 15-minute memory stash is consumed once by the verification page.

Migration

Only migration 0062: nullable GUID/faction columns on bnet_characters. No backfill or character/hour rewrites. No additional popup/share migration.

Validation

  • cargo fmt --all --check: passed.
  • Core/sync/server all-target clippy -D warnings: passed.
  • Complete core/sync/server serial suite against fresh box-only Postgres: 336 passed, 0 failed, 3 ignored.
  • UI tests: 12 passed, including stable paths, history/close behaviour, empty-section hiding, Forever equipment/stats and Retail regression.
  • Server tests cover real probed response shapes (anonymised fixture), default-off gate, public/private/hidden/wrong-version visibility, Show on profile/None/hide-all, guild redaction, OG tags and preserved seconds, alongside ownership UUID/hour/history invariants.
  • Local full-workspace desktop dependencies are unavailable; repository CI runs separately. The new head needs its own Linux and Windows CI result.
  • Mock previews are prepared on the box in /workspace/pr35-preview/ (Retail and both Forever characters). They are rendered mocks, not a signed-in live-site QA claim.

Release/test plan — review only

  1. Wait for Lucrona's explicit release, review and green CI. Take /run/lock/fraglink-deploy.lock; create/verify backups under /var/backups/fraglink/; follow the private runbook and scripts/deploy.sh/cargo zigbuild. Deploy with ACCOUNT and LOOKUP off.
  2. With diagnostic approval, enable only the user-scoped read-only ACCOUNT_PROBE. She re-links and completes verification. Compare the complete returned account listing with the expected full names/ids, without saving tokens/raw bodies; then disable probe/clear target.
  3. Report results and get explicit OK before enabling ACCOUNT. She re-links again because the one-time memory token was consumed. Compare UUIDs, seconds, totals, snapshots, histories, quarantine and ledgers exactly; stop on any mismatch.
  4. LOOKUP is a separate default-off switch: enable Forever public details only after approval. Check the shown-character popup, cached media and public share links; hidden/private links must stay generic. No automatic data repair, merges or deletions.

Further details: docs/forever-account-verification.md and docs/forever-character-details.md.

Share / Armory footer follow-up

Share and View on Armory stay on one aligned footer row for Retail and Forever. Share continues copying the stable Fraglink link; it does not invoke a native share sheet.

Verified official URLs on 10 November 2026 (AEDT):

Neither URL redirected. This verifies actual character-specific pages, not only a generic HTTP 200 shell. Evidence: /workspace/pr35-preview/armory-proof.json and the two armory-*.html files on the review box. Refreshed static mock images: retail.png, forever.png, forever-paladin.png in the same directory.

@Lucrona Lucrona changed the title Verify Forever ownership without changing character hours Forever ownership checks, character details and share links Nov 10, 2026
@Lucrona
Lucrona merged commit c7e5247 into wow-played Nov 10, 2026
2 checks passed
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