Repository navigation
Check the account and link flows against the backend, show passkey providers - #72
Merged
Merged
Conversation
…oviders The opt-in live tests now cover what the account screen and the link screen call, against a running backend: - LiveAccountTest: profile, password change, TOTP enrolment with a code computed from the otpauth URI, the second factor at login with a TOTP code and with a recovery code, step-up, new recovery codes, and passkeys (add, discoverable login, step-up, rename, delete). - LiveLinkTest: an admin creates invites; accounts are created from the invite URL with a password and with a passkey only. Passkeys come from a software authenticator that answers like Bitwarden in Credential Manager (attestation none, synced, the Android origin of the CI debug build), ported from the backend's passkeytest package. The account screen shows the passkey provider the backend reports (for example "Bitwarden"), and an expired TOTP enrolment (409 conflict on confirm) closes the dialog and asks to start again. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.
Follow-up to #70 after backend #39 (TOTP, account) and #40 (passkeys) reached master.
Live checks against backend master (5f5a133)
I built backend master locally with
rateLimits.disabled: true,webauthn.rpId, the CI debug package inwebauthn.android, andclientUrl. All opt-in live tests pass:LiveAuthTest(3): login, sessions, sign out other devices, logout, wrong password.LiveAccountTest(new):GET/PATCH /account/and the password changeotpauth://URI like an authenticator app; a wrong code gives 400; confirming again gives 409LiveLinkTest(new): an admin creates invites.AuthLinkParserreads the invite URL, and new accounts are created with a password and with a passkey only. The passkey account then signs in with its passkey.The passkeys come from
SoftwareAuthenticator, a port of the backend'spasskeytestpackage. It sends the JSON Credential Manager returns, with the Android origin of the CI debug build (android:apk-key-hash:dKdF-sJKv73wpzCDGHH-pt4kbGvS4_hiSSQnH8TTcEg). This also checks the origin the backend derives fromserver.auth.webauthn.android.The backend's
/.well-known/assetlinks.json(withserveAssetLinks: true) gives exactly the statement computed from.ci/debug.keystore:handle_all_urlsandget_login_credsforde.markusressel.mkdocseditor.debug.App changes for the two additive backend deviations
provider. The account screen shows it next to the dates, for example "Bitwarden · Added … · synced".lastUsedAtis null until first use and shows "never".POST /account/totp/confirm/without a pending enrolment gives 409conflict. The setup dialog closes and says the setup expired and must be started again.Unit tests: an
AccountViewModelTestfor the expired enrolment and anOkHttpAuthApiTestfor the provider and a nulllastUsedAt../gradlew testDebugUnitTest app:assembleDebugpasses (157 tests; the live tests are skipped without properties).🤖 Generated with Claude Code