feat(sso): App Links autoVerify callback + paired-host trust check #17
Reference in New Issue
Block a user
No description provided.
Delete Branch "feat/app-links"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
App side of Android App Links (M9 follow-up), layered on the M9 Part 2 native SSO callback (#16, now merged to
main). Companion PRs: website #81, docs #25. Spec:docs/android/APP_LINKS.md.What
appLinkHostGradle property (default empty) →BuildConfig.APP_LINK_HOST+manifestPlaceholders["appLinkHost"]. AndroidautoVerifyneeds a literal host, so the generic multi-tenant build leaves it empty (the placeholder falls back to the reservedrunic-gateway.invalidsentinel, making the filter inert — matches no real link, never verifies). A white-label/first-party build bakes one host with-PappLinkHost=play.myshard.com.autoVerifyhttps/mobile/callbackintent-filter beside the unchanged custom-scheme one (the permanent fallback on every build).SsoAuthManager: requests thehttpsApp Linkredirect_uriiff the baked host matches the paired shard host;matchesAppLinkCallback()enforces a paired-host trust check (callback host must equal the currently-paired base-URL host) as defense-in-depth. Both matchers feed the samecomplete()//exchangepath — no second auth path.MainActivityroutes custom-scheme and App Link callbacks identically.Tests / build
+5 JVM tests (
SsoAuthManagerTest→ 14). Built green (JDK 21,-Pksp.incremental=false::app:processDebugMainManifest :app:testDebugUnitTest); white-label-PappLinkHost=play.myshard.comverified to bake into the merged manifest, default build verified inert.Version bump is CI-driven (conventional-commit
release.yml) — no manual bump. Open QA: on-device verification (adb shell pm get-app-links) against a shard servingassetlinks.json— requires a white-label build baking that host.🤖 AI-assisted: authored with Claude Code (Opus 4.8); commits carry a
Co-Authored-By: Claudetrailer.🤖 Generated with Claude Code