Skip to content

Offer the remote server when Apple refuses before the password - #249

Merged
parawanderer merged 1 commit into
mainfrom
fix/248-refused-before-the-password
Oct 12, 2026
Merged

parawanderer merged 1 commit into
mainfrom
fix/248-refused-before-the-password

Conversation

@parawanderer

Copy link
Copy Markdown
Owner

Fixes the app side of #248. Grand Slam refused the SRP init step (no password sent) on a phone with local Anisette READY. The screen showed Email verification failed: … verbatim, no remote-server button appeared, and Apple's ec was not logged.

  • Move the FindMy.py pin to 00fd962 (Say which SRP step Grand Slam refused, and keep its ec FindMy.py#7) in all four places, so the refusal arrives as GrandSlamRefusedError with step and ec.
  • classifyLoginFailure: an init refusal maps to the new REASON_REFUSED_BEFORE_PASSWORD. A complete refusal (wrong password) stays REASON_UNKNOWN.
  • AppleLoginActivity: new sentence login_failed_refused_before_password (10 locales), with Apple's text and ec appended. The remote-server button is shown for this reason as well as APPLE_DECLINED.
  • Tests: two bridge tests in test_main.py; ForceRemoteAnisetteAfterDeclineTest.aRefusalBeforeThePasswordOffersTheRemoteServer checks the button and the exact message.

Verified locally: Chaquopy bridge tests (314 passed, 2 new), pyright on main.py, add_strings.py --check. Not built or run locally: Java compile, JVM suite, emulator suite; CI covers those.

The pin is the PR branch commit. If FindMy.py#7 merges with a merge commit, 00fd962 stays reachable; if squashed, the pin has to move to the squash commit.

Drafted by Claude Code

🤖 Generated with Claude Code

Issue #248: Grand Slam refused the SRP init step, which carries no
password, on a phone whose local Anisette was READY. The app showed
"Email verification failed: ..." verbatim, offered no way to the remote
Anisette server (the field hides when local works, and Settings is
behind the sign-in), and the log lacked Apple's ec.

Moves FindMy.py to parawanderer/FindMy.py#7, which raises
GrandSlamRefusedError carrying the step and ec. classifyLoginFailure maps
an init refusal to REASON_REFUSED_BEFORE_PASSWORD; a wrong password, refused
at complete, stays UNKNOWN. The login screen gives that reason its own
sentence with Apple's text appended, and shows the remote-server button
for it as it does for APPLE_DECLINED.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@parawanderer
parawanderer deployed to Android Build October 12, 2026 19:42 — with GitHub Actions Active
@parawanderer
parawanderer deployed to Android Build October 12, 2026 19:42 — with GitHub Actions Active
@parawanderer
parawanderer merged commit f38a12d into main Oct 12, 2026
9 checks passed
@parawanderer
parawanderer deleted the fix/248-refused-before-the-password branch October 12, 2026 20:02

This branch was successfully deployed

1 active deployment
Android Build — 5f1a00a0 Deployed Oct 12, 2026 by parawanderer via build #312
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