Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(auth): add phone MFA #9044

Merged
merged 8 commits into from Jul 20, 2022
Merged

feat(auth): add phone MFA #9044

merged 8 commits into from Jul 20, 2022

Conversation

Lyokone
Copy link
Contributor

@Lyokone Lyokone commented Jul 6, 2022

Description

see title

Related Issues

Replace this paragraph with a list of issues related to this PR from the issue database. Indicate, which of these issues are resolved or fixed by this PR. Note that you'll have to prefix the issue numbers with flutter/flutter#.

Checklist

Before you create this PR confirm that it meets all requirements listed below by checking the relevant checkboxes ([x]).
This will ensure a smooth and quick review process. Updating the pubspec.yaml and changelogs is not required.

  • I read the Contributor Guide and followed the process outlined there for submitting PRs.
  • My PR includes unit or integration tests for all changed/updated/fixed behaviors (See Contributor Guide).
  • All existing and new tests are passing.
  • I updated/added relevant documentation (doc comments with ///).
  • The analyzer (melos run analyze) does not report any problems on my PR.
  • I read and followed the Flutter Style Guide.
  • I signed the CLA.
  • I am willing to follow-up on review comments in a timely manner.

Breaking Change

Does your PR require plugin users to manually update their apps to accommodate your change?

  • Yes, this is a breaking change.
  • No, this is not a breaking change.

Lyokone and others added 6 commits July 18, 2022 15:21
* chores: update format CI step to match local melos format

* chores: update format CI step to match local melos format

* feat(auth, android): mfa

* feat(auth, android): add MFA to phone options

* feat(auth, android): add phone MFA

* feat(auth, android): add MFA signin

* feat(auth): add documentation

* feat(auth, android): fix typings

* feat(auth, android): fix tests

* feat(auth, android): add input for phone number to example app

* feat(auth, android): add unenroll and getEnrolledFactors

* feat(auth, android): fix formatting

* feat(auth, android): fix formatting

* feat(ui, android): use mocktail for mocking dependencies

* feat(auth, android): fix analyze

* feat(auth): fix melos generate command

* Update packages/firebase_auth/firebase_auth_platform_interface/lib/src/method_channel/method_channel_multi_factor.dart

Co-authored-by: Mike Diarmid <mike.diarmid@gmail.com>

Co-authored-by: Mike Diarmid <mike.diarmid@gmail.com>
* chores: update format CI step to match local melos format

* chores: update format CI step to match local melos format

* feat(auth, android): mfa

* feat(auth, android): add MFA to phone options

* feat(auth, android): add phone MFA

* feat(auth, android): add MFA signin

* feat(auth, android): fix tests

* feat(auth, android): add input for phone number to example app

* feat(auth, android): add unenroll and getEnrolledFactors

* feat(auth, android): fix formatting

* feat(auth, android): fix formatting

* feat(auth, android): fix analyze

* feat(auth, ios): implement enroll

* feat(auth, ios): implement MFA for signin

* feat(auth, ios): add conditions to allow macos to build

* feat(auth, ios): add conditions to allow macos to build

* feat(auth, ios): fix ios build

* Update packages/firebase_auth/firebase_auth/ios/Classes/FLTFirebaseAuthPlugin.m

Co-authored-by: Mike Diarmid <mike.diarmid@gmail.com>

* fix: fix rebase

Co-authored-by: Mike Diarmid <mike.diarmid@gmail.com>
* feat(auth, android): add phone MFA to Android (#8998)

* chores: update format CI step to match local melos format

* chores: update format CI step to match local melos format

* feat(auth, android): mfa

* feat(auth, android): add MFA to phone options

* feat(auth, android): add phone MFA

* feat(auth, android): add MFA signin

* feat(auth): add documentation

* feat(auth, android): fix typings

* feat(auth, android): fix tests

* feat(auth, android): add input for phone number to example app

* feat(auth, android): add unenroll and getEnrolledFactors

* feat(auth, android): fix formatting

* feat(auth, android): fix formatting

* feat(ui, android): use mocktail for mocking dependencies

* feat(auth, android): fix analyze

* feat(auth): fix melos generate command

* Update packages/firebase_auth/firebase_auth_platform_interface/lib/src/method_channel/method_channel_multi_factor.dart

Co-authored-by: Mike Diarmid <mike.diarmid@gmail.com>

Co-authored-by: Mike Diarmid <mike.diarmid@gmail.com>

* feat(auth, ios): add phone MFA (#9008)

* chores: update format CI step to match local melos format

* chores: update format CI step to match local melos format

* feat(auth, android): mfa

* feat(auth, android): add MFA to phone options

* feat(auth, android): add phone MFA

* feat(auth, android): add MFA signin

* feat(auth, android): fix tests

* feat(auth, android): add input for phone number to example app

* feat(auth, android): add unenroll and getEnrolledFactors

* feat(auth, android): fix formatting

* feat(auth, android): fix formatting

* feat(auth, android): fix analyze

* feat(auth, ios): implement enroll

* feat(auth, ios): implement MFA for signin

* feat(auth, ios): add conditions to allow macos to build

* feat(auth, ios): add conditions to allow macos to build

* feat(auth, ios): fix ios build

* Update packages/firebase_auth/firebase_auth/ios/Classes/FLTFirebaseAuthPlugin.m

Co-authored-by: Mike Diarmid <mike.diarmid@gmail.com>

* fix: fix rebase

Co-authored-by: Mike Diarmid <mike.diarmid@gmail.com>

* feat(auth): fix android merge

* feat(auth): fix ios merge

* feat(auth): add e2e tests

* fix(auth): fix reintroduce tests

* feat(auth): add documentation

* feat(auth): add e2e tests

Co-authored-by: Mike Diarmid <mike.diarmid@gmail.com>
* feat(auth): add multifactoruser

* feat(auth, web): bridge

* feat(auth, web): solve bridging errors

* feat(auth, web): finish phone web mfa

* feat(auth, web): finish phone web mfa

* feat(auth, web): fix analyze

* feat(auth, web): fix analyze

* feat(auth, web): fix wrong argument
Copy link
Member

@russellwheatley russellwheatley left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

some minor feedback but LGTM.

@@ -186,8 +186,9 @@ scripts:

generate:pigeon:
run: |
melos exec -- "flutter pub run pigeon --input ./pigeons/messages.dart"
melos run generate:pigeon:macos
melos exec -- "flutter pub run pigeon --input ./pigeons/messages.dart" && \
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is that &&\ needed? It wasn't there before

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Without it, the second command would run even if the first one fails.
If there is an issue with the generation, it's better to not run the other commands IMO

@@ -421,6 +421,10 @@ class User {
await _delegate.verifyBeforeUpdateEmail(newEmail, actionCodeSettings);
}

MultiFactor get multiFactor {
return MultiFactor._(_delegate.multiFactor);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

MultiFactor either should override == or this property should be cached.

At the moment this.multiFactor != this.multiFactor

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good catch, thanks

@@ -23,9 +24,12 @@ class MethodChannelFirebaseAuth extends FirebaseAuthPlatform {
);

static Map<String, MethodChannelFirebaseAuth>
_methodChannelFirebaseAuthInstances =
methodChannelFirebaseAuthInstances =
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is it expected for this to be public? It's public but undocumented

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've added documentation, needed to get the Auth instance in the error parsing

List<PigeonMultiFactorInfo?> pigeonMultiFactorInfo,
) {
return pigeonMultiFactorInfo
.where((element) => element != null)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

use package:collection and its whereNotNull

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice

final pigeonMultiFactorInfo =
(additionalData['multiFactorHints'] as List<Object?>)
.where((element) => element != null)
.cast<Object>()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same here

@@ -64,3 +72,46 @@ FirebaseException platformExceptionToFirebaseAuthException(
credential: credential,
);
}

FirebaseAuthMultiFactorException parseMultiFactorError(
Map<String, dynamic> details) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Prefer Object? instead of dynamic

required String uid,
required this.phoneNumber,
}) : super(
displayName: displayName,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are we using Dart 2.17 already? If so, these should be using the new super syntax

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nvm we aren't

@Lyokone Lyokone force-pushed the feat/mfa branch 2 times, most recently from 0facb04 to fb1e99b Compare July 19, 2022 14:57
@Lyokone Lyokone merged commit 1b85c8b into master Jul 20, 2022
@Lyokone Lyokone deleted the feat/mfa branch July 20, 2022 07:13
@firebase firebase locked and limited conversation to collaborators Aug 20, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants