Repository navigation
Forever ownership checks, character details and share links - #35
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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 indocs/forever-character-details.md.Clicking a shown Forever character now opens the existing popup when
BNET_FOREVER_LOOKUPis 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_ACCOUNTandBNET_FOREVER_LOOKUPremain 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.-D warnings: passed./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
/run/lock/fraglink-deploy.lock; create/verify backups under/var/backups/fraglink/; follow the private runbook andscripts/deploy.sh/cargo zigbuild. Deploy with ACCOUNT and LOOKUP off.Further details:
docs/forever-account-verification.mdanddocs/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):
Lucrona Ashborne - Character, Blizzard id1119743in the returned HTML.Lucroner Ashborne - Character, Blizzard id1395710in the returned HTML.Neither URL redirected. This verifies actual character-specific pages, not only a generic HTTP 200 shell. Evidence:
/workspace/pr35-preview/armory-proof.jsonand the twoarmory-*.htmlfiles on the review box. Refreshed static mock images:retail.png,forever.png,forever-paladin.pngin the same directory.