mirror of
https://github.com/block/buzz.git
synced 2026-10-28 04:51:40 +00:00
fix(mobile): cancel pairing admission before persistence
Carry the pairing generation through asynchronous community admission so a reset cannot save or activate credentials when verification completes later. Co-authored-by: Brain <1a02c72794dcd0f07058a353bc3a81f4028b8c77c92c87fce6d5c8b85970a20b@buzz.block.builderlab.xyz> Signed-off-by: Wes <wesbillman@users.noreply.github.com>
This commit is contained in:
@@ -758,7 +758,13 @@ class PairingNotifier extends Notifier<PairingState> {
|
||||
);
|
||||
await ref
|
||||
.read(authProvider.notifier)
|
||||
.authenticateWithCommunity(community);
|
||||
.authenticateWithCommunity(
|
||||
community,
|
||||
shouldContinue: () =>
|
||||
pairingGeneration == _pairingGeneration &&
|
||||
state.status == PairingStatus.storing &&
|
||||
!_sendIdentityToSource,
|
||||
);
|
||||
if (pairingGeneration != _pairingGeneration ||
|
||||
state.status != PairingStatus.storing ||
|
||||
_sendIdentityToSource) {
|
||||
@@ -869,7 +875,10 @@ class PairingNotifier extends Notifier<PairingState> {
|
||||
if (generation != _pairingGeneration) return;
|
||||
await ref
|
||||
.read(authProvider.notifier)
|
||||
.authenticateWithCommunity(community);
|
||||
.authenticateWithCommunity(
|
||||
community,
|
||||
shouldContinue: () => generation == _pairingGeneration,
|
||||
);
|
||||
if (generation != _pairingGeneration) return;
|
||||
state = PairingState(
|
||||
status: PairingStatus.success,
|
||||
|
||||
@@ -669,6 +669,10 @@ void main() {
|
||||
await Future<void>.delayed(Duration.zero);
|
||||
|
||||
expect(container.read(pairingProvider).status, PairingStatus.idle);
|
||||
expect(
|
||||
container.read(authProvider).value!.status,
|
||||
AuthStatus.unauthenticated,
|
||||
);
|
||||
expect(socket.isConnected, isFalse);
|
||||
});
|
||||
|
||||
@@ -1286,6 +1290,7 @@ class FakeAuthNotifier extends AsyncNotifier<AuthState>
|
||||
lastCommunity = community;
|
||||
entered?.complete();
|
||||
await authentication?.future;
|
||||
if (shouldContinue != null && !shouldContinue()) return;
|
||||
state = AsyncData(
|
||||
AuthState(status: AuthStatus.authenticated, community: community),
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user