diff --git a/packages/firebase_auth/firebase_auth/android/build.gradle b/packages/firebase_auth/firebase_auth/android/build.gradle index 1004a0e70463..9abc51732b95 100755 --- a/packages/firebase_auth/firebase_auth/android/build.gradle +++ b/packages/firebase_auth/firebase_auth/android/build.gradle @@ -2,6 +2,7 @@ group 'io.flutter.plugins.firebase.auth' version '1.0-SNAPSHOT' apply plugin: 'com.android.library' +apply from: file("local-config.gradle") buildscript { repositories { @@ -10,13 +11,23 @@ buildscript { } } -allprojects { +rootProject.allprojects { repositories { google() mavenCentral() } } +// AGP 9+ has built-in Kotlin support unless Flutter opts out via android.builtInKotlin=false. +def agpMajor = com.android.Version.ANDROID_GRADLE_PLUGIN_VERSION.tokenize('.')[0] as int +def builtInKotlin = providers.gradleProperty("android.builtInKotlin") + .map { it.toBoolean() } + .orElse(agpMajor >= 9) + .get() +if (agpMajor < 9 || !builtInKotlin) { + apply plugin: 'kotlin-android' +} + def firebaseCoreProject = findProject(':firebase_core') if (firebaseCoreProject == null) { throw new GradleException('Could not find the firebase_core FlutterFire plugin, have you added it as a dependency in your pubspec?') @@ -36,16 +47,21 @@ android { namespace 'io.flutter.plugins.firebase.auth' } - compileSdkVersion 34 + compileSdkVersion project.ext.compileSdk defaultConfig { - minSdkVersion 23 + minSdkVersion project.ext.minSdk testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } compileOptions { - sourceCompatibility JavaVersion.toVersion(17) - targetCompatibility JavaVersion.toVersion(17) + sourceCompatibility project.ext.javaVersion + targetCompatibility project.ext.javaVersion + } + + sourceSets { + main.java.srcDirs += "src/main/kotlin" + test.java.srcDirs += "src/test/kotlin" } buildFeatures { @@ -63,4 +79,12 @@ android { } } +plugins.withId("org.jetbrains.kotlin.android") { + kotlin { + compilerOptions { + jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.fromTarget(project.ext.javaVersion.toString()) + } + } +} + apply from: file("./user-agent.gradle") diff --git a/packages/firebase_auth/firebase_auth/android/local-config.gradle b/packages/firebase_auth/firebase_auth/android/local-config.gradle new file mode 100644 index 000000000000..2adcdf5c1729 --- /dev/null +++ b/packages/firebase_auth/firebase_auth/android/local-config.gradle @@ -0,0 +1,7 @@ +ext { + compileSdk=34 + minSdk=23 + targetSdk=34 + javaVersion = JavaVersion.toVersion(17) + androidGradlePluginVersion = '8.3.0' +} diff --git a/packages/firebase_auth/firebase_auth/android/src/main/java/io/flutter/plugins/firebase/auth/AuthStateChannelStreamHandler.java b/packages/firebase_auth/firebase_auth/android/src/main/java/io/flutter/plugins/firebase/auth/AuthStateChannelStreamHandler.java deleted file mode 100644 index e4147bee6756..000000000000 --- a/packages/firebase_auth/firebase_auth/android/src/main/java/io/flutter/plugins/firebase/auth/AuthStateChannelStreamHandler.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright 2022, the Chromium project authors. Please see the AUTHORS file - * for details. All rights reserved. Use of this source code is governed by a - * BSD-style license that can be found in the LICENSE file. - */ - -package io.flutter.plugins.firebase.auth; - -import com.google.firebase.auth.FirebaseAuth; -import com.google.firebase.auth.FirebaseAuth.AuthStateListener; -import com.google.firebase.auth.FirebaseUser; -import io.flutter.plugin.common.EventChannel.EventSink; -import io.flutter.plugin.common.EventChannel.StreamHandler; -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.atomic.AtomicBoolean; - -public class AuthStateChannelStreamHandler implements StreamHandler { - - private final FirebaseAuth firebaseAuth; - private AuthStateListener authStateListener; - - public AuthStateChannelStreamHandler(FirebaseAuth firebaseAuth) { - this.firebaseAuth = firebaseAuth; - } - - @Override - public void onListen(Object arguments, EventSink events) { - Map event = new HashMap<>(); - event.put(Constants.APP_NAME, firebaseAuth.getApp().getName()); - - final AtomicBoolean initialAuthState = new AtomicBoolean(true); - - authStateListener = - auth -> { - if (initialAuthState.get()) { - initialAuthState.set(false); - return; - } - - FirebaseUser user = auth.getCurrentUser(); - - if (user == null) { - event.put(Constants.USER, null); - } else { - event.put( - Constants.USER, PigeonParser.manuallyToList(PigeonParser.parseFirebaseUser(user))); - } - - events.success(event); - }; - - firebaseAuth.addAuthStateListener(authStateListener); - } - - @Override - public void onCancel(Object arguments) { - if (authStateListener != null) { - firebaseAuth.removeAuthStateListener(authStateListener); - authStateListener = null; - } - } -} diff --git a/packages/firebase_auth/firebase_auth/android/src/main/java/io/flutter/plugins/firebase/auth/Constants.java b/packages/firebase_auth/firebase_auth/android/src/main/java/io/flutter/plugins/firebase/auth/Constants.java deleted file mode 100644 index 2dd8df20fe17..000000000000 --- a/packages/firebase_auth/firebase_auth/android/src/main/java/io/flutter/plugins/firebase/auth/Constants.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright 2022, the Chromium project authors. Please see the AUTHORS file - * for details. All rights reserved. Use of this source code is governed by a - * BSD-style license that can be found in the LICENSE file. - */ - -package io.flutter.plugins.firebase.auth; - -public class Constants { - - public static final String APP_NAME = "appName"; - - // Providers - public static final String SIGN_IN_METHOD_PASSWORD = "password"; - public static final String SIGN_IN_METHOD_EMAIL_LINK = "emailLink"; - public static final String SIGN_IN_METHOD_FACEBOOK = "facebook.com"; - public static final String SIGN_IN_METHOD_GOOGLE = "google.com"; - public static final String SIGN_IN_METHOD_TWITTER = "twitter.com"; - public static final String SIGN_IN_METHOD_GITHUB = "github.com"; - public static final String SIGN_IN_METHOD_PHONE = "phone"; - public static final String SIGN_IN_METHOD_OAUTH = "oauth"; - public static final String SIGN_IN_METHOD_PLAY_GAMES = "playgames.google.com"; - // User - public static final String USER = "user"; - public static final String EMAIL = "email"; - - public static final String PROVIDER_ID = "providerId"; - public static final String CREDENTIAL = "credential"; - public static final String SECRET = "secret"; - public static final String ID_TOKEN = "idToken"; - public static final String TOKEN = "token"; - public static final String ACCESS_TOKEN = "accessToken"; - public static final String RAW_NONCE = "rawNonce"; - public static final String EMAIL_LINK = "emailLink"; - public static final String VERIFICATION_ID = "verificationId"; - public static final String SMS_CODE = "smsCode"; - public static final String SIGN_IN_METHOD = "signInMethod"; - public static final String FORCE_RESENDING_TOKEN = "forceResendingToken"; - public static final String NAME = "name"; - public static final String SERVER_AUTH_CODE = "serverAuthCode"; - - // MultiFactor - public static final String MULTI_FACTOR_HINTS = "multiFactorHints"; - public static final String MULTI_FACTOR_SESSION_ID = "multiFactorSessionId"; - public static final String MULTI_FACTOR_RESOLVER_ID = "multiFactorResolverId"; -} diff --git a/packages/firebase_auth/firebase_auth/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthPlugin.java b/packages/firebase_auth/firebase_auth/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthPlugin.java deleted file mode 100755 index ff6da9230b64..000000000000 --- a/packages/firebase_auth/firebase_auth/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthPlugin.java +++ /dev/null @@ -1,781 +0,0 @@ -// Copyright 2017 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package io.flutter.plugins.firebase.auth; - -import static io.flutter.plugins.firebase.auth.FlutterFirebaseMultiFactor.multiFactorUserMap; -import static io.flutter.plugins.firebase.core.FlutterFirebasePluginRegistry.registerPlugin; - -import android.app.Activity; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import com.google.android.gms.tasks.Task; -import com.google.android.gms.tasks.TaskCompletionSource; -import com.google.firebase.FirebaseApp; -import com.google.firebase.auth.ActionCodeResult; -import com.google.firebase.auth.AuthCredential; -import com.google.firebase.auth.AuthResult; -import com.google.firebase.auth.FirebaseAuth; -import com.google.firebase.auth.FirebaseUser; -import com.google.firebase.auth.MultiFactor; -import com.google.firebase.auth.MultiFactorInfo; -import com.google.firebase.auth.MultiFactorSession; -import com.google.firebase.auth.OAuthProvider; -import com.google.firebase.auth.PhoneMultiFactorInfo; -import com.google.firebase.auth.SignInMethodQueryResult; -import io.flutter.embedding.engine.plugins.FlutterPlugin; -import io.flutter.embedding.engine.plugins.activity.ActivityAware; -import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding; -import io.flutter.plugin.common.BinaryMessenger; -import io.flutter.plugin.common.EventChannel; -import io.flutter.plugin.common.EventChannel.StreamHandler; -import io.flutter.plugin.common.MethodChannel; -import io.flutter.plugins.firebase.core.FlutterFirebasePlugin; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.UUID; - -/** Flutter plugin for Firebase Auth. */ -public class FlutterFirebaseAuthPlugin - implements FlutterFirebasePlugin, - FlutterPlugin, - ActivityAware, - GeneratedAndroidFirebaseAuth.FirebaseAuthHostApi { - - private static final String METHOD_CHANNEL_NAME = "plugins.flutter.io/firebase_auth"; - - // Stores the instances of native AuthCredentials by their hashCode - static final HashMap authCredentials = new HashMap<>(); - - @Nullable private BinaryMessenger messenger; - - private MethodChannel channel; - private Activity activity; - - private final Map streamHandlers = new HashMap<>(); - - private final FlutterFirebaseAuthUser firebaseAuthUser = new FlutterFirebaseAuthUser(); - private final FlutterFirebaseMultiFactor firebaseMultiFactor = new FlutterFirebaseMultiFactor(); - - private final FlutterFirebaseTotpMultiFactor firebaseTotpMultiFactor = - new FlutterFirebaseTotpMultiFactor(); - private final FlutterFirebaseTotpSecret firebaseTotpSecret = new FlutterFirebaseTotpSecret(); - - private void initInstance(BinaryMessenger messenger) { - registerPlugin(METHOD_CHANNEL_NAME, this); - channel = new MethodChannel(messenger, METHOD_CHANNEL_NAME); - GeneratedAndroidFirebaseAuth.FirebaseAuthHostApi.setUp(messenger, this); - GeneratedAndroidFirebaseAuth.FirebaseAuthUserHostApi.setUp(messenger, firebaseAuthUser); - GeneratedAndroidFirebaseAuth.MultiFactorUserHostApi.setUp(messenger, firebaseMultiFactor); - GeneratedAndroidFirebaseAuth.MultiFactoResolverHostApi.setUp(messenger, firebaseMultiFactor); - GeneratedAndroidFirebaseAuth.MultiFactorTotpHostApi.setUp(messenger, firebaseTotpMultiFactor); - GeneratedAndroidFirebaseAuth.MultiFactorTotpSecretHostApi.setUp(messenger, firebaseTotpSecret); - - this.messenger = messenger; - } - - @Override - public void onAttachedToEngine(@NonNull FlutterPluginBinding binding) { - initInstance(binding.getBinaryMessenger()); - } - - @Override - public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) { - channel.setMethodCallHandler(null); - - assert messenger != null; - GeneratedAndroidFirebaseAuth.FirebaseAuthHostApi.setUp(messenger, null); - GeneratedAndroidFirebaseAuth.FirebaseAuthUserHostApi.setUp(messenger, null); - GeneratedAndroidFirebaseAuth.MultiFactorUserHostApi.setUp(messenger, null); - GeneratedAndroidFirebaseAuth.MultiFactoResolverHostApi.setUp(messenger, null); - GeneratedAndroidFirebaseAuth.MultiFactorTotpHostApi.setUp(messenger, null); - GeneratedAndroidFirebaseAuth.MultiFactorTotpSecretHostApi.setUp(messenger, null); - - channel = null; - messenger = null; - - removeEventListeners(); - } - - @Override - public void onAttachedToActivity(ActivityPluginBinding activityPluginBinding) { - activity = activityPluginBinding.getActivity(); - firebaseAuthUser.setActivity(activity); - } - - @Override - public void onDetachedFromActivityForConfigChanges() { - activity = null; - firebaseAuthUser.setActivity(null); - } - - @Override - public void onReattachedToActivityForConfigChanges(ActivityPluginBinding activityPluginBinding) { - activity = activityPluginBinding.getActivity(); - firebaseAuthUser.setActivity(activity); - } - - @Override - public void onDetachedFromActivity() { - activity = null; - firebaseAuthUser.setActivity(null); - } - - // Only access activity with this method. - @Nullable - private Activity getActivity() { - return activity; - } - - static FirebaseAuth getAuthFromPigeon( - GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp pigeonApp) { - FirebaseApp app = FirebaseApp.getInstance(pigeonApp.getAppName()); - FirebaseAuth auth = FirebaseAuth.getInstance(app); - if (pigeonApp.getTenantId() != null) { - auth.setTenantId(pigeonApp.getTenantId()); - } - String customDomain = FlutterFirebasePlugin.customAuthDomain.get(pigeonApp.getAppName()); - if (customDomain != null) { - auth.setCustomAuthDomain(customDomain); - } - - // Auth's `getCustomAuthDomain` supersedes value from `customAuthDomain` map set by - // `initializeApp` - if (pigeonApp.getCustomAuthDomain() != null) { - auth.setCustomAuthDomain(pigeonApp.getCustomAuthDomain()); - } - - return auth; - } - - @Override - public void registerIdTokenListener( - @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, - @NonNull GeneratedAndroidFirebaseAuth.Result result) { - try { - final FirebaseAuth auth = getAuthFromPigeon(app); - final IdTokenChannelStreamHandler handler = new IdTokenChannelStreamHandler(auth); - final String name = METHOD_CHANNEL_NAME + "/id-token/" + auth.getApp().getName(); - final EventChannel channel = new EventChannel(messenger, name); - channel.setStreamHandler(handler); - streamHandlers.put(channel, handler); - result.success(name); - } catch (Exception e) { - result.error(e); - } - } - - @Override - public void registerAuthStateListener( - @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, - @NonNull GeneratedAndroidFirebaseAuth.Result result) { - try { - final FirebaseAuth auth = getAuthFromPigeon(app); - final AuthStateChannelStreamHandler handler = new AuthStateChannelStreamHandler(auth); - final String name = METHOD_CHANNEL_NAME + "/auth-state/" + auth.getApp().getName(); - final EventChannel channel = new EventChannel(messenger, name); - channel.setStreamHandler(handler); - streamHandlers.put(channel, handler); - result.success(name); - } catch (Exception e) { - result.error(e); - } - } - - @Override - public void useEmulator( - @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, - @NonNull String host, - @NonNull Long port, - @NonNull GeneratedAndroidFirebaseAuth.VoidResult result) { - try { - FirebaseAuth firebaseAuth = getAuthFromPigeon(app); - firebaseAuth.useEmulator(host, port.intValue()); - result.success(); - } catch (Exception e) { - result.error(e); - } - } - - @Override - public void applyActionCode( - @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, - @NonNull String code, - @NonNull GeneratedAndroidFirebaseAuth.VoidResult result) { - FirebaseAuth firebaseAuth = getAuthFromPigeon(app); - firebaseAuth - .applyActionCode(code) - .addOnCompleteListener( - task -> { - if (task.isSuccessful()) { - result.success(); - } else { - result.error( - FlutterFirebaseAuthPluginException.parserExceptionToFlutter( - task.getException())); - } - }); - } - - @Override - public void checkActionCode( - @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, - @NonNull String code, - @NonNull - GeneratedAndroidFirebaseAuth.Result - result) { - FirebaseAuth firebaseAuth = getAuthFromPigeon(app); - firebaseAuth - .checkActionCode(code) - .addOnCompleteListener( - task -> { - if (task.isSuccessful()) { - ActionCodeResult actionCodeInfo = task.getResult(); - result.success(PigeonParser.parseActionCodeResult(actionCodeInfo)); - } else { - result.error( - FlutterFirebaseAuthPluginException.parserExceptionToFlutter( - task.getException())); - } - }); - } - - @Override - public void confirmPasswordReset( - @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, - @NonNull String code, - @NonNull String newPassword, - @NonNull GeneratedAndroidFirebaseAuth.VoidResult result) { - FirebaseAuth firebaseAuth = getAuthFromPigeon(app); - - firebaseAuth - .confirmPasswordReset(code, newPassword) - .addOnCompleteListener( - task -> { - if (task.isSuccessful()) { - result.success(); - } else { - result.error( - FlutterFirebaseAuthPluginException.parserExceptionToFlutter( - task.getException())); - } - }); - } - - @Override - public void createUserWithEmailAndPassword( - @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, - @NonNull String email, - @NonNull String password, - @NonNull - GeneratedAndroidFirebaseAuth.Result - result) { - FirebaseAuth firebaseAuth = getAuthFromPigeon(app); - - firebaseAuth - .createUserWithEmailAndPassword(email, password) - .addOnCompleteListener( - task -> { - if (task.isSuccessful()) { - AuthResult authResult = task.getResult(); - result.success(PigeonParser.parseAuthResult(authResult)); - } else { - result.error( - FlutterFirebaseAuthPluginException.parserExceptionToFlutter( - task.getException())); - } - }); - } - - @Override - public void signInAnonymously( - @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, - @NonNull - GeneratedAndroidFirebaseAuth.Result - result) { - FirebaseAuth firebaseAuth = getAuthFromPigeon(app); - firebaseAuth - .signInAnonymously() - .addOnCompleteListener( - task -> { - if (task.isSuccessful()) { - AuthResult authResult = task.getResult(); - result.success(PigeonParser.parseAuthResult(authResult)); - } else { - result.error( - FlutterFirebaseAuthPluginException.parserExceptionToFlutter( - task.getException())); - } - }); - } - - @Override - public void signInWithCredential( - @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, - @NonNull Map input, - @NonNull - GeneratedAndroidFirebaseAuth.Result - result) { - FirebaseAuth firebaseAuth = getAuthFromPigeon(app); - AuthCredential credential = PigeonParser.getCredential(input); - - if (credential == null) { - throw FlutterFirebaseAuthPluginException.invalidCredential(); - } - firebaseAuth - .signInWithCredential(credential) - .addOnCompleteListener( - task -> { - if (task.isSuccessful()) { - AuthResult authResult = task.getResult(); - result.success(PigeonParser.parseAuthResult(authResult)); - } else { - result.error( - FlutterFirebaseAuthPluginException.parserExceptionToFlutter( - task.getException())); - } - }); - } - - @Override - public void signInWithCustomToken( - @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, - @NonNull String token, - @NonNull - GeneratedAndroidFirebaseAuth.Result - result) { - FirebaseAuth firebaseAuth = getAuthFromPigeon(app); - - firebaseAuth - .signInWithCustomToken(token) - .addOnCompleteListener( - task -> { - if (task.isSuccessful()) { - AuthResult authResult = task.getResult(); - result.success(PigeonParser.parseAuthResult(authResult)); - } else { - result.error( - FlutterFirebaseAuthPluginException.parserExceptionToFlutter( - task.getException())); - } - }); - } - - @Override - public void signInWithEmailAndPassword( - @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, - @NonNull String email, - @NonNull String password, - @NonNull - GeneratedAndroidFirebaseAuth.Result - result) { - FirebaseAuth firebaseAuth = getAuthFromPigeon(app); - firebaseAuth - .signInWithEmailAndPassword(email, password) - .addOnCompleteListener( - task -> { - if (task.isSuccessful()) { - result.success(PigeonParser.parseAuthResult(task.getResult())); - } else { - result.error( - FlutterFirebaseAuthPluginException.parserExceptionToFlutter( - task.getException())); - } - }); - } - - @Override - public void signInWithEmailLink( - @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, - @NonNull String email, - @NonNull String emailLink, - @NonNull - GeneratedAndroidFirebaseAuth.Result - result) { - FirebaseAuth firebaseAuth = getAuthFromPigeon(app); - firebaseAuth - .signInWithEmailLink(email, emailLink) - .addOnCompleteListener( - task -> { - if (task.isSuccessful()) { - AuthResult authResult = task.getResult(); - result.success(PigeonParser.parseAuthResult(authResult)); - } else { - result.error( - FlutterFirebaseAuthPluginException.parserExceptionToFlutter( - task.getException())); - } - }); - } - - @Override - public void signInWithProvider( - @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, - @NonNull GeneratedAndroidFirebaseAuth.InternalSignInProvider signInProvider, - @NonNull - GeneratedAndroidFirebaseAuth.Result - result) { - FirebaseAuth firebaseAuth = getAuthFromPigeon(app); - - OAuthProvider.Builder provider = - OAuthProvider.newBuilder(signInProvider.getProviderId(), firebaseAuth); - if (signInProvider.getScopes() != null) { - provider.setScopes(signInProvider.getScopes()); - } - if (signInProvider.getCustomParameters() != null) { - provider.addCustomParameters(signInProvider.getCustomParameters()); - } - - firebaseAuth - .startActivityForSignInWithProvider(getActivity(), provider.build()) - .addOnCompleteListener( - task -> { - if (task.isSuccessful()) { - AuthResult authResult = task.getResult(); - result.success(PigeonParser.parseAuthResult(authResult)); - } else { - result.error( - FlutterFirebaseAuthPluginException.parserExceptionToFlutter( - task.getException())); - } - }); - } - - @Override - public void signOut( - @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, - @NonNull GeneratedAndroidFirebaseAuth.VoidResult result) { - try { - FirebaseAuth firebaseAuth = getAuthFromPigeon(app); - if (firebaseAuth.getCurrentUser() != null) { - final Map appMultiFactorUser = - multiFactorUserMap.get(app.getAppName()); - if (appMultiFactorUser != null) { - appMultiFactorUser.remove(firebaseAuth.getCurrentUser().getUid()); - } - } - firebaseAuth.signOut(); - result.success(); - } catch (Exception e) { - result.error(e); - } - } - - @Override - public void fetchSignInMethodsForEmail( - @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, - @NonNull String email, - @NonNull GeneratedAndroidFirebaseAuth.Result> result) { - FirebaseAuth firebaseAuth = getAuthFromPigeon(app); - - firebaseAuth - .fetchSignInMethodsForEmail(email) - .addOnCompleteListener( - task -> { - if (task.isSuccessful()) { - SignInMethodQueryResult signInMethodQueryResult = task.getResult(); - result.success(signInMethodQueryResult.getSignInMethods()); - } else { - result.error( - FlutterFirebaseAuthPluginException.parserExceptionToFlutter( - task.getException())); - } - }); - } - - @Override - public void sendPasswordResetEmail( - @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, - @NonNull String email, - @Nullable GeneratedAndroidFirebaseAuth.InternalActionCodeSettings actionCodeSettings, - @NonNull GeneratedAndroidFirebaseAuth.VoidResult result) { - FirebaseAuth firebaseAuth = getAuthFromPigeon(app); - - if (actionCodeSettings == null) { - firebaseAuth - .sendPasswordResetEmail(email) - .addOnCompleteListener( - task -> { - if (task.isSuccessful()) { - result.success(); - } else { - result.error( - FlutterFirebaseAuthPluginException.parserExceptionToFlutter( - task.getException())); - } - }); - return; - } - - firebaseAuth - .sendPasswordResetEmail(email, PigeonParser.getActionCodeSettings(actionCodeSettings)) - .addOnCompleteListener( - task -> { - if (task.isSuccessful()) { - result.success(); - } else { - result.error( - FlutterFirebaseAuthPluginException.parserExceptionToFlutter( - task.getException())); - } - }); - } - - @Override - public void sendSignInLinkToEmail( - @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, - @NonNull String email, - @NonNull GeneratedAndroidFirebaseAuth.InternalActionCodeSettings actionCodeSettings, - @NonNull GeneratedAndroidFirebaseAuth.VoidResult result) { - FirebaseAuth firebaseAuth = getAuthFromPigeon(app); - - firebaseAuth - .sendSignInLinkToEmail(email, PigeonParser.getActionCodeSettings(actionCodeSettings)) - .addOnCompleteListener( - task -> { - if (task.isSuccessful()) { - result.success(); - } else { - result.error( - FlutterFirebaseAuthPluginException.parserExceptionToFlutter( - task.getException())); - } - }); - } - - @Override - public void setLanguageCode( - @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, - @Nullable String languageCode, - @NonNull GeneratedAndroidFirebaseAuth.Result result) { - try { - FirebaseAuth firebaseAuth = getAuthFromPigeon(app); - - if (languageCode == null) { - firebaseAuth.useAppLanguage(); - } else { - firebaseAuth.setLanguageCode(languageCode); - } - - result.success(firebaseAuth.getLanguageCode()); - } catch (Exception e) { - result.error(e); - } - } - - @Override - public void setSettings( - @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, - @NonNull GeneratedAndroidFirebaseAuth.InternalFirebaseAuthSettings settings, - @NonNull GeneratedAndroidFirebaseAuth.VoidResult result) { - try { - FirebaseAuth firebaseAuth = getAuthFromPigeon(app); - - firebaseAuth - .getFirebaseAuthSettings() - .setAppVerificationDisabledForTesting(settings.getAppVerificationDisabledForTesting()); - - if (settings.getForceRecaptchaFlow() != null) { - firebaseAuth - .getFirebaseAuthSettings() - .forceRecaptchaFlowForTesting(settings.getForceRecaptchaFlow()); - } - - if (settings.getPhoneNumber() != null && settings.getSmsCode() != null) { - firebaseAuth - .getFirebaseAuthSettings() - .setAutoRetrievedSmsCodeForPhoneNumber( - settings.getPhoneNumber(), settings.getSmsCode()); - } - - result.success(); - } catch (Exception e) { - result.error(e); - } - } - - @Override - public void verifyPasswordResetCode( - @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, - @NonNull String code, - @NonNull GeneratedAndroidFirebaseAuth.Result result) { - FirebaseAuth firebaseAuth = getAuthFromPigeon(app); - - firebaseAuth - .verifyPasswordResetCode(code) - .addOnCompleteListener( - task -> { - if (task.isSuccessful()) { - result.success(task.getResult()); - } else { - result.error( - FlutterFirebaseAuthPluginException.parserExceptionToFlutter( - task.getException())); - } - }); - } - - @Override - public void verifyPhoneNumber( - @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, - @NonNull GeneratedAndroidFirebaseAuth.InternalVerifyPhoneNumberRequest request, - @NonNull GeneratedAndroidFirebaseAuth.Result result) { - try { - String eventChannelName = METHOD_CHANNEL_NAME + "/phone/" + UUID.randomUUID().toString(); - EventChannel channel = new EventChannel(messenger, eventChannelName); - - MultiFactorSession multiFactorSession = null; - - if (request.getMultiFactorSessionId() != null) { - multiFactorSession = - FlutterFirebaseMultiFactor.multiFactorSessionMap.get(request.getMultiFactorSessionId()); - } - - final String multiFactorInfoId = request.getMultiFactorInfoId(); - PhoneMultiFactorInfo multiFactorInfo = null; - - if (multiFactorInfoId != null) { - for (String resolverId : FlutterFirebaseMultiFactor.multiFactorResolverMap.keySet()) { - for (MultiFactorInfo info : - FlutterFirebaseMultiFactor.multiFactorResolverMap.get(resolverId).getHints()) { - if (info.getUid().equals(multiFactorInfoId) && info instanceof PhoneMultiFactorInfo) { - multiFactorInfo = (PhoneMultiFactorInfo) info; - break; - } - } - } - } - - PhoneNumberVerificationStreamHandler handler = - new PhoneNumberVerificationStreamHandler( - getActivity(), - app, - request, - multiFactorSession, - multiFactorInfo, - credential -> { - int hashCode = credential.hashCode(); - authCredentials.put(hashCode, credential); - }); - - channel.setStreamHandler(handler); - streamHandlers.put(channel, handler); - - result.success(eventChannelName); - } catch (Exception e) { - result.error(e); - } - } - - @Override - public void revokeTokenWithAuthorizationCode( - @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, - @NonNull String authorizationCode, - @NonNull GeneratedAndroidFirebaseAuth.VoidResult result) { - // Should never get here as we throw Exception on Dart side. - result.success(); - } - - @Override - public void revokeAccessToken( - @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, - @NonNull String accessToken, - @NonNull GeneratedAndroidFirebaseAuth.VoidResult result) { - FirebaseAuth firebaseAuth = getAuthFromPigeon(app); - - firebaseAuth - .revokeAccessToken(accessToken) - .addOnCompleteListener( - task -> { - if (task.isSuccessful()) { - result.success(); - } else { - result.error( - FlutterFirebaseAuthPluginException.parserExceptionToFlutter( - task.getException())); - } - }); - } - - @Override - public void initializeRecaptchaConfig( - @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, - @NonNull GeneratedAndroidFirebaseAuth.VoidResult result) { - FirebaseAuth firebaseAuth = getAuthFromPigeon(app); - firebaseAuth - .initializeRecaptchaConfig() - .addOnCompleteListener( - task -> { - if (task.isSuccessful()) { - result.success(); - } else { - result.error( - FlutterFirebaseAuthPluginException.parserExceptionToFlutter( - task.getException())); - } - }); - } - - @Override - public Task> getPluginConstantsForFirebaseApp(FirebaseApp firebaseApp) { - TaskCompletionSource> taskCompletionSource = new TaskCompletionSource<>(); - - cachedThreadPool.execute( - () -> { - try { - Map constants = new HashMap<>(); - FirebaseAuth firebaseAuth = FirebaseAuth.getInstance(firebaseApp); - FirebaseUser firebaseUser = firebaseAuth.getCurrentUser(); - String languageCode = firebaseAuth.getLanguageCode(); - - GeneratedAndroidFirebaseAuth.InternalUserDetails user = - firebaseUser == null ? null : PigeonParser.parseFirebaseUser(firebaseUser); - - if (languageCode != null) { - constants.put("APP_LANGUAGE_CODE", languageCode); - } - - if (user != null) { - constants.put("APP_CURRENT_USER", PigeonParser.manuallyToList(user)); - } - - taskCompletionSource.setResult(constants); - } catch (Exception e) { - taskCompletionSource.setException(e); - } - }); - - return taskCompletionSource.getTask(); - } - - @Override - public Task didReinitializeFirebaseCore() { - TaskCompletionSource taskCompletionSource = new TaskCompletionSource<>(); - - cachedThreadPool.execute( - () -> { - try { - removeEventListeners(); - authCredentials.clear(); - taskCompletionSource.setResult(null); - } catch (Exception e) { - taskCompletionSource.setException(e); - } - }); - - return taskCompletionSource.getTask(); - } - - private void removeEventListeners() { - for (EventChannel eventChannel : streamHandlers.keySet()) { - StreamHandler streamHandler = streamHandlers.get(eventChannel); - if (streamHandler != null) { - streamHandler.onCancel(null); - } - eventChannel.setStreamHandler(null); - } - streamHandlers.clear(); - } -} diff --git a/packages/firebase_auth/firebase_auth/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthPluginException.java b/packages/firebase_auth/firebase_auth/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthPluginException.java deleted file mode 100644 index a42bcb56956d..000000000000 --- a/packages/firebase_auth/firebase_auth/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthPluginException.java +++ /dev/null @@ -1,157 +0,0 @@ -/* - * Copyright 2022, the Chromium project authors. Please see the AUTHORS file - * for details. All rights reserved. Use of this source code is governed by a - * BSD-style license that can be found in the LICENSE file. - */ - -package io.flutter.plugins.firebase.auth; - -import androidx.annotation.Nullable; -import com.google.firebase.FirebaseApiNotAvailableException; -import com.google.firebase.FirebaseNetworkException; -import com.google.firebase.FirebaseTooManyRequestsException; -import com.google.firebase.auth.AuthCredential; -import com.google.firebase.auth.FirebaseAuthException; -import com.google.firebase.auth.FirebaseAuthMultiFactorException; -import com.google.firebase.auth.FirebaseAuthUserCollisionException; -import com.google.firebase.auth.FirebaseAuthWeakPasswordException; -import com.google.firebase.auth.MultiFactorInfo; -import com.google.firebase.auth.MultiFactorResolver; -import com.google.firebase.auth.MultiFactorSession; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.UUID; - -public class FlutterFirebaseAuthPluginException { - - static GeneratedAndroidFirebaseAuth.FlutterError parserExceptionToFlutter( - @Nullable Exception nativeException) { - if (nativeException == null) { - return new GeneratedAndroidFirebaseAuth.FlutterError("UNKNOWN", null, null); - } - String code = "UNKNOWN"; - - String message = nativeException.getMessage(); - Map additionalData = new HashMap<>(); - - if (nativeException instanceof FirebaseAuthMultiFactorException) { - final FirebaseAuthMultiFactorException multiFactorException = - (FirebaseAuthMultiFactorException) nativeException; - Map output = new HashMap<>(); - - MultiFactorResolver multiFactorResolver = multiFactorException.getResolver(); - final List hints = multiFactorResolver.getHints(); - - final MultiFactorSession session = multiFactorResolver.getSession(); - final String sessionId = UUID.randomUUID().toString(); - FlutterFirebaseMultiFactor.multiFactorSessionMap.put(sessionId, session); - - final String resolverId = UUID.randomUUID().toString(); - FlutterFirebaseMultiFactor.multiFactorResolverMap.put(resolverId, multiFactorResolver); - - final List> pigeonHints = PigeonParser.multiFactorInfoToMap(hints); - - output.put( - Constants.APP_NAME, - multiFactorException.getResolver().getFirebaseAuth().getApp().getName()); - - output.put(Constants.MULTI_FACTOR_HINTS, pigeonHints); - - output.put(Constants.MULTI_FACTOR_SESSION_ID, sessionId); - output.put(Constants.MULTI_FACTOR_RESOLVER_ID, resolverId); - - return new GeneratedAndroidFirebaseAuth.FlutterError( - multiFactorException.getErrorCode(), multiFactorException.getLocalizedMessage(), output); - } - - if (nativeException instanceof FirebaseNetworkException - || (nativeException.getCause() != null - && nativeException.getCause() instanceof FirebaseNetworkException)) { - return new GeneratedAndroidFirebaseAuth.FlutterError( - "network-request-failed", - "A network error (such as timeout, interrupted connection or unreachable host) has" - + " occurred.", - null); - } - - if (nativeException instanceof FirebaseApiNotAvailableException - || (nativeException.getCause() != null - && nativeException.getCause() instanceof FirebaseApiNotAvailableException)) { - return new GeneratedAndroidFirebaseAuth.FlutterError( - "api-not-available", "The requested API is not available.", null); - } - - if (nativeException instanceof FirebaseTooManyRequestsException - || (nativeException.getCause() != null - && nativeException.getCause() instanceof FirebaseTooManyRequestsException)) { - return new GeneratedAndroidFirebaseAuth.FlutterError( - "too-many-requests", - "We have blocked all requests from this device due to unusual activity. Try again later.", - null); - } - - // Manual message overrides to match other platforms. - if (nativeException.getMessage() != null - && nativeException - .getMessage() - .startsWith("Cannot create PhoneAuthCredential without either verificationProof")) { - return new GeneratedAndroidFirebaseAuth.FlutterError( - "invalid-verification-code", - "The verification ID used to create the phone auth credential is invalid.", - null); - } - - if (message != null - && message.contains("User has already been linked to the given provider.")) { - return FlutterFirebaseAuthPluginException.alreadyLinkedProvider(); - } - - if (nativeException instanceof FirebaseAuthException) { - code = ((FirebaseAuthException) nativeException).getErrorCode(); - } - - if (nativeException instanceof FirebaseAuthWeakPasswordException) { - message = ((FirebaseAuthWeakPasswordException) nativeException).getReason(); - } - - if (nativeException instanceof FirebaseAuthUserCollisionException) { - String email = ((FirebaseAuthUserCollisionException) nativeException).getEmail(); - - if (email != null) { - additionalData.put("email", email); - } - - AuthCredential authCredential = - ((FirebaseAuthUserCollisionException) nativeException).getUpdatedCredential(); - - if (authCredential != null) { - additionalData.put("authCredential", PigeonParser.parseAuthCredential(authCredential)); - } - } - - return new GeneratedAndroidFirebaseAuth.FlutterError(code, message, additionalData); - } - - static GeneratedAndroidFirebaseAuth.FlutterError noUser() { - return new GeneratedAndroidFirebaseAuth.FlutterError( - "NO_CURRENT_USER", "No user currently signed in.", null); - } - - static GeneratedAndroidFirebaseAuth.FlutterError invalidCredential() { - return new GeneratedAndroidFirebaseAuth.FlutterError( - "INVALID_CREDENTIAL", - "The supplied auth credential is malformed, has expired or is not currently supported.", - null); - } - - static GeneratedAndroidFirebaseAuth.FlutterError noSuchProvider() { - return new GeneratedAndroidFirebaseAuth.FlutterError( - "NO_SUCH_PROVIDER", "User was not linked to an account with the given provider.", null); - } - - static GeneratedAndroidFirebaseAuth.FlutterError alreadyLinkedProvider() { - return new GeneratedAndroidFirebaseAuth.FlutterError( - "PROVIDER_ALREADY_LINKED", "User has already been linked to the given provider.", null); - } -} diff --git a/packages/firebase_auth/firebase_auth/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthRegistrar.java b/packages/firebase_auth/firebase_auth/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthRegistrar.java deleted file mode 100644 index 1476a9bd0653..000000000000 --- a/packages/firebase_auth/firebase_auth/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthRegistrar.java +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2019 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package io.flutter.plugins.firebase.auth; - -import androidx.annotation.Keep; -import com.google.firebase.components.Component; -import com.google.firebase.components.ComponentRegistrar; -import com.google.firebase.platforminfo.LibraryVersionComponent; -import java.util.Collections; -import java.util.List; - -@Keep -public class FlutterFirebaseAuthRegistrar implements ComponentRegistrar { - @Override - public List> getComponents() { - return Collections.>singletonList( - LibraryVersionComponent.create(BuildConfig.LIBRARY_NAME, BuildConfig.LIBRARY_VERSION)); - } -} diff --git a/packages/firebase_auth/firebase_auth/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthUser.java b/packages/firebase_auth/firebase_auth/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthUser.java deleted file mode 100644 index 7039a38f18e8..000000000000 --- a/packages/firebase_auth/firebase_auth/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthUser.java +++ /dev/null @@ -1,548 +0,0 @@ -/* - * Copyright 2023, the Chromium project authors. Please see the AUTHORS file - * for details. All rights reserved. Use of this source code is governed by a - * BSD-style license that can be found in the LICENSE file. - */ - -package io.flutter.plugins.firebase.auth; - -import static io.flutter.plugins.firebase.core.FlutterFirebasePlugin.cachedThreadPool; - -import android.app.Activity; -import android.net.Uri; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import com.google.android.gms.tasks.Tasks; -import com.google.firebase.FirebaseApp; -import com.google.firebase.auth.AuthCredential; -import com.google.firebase.auth.FirebaseAuth; -import com.google.firebase.auth.FirebaseUser; -import com.google.firebase.auth.GetTokenResult; -import com.google.firebase.auth.OAuthProvider; -import com.google.firebase.auth.PhoneAuthCredential; -import com.google.firebase.auth.UserProfileChangeRequest; -import java.util.Map; - -public class FlutterFirebaseAuthUser - implements GeneratedAndroidFirebaseAuth.FirebaseAuthUserHostApi { - - private Activity activity; - - public void setActivity(Activity activity) { - this.activity = activity; - } - - public static FirebaseUser getCurrentUserFromPigeon( - @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp pigeonApp) { - FirebaseApp app = FirebaseApp.getInstance(pigeonApp.getAppName()); - FirebaseAuth auth = FirebaseAuth.getInstance(app); - if (pigeonApp.getTenantId() != null) { - auth.setTenantId(pigeonApp.getTenantId()); - } - - return auth.getCurrentUser(); - } - - @Override - public void delete( - @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, - @NonNull GeneratedAndroidFirebaseAuth.VoidResult result) { - FirebaseUser firebaseUser = getCurrentUserFromPigeon(app); - - if (firebaseUser == null) { - result.error(FlutterFirebaseAuthPluginException.noUser()); - return; - } - - firebaseUser - .delete() - .addOnCompleteListener( - task -> { - if (task.isSuccessful()) { - result.success(); - } else { - result.error( - FlutterFirebaseAuthPluginException.parserExceptionToFlutter( - task.getException())); - } - }); - } - - @Override - public void getIdToken( - @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, - @NonNull Boolean forceRefresh, - @NonNull - GeneratedAndroidFirebaseAuth.Result - result) { - cachedThreadPool.execute( - () -> { - FirebaseUser firebaseUser = getCurrentUserFromPigeon(app); - - if (firebaseUser == null) { - result.error(FlutterFirebaseAuthPluginException.noUser()); - return; - } - try { - GetTokenResult response = Tasks.await(firebaseUser.getIdToken(forceRefresh)); - result.success(PigeonParser.parseTokenResult(response)); - } catch (Exception exception) { - result.error(FlutterFirebaseAuthPluginException.parserExceptionToFlutter(exception)); - } - }); - } - - @Override - public void linkWithCredential( - @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, - @NonNull Map input, - @NonNull - GeneratedAndroidFirebaseAuth.Result - result) { - FirebaseUser firebaseUser = getCurrentUserFromPigeon(app); - AuthCredential credential = PigeonParser.getCredential(input); - - if (firebaseUser == null) { - result.error(FlutterFirebaseAuthPluginException.noUser()); - return; - } - - if (credential == null) { - result.error(FlutterFirebaseAuthPluginException.invalidCredential()); - return; - } - - firebaseUser - .linkWithCredential(credential) - .addOnCompleteListener( - task -> { - if (task.isSuccessful()) { - result.success(PigeonParser.parseAuthResult(task.getResult())); - } else { - result.error( - FlutterFirebaseAuthPluginException.parserExceptionToFlutter( - task.getException())); - } - }); - } - - @Override - public void linkWithProvider( - @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, - @NonNull GeneratedAndroidFirebaseAuth.InternalSignInProvider signInProvider, - @NonNull - GeneratedAndroidFirebaseAuth.Result - result) { - FirebaseUser firebaseUser = getCurrentUserFromPigeon(app); - - OAuthProvider.Builder provider = OAuthProvider.newBuilder(signInProvider.getProviderId()); - if (signInProvider.getScopes() != null) { - provider.setScopes(signInProvider.getScopes()); - } - if (signInProvider.getCustomParameters() != null) { - provider.addCustomParameters(signInProvider.getCustomParameters()); - } - - firebaseUser - .startActivityForLinkWithProvider(activity, provider.build()) - .addOnCompleteListener( - task -> { - if (task.isSuccessful()) { - result.success(PigeonParser.parseAuthResult(task.getResult())); - } else { - result.error( - FlutterFirebaseAuthPluginException.parserExceptionToFlutter( - task.getException())); - } - }); - } - - @Override - public void reauthenticateWithCredential( - @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, - @NonNull Map input, - @NonNull - GeneratedAndroidFirebaseAuth.Result - result) { - FirebaseUser firebaseUser = getCurrentUserFromPigeon(app); - AuthCredential credential = PigeonParser.getCredential(input); - - if (firebaseUser == null) { - result.error(FlutterFirebaseAuthPluginException.noUser()); - return; - } - - if (credential == null) { - result.error(FlutterFirebaseAuthPluginException.invalidCredential()); - return; - } - - firebaseUser - .reauthenticateAndRetrieveData(credential) - .addOnCompleteListener( - task -> { - if (task.isSuccessful()) { - result.success(PigeonParser.parseAuthResult(task.getResult())); - } else { - result.error( - FlutterFirebaseAuthPluginException.parserExceptionToFlutter( - task.getException())); - } - }); - } - - @Override - public void reauthenticateWithProvider( - @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, - @NonNull GeneratedAndroidFirebaseAuth.InternalSignInProvider signInProvider, - @NonNull - GeneratedAndroidFirebaseAuth.Result - result) { - FirebaseUser firebaseUser = getCurrentUserFromPigeon(app); - - OAuthProvider.Builder provider = OAuthProvider.newBuilder(signInProvider.getProviderId()); - if (signInProvider.getScopes() != null) { - provider.setScopes(signInProvider.getScopes()); - } - if (signInProvider.getCustomParameters() != null) { - provider.addCustomParameters(signInProvider.getCustomParameters()); - } - - firebaseUser - .startActivityForReauthenticateWithProvider(activity, provider.build()) - .addOnCompleteListener( - task -> { - if (task.isSuccessful()) { - result.success(PigeonParser.parseAuthResult(task.getResult())); - } else { - result.error( - FlutterFirebaseAuthPluginException.parserExceptionToFlutter( - task.getException())); - } - }); - } - - @Override - public void reload( - @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, - @NonNull - GeneratedAndroidFirebaseAuth.Result - result) { - FirebaseUser firebaseUser = getCurrentUserFromPigeon(app); - - if (firebaseUser == null) { - result.error(FlutterFirebaseAuthPluginException.noUser()); - return; - } - - firebaseUser - .reload() - .addOnCompleteListener( - task -> { - if (task.isSuccessful()) { - result.success(PigeonParser.parseFirebaseUser(firebaseUser)); - } else { - result.error( - FlutterFirebaseAuthPluginException.parserExceptionToFlutter( - task.getException())); - } - }); - } - - @Override - public void sendEmailVerification( - @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, - @Nullable GeneratedAndroidFirebaseAuth.InternalActionCodeSettings actionCodeSettings, - @NonNull GeneratedAndroidFirebaseAuth.VoidResult result) { - FirebaseUser firebaseUser = getCurrentUserFromPigeon(app); - - if (firebaseUser == null) { - result.error(FlutterFirebaseAuthPluginException.noUser()); - return; - } - - if (actionCodeSettings == null) { - firebaseUser - .sendEmailVerification() - .addOnCompleteListener( - task -> { - if (task.isSuccessful()) { - result.success(); - } else { - result.error( - FlutterFirebaseAuthPluginException.parserExceptionToFlutter( - task.getException())); - } - }); - return; - } - - firebaseUser - .sendEmailVerification(PigeonParser.getActionCodeSettings(actionCodeSettings)) - .addOnCompleteListener( - task -> { - if (task.isSuccessful()) { - result.success(); - } else { - result.error( - FlutterFirebaseAuthPluginException.parserExceptionToFlutter( - task.getException())); - } - }); - } - - @Override - public void unlink( - @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, - @NonNull String providerId, - @NonNull - GeneratedAndroidFirebaseAuth.Result - result) { - FirebaseUser firebaseUser = getCurrentUserFromPigeon(app); - - if (firebaseUser == null) { - result.error(FlutterFirebaseAuthPluginException.noUser()); - return; - } - - firebaseUser - .unlink(providerId) - .addOnCompleteListener( - task -> { - if (task.isSuccessful()) { - result.success(PigeonParser.parseAuthResult(task.getResult())); - } else { - Exception exception = task.getException(); - if (exception - .getMessage() - .contains("User was not linked to an account with the given provider.")) { - result.error(FlutterFirebaseAuthPluginException.noSuchProvider()); - } else { - result.error( - FlutterFirebaseAuthPluginException.parserExceptionToFlutter(exception)); - } - } - }); - } - - @Override - public void updateEmail( - @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, - @NonNull String newEmail, - @NonNull - GeneratedAndroidFirebaseAuth.Result - result) { - FirebaseUser firebaseUser = getCurrentUserFromPigeon(app); - - if (firebaseUser == null) { - result.error(FlutterFirebaseAuthPluginException.noUser()); - return; - } - - firebaseUser - .updateEmail(newEmail) - .addOnCompleteListener( - task -> { - if (task.isSuccessful()) { - firebaseUser - .reload() - .addOnCompleteListener( - reloadTask -> { - if (reloadTask.isSuccessful()) { - result.success(PigeonParser.parseFirebaseUser(firebaseUser)); - } else { - result.error( - FlutterFirebaseAuthPluginException.parserExceptionToFlutter( - reloadTask.getException())); - } - }); - } else { - result.error( - FlutterFirebaseAuthPluginException.parserExceptionToFlutter( - task.getException())); - } - }); - } - - @Override - public void updatePassword( - @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, - @NonNull String newPassword, - @NonNull - GeneratedAndroidFirebaseAuth.Result - result) { - FirebaseUser firebaseUser = getCurrentUserFromPigeon(app); - - if (firebaseUser == null) { - result.error(FlutterFirebaseAuthPluginException.noUser()); - return; - } - - firebaseUser - .updatePassword(newPassword) - .addOnCompleteListener( - task -> { - if (task.isSuccessful()) { - firebaseUser - .reload() - .addOnCompleteListener( - reloadTask -> { - if (reloadTask.isSuccessful()) { - result.success(PigeonParser.parseFirebaseUser(firebaseUser)); - } else { - result.error( - FlutterFirebaseAuthPluginException.parserExceptionToFlutter( - reloadTask.getException())); - } - }); - } else { - result.error( - FlutterFirebaseAuthPluginException.parserExceptionToFlutter( - task.getException())); - } - }); - } - - @Override - public void updatePhoneNumber( - @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, - @NonNull Map input, - @NonNull - GeneratedAndroidFirebaseAuth.Result - result) { - FirebaseUser firebaseUser = getCurrentUserFromPigeon(app); - - if (firebaseUser == null) { - result.error(FlutterFirebaseAuthPluginException.noUser()); - return; - } - - PhoneAuthCredential phoneAuthCredential = - (PhoneAuthCredential) PigeonParser.getCredential(input); - - if (phoneAuthCredential == null) { - result.error(FlutterFirebaseAuthPluginException.invalidCredential()); - return; - } - - firebaseUser - .updatePhoneNumber(phoneAuthCredential) - .addOnCompleteListener( - task -> { - if (task.isSuccessful()) { - firebaseUser - .reload() - .addOnCompleteListener( - reloadTask -> { - if (reloadTask.isSuccessful()) { - result.success(PigeonParser.parseFirebaseUser(firebaseUser)); - } else { - result.error( - FlutterFirebaseAuthPluginException.parserExceptionToFlutter( - reloadTask.getException())); - } - }); - } else { - result.error( - FlutterFirebaseAuthPluginException.parserExceptionToFlutter( - task.getException())); - } - }); - } - - @Override - public void updateProfile( - @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, - @NonNull GeneratedAndroidFirebaseAuth.InternalUserProfile profile, - @NonNull - GeneratedAndroidFirebaseAuth.Result - result) { - FirebaseUser firebaseUser = getCurrentUserFromPigeon(app); - - if (firebaseUser == null) { - result.error(FlutterFirebaseAuthPluginException.noUser()); - return; - } - - UserProfileChangeRequest.Builder builder = new UserProfileChangeRequest.Builder(); - - if (profile.getDisplayNameChanged()) { - builder.setDisplayName(profile.getDisplayName()); - } - - if (profile.getPhotoUrlChanged()) { - if (profile.getPhotoUrl() != null) { - builder.setPhotoUri(Uri.parse(profile.getPhotoUrl())); - } else { - builder.setPhotoUri(null); - } - } - - firebaseUser - .updateProfile(builder.build()) - .addOnCompleteListener( - task -> { - if (task.isSuccessful()) { - firebaseUser - .reload() - .addOnCompleteListener( - reloadTask -> { - if (reloadTask.isSuccessful()) { - result.success(PigeonParser.parseFirebaseUser(firebaseUser)); - } else { - result.error( - FlutterFirebaseAuthPluginException.parserExceptionToFlutter( - reloadTask.getException())); - } - }); - } else { - result.error( - FlutterFirebaseAuthPluginException.parserExceptionToFlutter( - task.getException())); - } - }); - } - - @Override - public void verifyBeforeUpdateEmail( - @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, - @NonNull String newEmail, - @Nullable GeneratedAndroidFirebaseAuth.InternalActionCodeSettings actionCodeSettings, - @NonNull GeneratedAndroidFirebaseAuth.VoidResult result) { - FirebaseUser firebaseUser = getCurrentUserFromPigeon(app); - - if (firebaseUser == null) { - result.error(FlutterFirebaseAuthPluginException.noUser()); - return; - } - - if (actionCodeSettings == null) { - firebaseUser - .verifyBeforeUpdateEmail(newEmail) - .addOnCompleteListener( - task -> { - if (task.isSuccessful()) { - result.success(); - } else { - result.error( - FlutterFirebaseAuthPluginException.parserExceptionToFlutter( - task.getException())); - } - }); - return; - } - - firebaseUser - .verifyBeforeUpdateEmail(newEmail, PigeonParser.getActionCodeSettings(actionCodeSettings)) - .addOnCompleteListener( - task -> { - if (task.isSuccessful()) { - result.success(); - } else { - result.error( - FlutterFirebaseAuthPluginException.parserExceptionToFlutter( - task.getException())); - } - }); - } -} diff --git a/packages/firebase_auth/firebase_auth/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseMultiFactor.java b/packages/firebase_auth/firebase_auth/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseMultiFactor.java deleted file mode 100644 index 1ba51914254e..000000000000 --- a/packages/firebase_auth/firebase_auth/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseMultiFactor.java +++ /dev/null @@ -1,252 +0,0 @@ -/* - * Copyright 2023, the Chromium project authors. Please see the AUTHORS file - * for details. All rights reserved. Use of this source code is governed by a - * BSD-style license that can be found in the LICENSE file. - */ - -package io.flutter.plugins.firebase.auth; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import com.google.firebase.auth.AuthResult; -import com.google.firebase.auth.FirebaseUser; -import com.google.firebase.auth.MultiFactor; -import com.google.firebase.auth.MultiFactorAssertion; -import com.google.firebase.auth.MultiFactorInfo; -import com.google.firebase.auth.MultiFactorResolver; -import com.google.firebase.auth.MultiFactorSession; -import com.google.firebase.auth.PhoneAuthCredential; -import com.google.firebase.auth.PhoneAuthProvider; -import com.google.firebase.auth.PhoneMultiFactorGenerator; -import com.google.firebase.internal.api.FirebaseNoSignedInUserException; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.UUID; - -public class FlutterFirebaseMultiFactor - implements GeneratedAndroidFirebaseAuth.MultiFactorUserHostApi, - GeneratedAndroidFirebaseAuth.MultiFactoResolverHostApi { - - // Map an app id to a map of user id to a MultiFactorUser object. - static final Map> multiFactorUserMap = new HashMap<>(); - - // Map an id to a MultiFactorSession object. - static final Map multiFactorSessionMap = new HashMap<>(); - - // Map an id to a MultiFactorResolver object. - static final Map multiFactorResolverMap = new HashMap<>(); - - static final Map multiFactorAssertionMap = new HashMap<>(); - - MultiFactor getAppMultiFactor(@NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app) - throws FirebaseNoSignedInUserException { - final FirebaseUser currentUser = FlutterFirebaseAuthUser.getCurrentUserFromPigeon(app); - if (currentUser == null) { - throw new FirebaseNoSignedInUserException("No user is signed in"); - } - if (multiFactorUserMap.get(app.getAppName()) == null) { - multiFactorUserMap.put(app.getAppName(), new HashMap<>()); - } - - final Map appMultiFactorUser = multiFactorUserMap.get(app.getAppName()); - if (appMultiFactorUser.get(currentUser.getUid()) == null) { - appMultiFactorUser.put(currentUser.getUid(), currentUser.getMultiFactor()); - } - - return appMultiFactorUser.get(currentUser.getUid()); - } - - @Override - public void enrollPhone( - @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, - @NonNull GeneratedAndroidFirebaseAuth.InternalPhoneMultiFactorAssertion assertion, - @Nullable String displayName, - @NonNull GeneratedAndroidFirebaseAuth.VoidResult result) { - final MultiFactor multiFactor; - try { - multiFactor = getAppMultiFactor(app); - } catch (FirebaseNoSignedInUserException e) { - result.error(e); - return; - } - - PhoneAuthCredential credential = - PhoneAuthProvider.getCredential( - assertion.getVerificationId(), assertion.getVerificationCode()); - - MultiFactorAssertion multiFactorAssertion = PhoneMultiFactorGenerator.getAssertion(credential); - - multiFactor - .enroll(multiFactorAssertion, displayName) - .addOnCompleteListener( - task -> { - if (task.isSuccessful()) { - result.success(); - } else { - result.error( - FlutterFirebaseAuthPluginException.parserExceptionToFlutter( - task.getException())); - } - }); - } - - @Override - public void enrollTotp( - @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, - @NonNull String assertionId, - @Nullable String displayName, - @NonNull GeneratedAndroidFirebaseAuth.VoidResult result) { - final MultiFactor multiFactor; - try { - multiFactor = getAppMultiFactor(app); - } catch (FirebaseNoSignedInUserException e) { - result.error(e); - return; - } - - final MultiFactorAssertion multiFactorAssertion = multiFactorAssertionMap.get(assertionId); - - assert multiFactorAssertion != null; - multiFactor - .enroll(multiFactorAssertion, displayName) - .addOnCompleteListener( - task -> { - if (task.isSuccessful()) { - result.success(); - } else { - result.error( - FlutterFirebaseAuthPluginException.parserExceptionToFlutter( - task.getException())); - } - }); - } - - @Override - public void getSession( - @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, - @NonNull - GeneratedAndroidFirebaseAuth.Result< - GeneratedAndroidFirebaseAuth.InternalMultiFactorSession> - result) { - final MultiFactor multiFactor; - try { - multiFactor = getAppMultiFactor(app); - } catch (FirebaseNoSignedInUserException e) { - result.error(e); - return; - } - - multiFactor - .getSession() - .addOnCompleteListener( - task -> { - if (task.isSuccessful()) { - final MultiFactorSession sessionResult = task.getResult(); - final String id = UUID.randomUUID().toString(); - multiFactorSessionMap.put(id, sessionResult); - result.success( - new GeneratedAndroidFirebaseAuth.InternalMultiFactorSession.Builder() - .setId(id) - .build()); - } else { - result.error( - FlutterFirebaseAuthPluginException.parserExceptionToFlutter( - task.getException())); - } - }); - } - - @Override - public void unenroll( - @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, - @NonNull String factorUid, - @NonNull GeneratedAndroidFirebaseAuth.VoidResult result) { - final MultiFactor multiFactor; - try { - multiFactor = getAppMultiFactor(app); - } catch (FirebaseNoSignedInUserException e) { - result.error(FlutterFirebaseAuthPluginException.parserExceptionToFlutter(e)); - return; - } - - multiFactor - .unenroll(factorUid) - .addOnCompleteListener( - task -> { - if (task.isSuccessful()) { - result.success(); - } else { - result.error( - FlutterFirebaseAuthPluginException.parserExceptionToFlutter( - task.getException())); - } - }); - } - - @Override - public void getEnrolledFactors( - @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, - @NonNull - GeneratedAndroidFirebaseAuth.Result< - List> - result) { - final MultiFactor multiFactor; - try { - multiFactor = getAppMultiFactor(app); - } catch (FirebaseNoSignedInUserException e) { - result.error(e); - return; - } - - final List factors = multiFactor.getEnrolledFactors(); - - final List resultFactors = - PigeonParser.multiFactorInfoToPigeon(factors); - - result.success(resultFactors); - } - - @Override - public void resolveSignIn( - @NonNull String resolverId, - @Nullable GeneratedAndroidFirebaseAuth.InternalPhoneMultiFactorAssertion assertion, - @Nullable String totpAssertionId, - @NonNull - GeneratedAndroidFirebaseAuth.Result - result) { - final MultiFactorResolver resolver = multiFactorResolverMap.get(resolverId); - - if (resolver == null) { - result.error( - FlutterFirebaseAuthPluginException.parserExceptionToFlutter( - new Exception("Resolver not found"))); - return; - } - - MultiFactorAssertion multiFactorAssertion; - - if (assertion != null) { - PhoneAuthCredential credential = - PhoneAuthProvider.getCredential( - assertion.getVerificationId(), assertion.getVerificationCode()); - multiFactorAssertion = PhoneMultiFactorGenerator.getAssertion(credential); - } else { - multiFactorAssertion = multiFactorAssertionMap.get(totpAssertionId); - } - - resolver - .resolveSignIn(multiFactorAssertion) - .addOnCompleteListener( - task -> { - if (task.isSuccessful()) { - final AuthResult authResult = task.getResult(); - result.success(PigeonParser.parseAuthResult(authResult)); - } else { - result.error( - FlutterFirebaseAuthPluginException.parserExceptionToFlutter( - task.getException())); - } - }); - } -} diff --git a/packages/firebase_auth/firebase_auth/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseTotpMultiFactor.java b/packages/firebase_auth/firebase_auth/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseTotpMultiFactor.java deleted file mode 100644 index 9761a5df73f2..000000000000 --- a/packages/firebase_auth/firebase_auth/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseTotpMultiFactor.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright 2023, the Chromium project authors. Please see the AUTHORS file - * for details. All rights reserved. Use of this source code is governed by a - * BSD-style license that can be found in the LICENSE file. - */ - -package io.flutter.plugins.firebase.auth; - -import androidx.annotation.NonNull; -import com.google.firebase.auth.MultiFactorSession; -import com.google.firebase.auth.TotpMultiFactorAssertion; -import com.google.firebase.auth.TotpMultiFactorGenerator; -import com.google.firebase.auth.TotpSecret; -import java.util.HashMap; -import java.util.Map; -import java.util.UUID; - -public class FlutterFirebaseTotpMultiFactor - implements GeneratedAndroidFirebaseAuth.MultiFactorTotpHostApi { - - // Map an app id to a map of user id to a TotpSecret object. - static final Map multiFactorSecret = new HashMap<>(); - - @Override - public void generateSecret( - @NonNull String sessionId, - @NonNull - GeneratedAndroidFirebaseAuth.Result - result) { - MultiFactorSession multiFactorSession = - FlutterFirebaseMultiFactor.multiFactorSessionMap.get(sessionId); - - assert multiFactorSession != null; - TotpMultiFactorGenerator.generateSecret(multiFactorSession) - .addOnCompleteListener( - task -> { - if (task.isSuccessful()) { - TotpSecret secret = task.getResult(); - multiFactorSecret.put(secret.getSharedSecretKey(), secret); - result.success( - new GeneratedAndroidFirebaseAuth.InternalTotpSecret.Builder() - .setCodeIntervalSeconds((long) secret.getCodeIntervalSeconds()) - .setCodeLength((long) secret.getCodeLength()) - .setSecretKey(secret.getSharedSecretKey()) - .setHashingAlgorithm(secret.getHashAlgorithm()) - .setEnrollmentCompletionDeadline(secret.getEnrollmentCompletionDeadline()) - .build()); - } else { - result.error( - FlutterFirebaseAuthPluginException.parserExceptionToFlutter( - task.getException())); - } - }); - } - - @Override - public void getAssertionForEnrollment( - @NonNull String secretKey, - @NonNull String oneTimePassword, - @NonNull GeneratedAndroidFirebaseAuth.Result result) { - final TotpSecret secret = multiFactorSecret.get(secretKey); - - assert secret != null; - TotpMultiFactorAssertion assertion = - TotpMultiFactorGenerator.getAssertionForEnrollment(secret, oneTimePassword); - String assertionId = UUID.randomUUID().toString(); - FlutterFirebaseMultiFactor.multiFactorAssertionMap.put(assertionId, assertion); - result.success(assertionId); - } - - @Override - public void getAssertionForSignIn( - @NonNull String enrollmentId, - @NonNull String oneTimePassword, - @NonNull GeneratedAndroidFirebaseAuth.Result result) { - TotpMultiFactorAssertion assertion = - TotpMultiFactorGenerator.getAssertionForSignIn(enrollmentId, oneTimePassword); - String assertionId = UUID.randomUUID().toString(); - FlutterFirebaseMultiFactor.multiFactorAssertionMap.put(assertionId, assertion); - result.success(assertionId); - } -} diff --git a/packages/firebase_auth/firebase_auth/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseTotpSecret.java b/packages/firebase_auth/firebase_auth/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseTotpSecret.java deleted file mode 100644 index 5b32f82826dd..000000000000 --- a/packages/firebase_auth/firebase_auth/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseTotpSecret.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright 2023, the Chromium project authors. Please see the AUTHORS file - * for details. All rights reserved. Use of this source code is governed by a - * BSD-style license that can be found in the LICENSE file. - */ - -package io.flutter.plugins.firebase.auth; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import com.google.firebase.auth.TotpSecret; - -public class FlutterFirebaseTotpSecret - implements GeneratedAndroidFirebaseAuth.MultiFactorTotpSecretHostApi { - - @Override - public void generateQrCodeUrl( - @NonNull String secretKey, - @Nullable String accountName, - @Nullable String issuer, - @NonNull GeneratedAndroidFirebaseAuth.Result result) { - final TotpSecret secret = FlutterFirebaseTotpMultiFactor.multiFactorSecret.get(secretKey); - - assert secret != null; - if (accountName == null || issuer == null) { - result.success(secret.generateQrCodeUrl()); - return; - } - result.success(secret.generateQrCodeUrl(accountName, issuer)); - } - - @Override - public void openInOtpApp( - @NonNull String secretKey, - @NonNull String qrCodeUrl, - @NonNull GeneratedAndroidFirebaseAuth.VoidResult result) { - final TotpSecret secret = FlutterFirebaseTotpMultiFactor.multiFactorSecret.get(secretKey); - assert secret != null; - secret.openInOtpApp(qrCodeUrl); - result.success(); - } -} diff --git a/packages/firebase_auth/firebase_auth/android/src/main/java/io/flutter/plugins/firebase/auth/GeneratedAndroidFirebaseAuth.java b/packages/firebase_auth/firebase_auth/android/src/main/java/io/flutter/plugins/firebase/auth/GeneratedAndroidFirebaseAuth.java deleted file mode 100644 index 5aaa168b70e8..000000000000 --- a/packages/firebase_auth/firebase_auth/android/src/main/java/io/flutter/plugins/firebase/auth/GeneratedAndroidFirebaseAuth.java +++ /dev/null @@ -1,5308 +0,0 @@ -// Copyright 2023, the Chromium project authors. Please see the AUTHORS file -// for details. All rights reserved. Use of this source code is governed by a -// BSD-style license that can be found in the LICENSE file. -// Autogenerated from Pigeon (v26.3.4), do not edit directly. -// See also: https://pub.dev/packages/pigeon - -package io.flutter.plugins.firebase.auth; - -import static java.lang.annotation.ElementType.METHOD; -import static java.lang.annotation.RetentionPolicy.CLASS; - -import android.util.Log; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import io.flutter.plugin.common.BasicMessageChannel; -import io.flutter.plugin.common.BinaryMessenger; -import io.flutter.plugin.common.MessageCodec; -import io.flutter.plugin.common.StandardMessageCodec; -import java.io.ByteArrayOutputStream; -import java.lang.annotation.Retention; -import java.lang.annotation.Target; -import java.nio.ByteBuffer; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Map; - -/** Generated class from Pigeon. */ -@SuppressWarnings({"unused", "unchecked", "CodeBlock2Expr", "RedundantSuppression", "serial"}) -public class GeneratedAndroidFirebaseAuth { - static boolean pigeonDoubleEquals(double a, double b) { - // Normalize -0.0 to 0.0 and handle NaN equality. - return (a == 0.0 ? 0.0 : a) == (b == 0.0 ? 0.0 : b) || (Double.isNaN(a) && Double.isNaN(b)); - } - - static boolean pigeonFloatEquals(float a, float b) { - // Normalize -0.0 to 0.0 and handle NaN equality. - return (a == 0.0f ? 0.0f : a) == (b == 0.0f ? 0.0f : b) || (Float.isNaN(a) && Float.isNaN(b)); - } - - static int pigeonDoubleHashCode(double d) { - // Normalize -0.0 to 0.0 and handle NaN to ensure consistent hash codes. - if (d == 0.0) { - d = 0.0; - } - long bits = Double.doubleToLongBits(d); - return (int) (bits ^ (bits >>> 32)); - } - - static int pigeonFloatHashCode(float f) { - // Normalize -0.0 to 0.0 and handle NaN to ensure consistent hash codes. - if (f == 0.0f) { - f = 0.0f; - } - return Float.floatToIntBits(f); - } - - static boolean pigeonDeepEquals(Object a, Object b) { - if (a == b) { - return true; - } - if (a == null || b == null) { - return false; - } - if (a instanceof byte[] && b instanceof byte[]) { - return Arrays.equals((byte[]) a, (byte[]) b); - } - if (a instanceof int[] && b instanceof int[]) { - return Arrays.equals((int[]) a, (int[]) b); - } - if (a instanceof long[] && b instanceof long[]) { - return Arrays.equals((long[]) a, (long[]) b); - } - if (a instanceof double[] && b instanceof double[]) { - double[] da = (double[]) a; - double[] db = (double[]) b; - if (da.length != db.length) { - return false; - } - for (int i = 0; i < da.length; i++) { - if (!pigeonDoubleEquals(da[i], db[i])) { - return false; - } - } - return true; - } - if (a instanceof List && b instanceof List) { - List listA = (List) a; - List listB = (List) b; - if (listA.size() != listB.size()) { - return false; - } - for (int i = 0; i < listA.size(); i++) { - if (!pigeonDeepEquals(listA.get(i), listB.get(i))) { - return false; - } - } - return true; - } - if (a instanceof Map && b instanceof Map) { - Map mapA = (Map) a; - Map mapB = (Map) b; - if (mapA.size() != mapB.size()) { - return false; - } - for (Map.Entry entryA : mapA.entrySet()) { - Object keyA = entryA.getKey(); - Object valueA = entryA.getValue(); - boolean found = false; - for (Map.Entry entryB : mapB.entrySet()) { - Object keyB = entryB.getKey(); - if (pigeonDeepEquals(keyA, keyB)) { - Object valueB = entryB.getValue(); - if (pigeonDeepEquals(valueA, valueB)) { - found = true; - break; - } else { - return false; - } - } - } - if (!found) { - return false; - } - } - return true; - } - if (a instanceof Double && b instanceof Double) { - return pigeonDoubleEquals((double) a, (double) b); - } - if (a instanceof Float && b instanceof Float) { - return pigeonFloatEquals((float) a, (float) b); - } - return a.equals(b); - } - - static int pigeonDeepHashCode(Object value) { - if (value == null) { - return 0; - } - if (value instanceof byte[]) { - return Arrays.hashCode((byte[]) value); - } - if (value instanceof int[]) { - return Arrays.hashCode((int[]) value); - } - if (value instanceof long[]) { - return Arrays.hashCode((long[]) value); - } - if (value instanceof double[]) { - double[] da = (double[]) value; - int result = 1; - for (double d : da) { - result = 31 * result + pigeonDoubleHashCode(d); - } - return result; - } - if (value instanceof List) { - int result = 1; - for (Object item : (List) value) { - result = 31 * result + pigeonDeepHashCode(item); - } - return result; - } - if (value instanceof Map) { - int result = 0; - for (Map.Entry entry : ((Map) value).entrySet()) { - result += - ((pigeonDeepHashCode(entry.getKey()) * 31) ^ pigeonDeepHashCode(entry.getValue())); - } - return result; - } - if (value instanceof Object[]) { - int result = 1; - for (Object item : (Object[]) value) { - result = 31 * result + pigeonDeepHashCode(item); - } - return result; - } - if (value instanceof Double) { - return pigeonDoubleHashCode((double) value); - } - if (value instanceof Float) { - return pigeonFloatHashCode((float) value); - } - return value.hashCode(); - } - - /** Error class for passing custom error details to Flutter via a thrown PlatformException. */ - public static class FlutterError extends RuntimeException { - - /** The error code. */ - public final String code; - - /** The error details. Must be a datatype supported by the api codec. */ - public final Object details; - - public FlutterError(@NonNull String code, @Nullable String message, @Nullable Object details) { - super(message); - this.code = code; - this.details = details; - } - } - - @NonNull - protected static ArrayList wrapError(@NonNull Throwable exception) { - ArrayList errorList = new ArrayList<>(3); - if (exception instanceof FlutterError) { - FlutterError error = (FlutterError) exception; - errorList.add(error.code); - errorList.add(error.getMessage()); - errorList.add(error.details); - } else { - errorList.add(exception.toString()); - errorList.add(exception.getClass().getSimpleName()); - errorList.add( - "Cause: " + exception.getCause() + ", Stacktrace: " + Log.getStackTraceString(exception)); - } - return errorList; - } - - @Target(METHOD) - @Retention(CLASS) - @interface CanIgnoreReturnValue {} - - /** The type of operation that generated the action code from calling [checkActionCode]. */ - public enum ActionCodeInfoOperation { - /** Unknown operation. */ - UNKNOWN(0), - /** Password reset code generated via [sendPasswordResetEmail]. */ - PASSWORD_RESET(1), - /** Email verification code generated via [User.sendEmailVerification]. */ - VERIFY_EMAIL(2), - /** Email change revocation code generated via [User.updateEmail]. */ - RECOVER_EMAIL(3), - /** Email sign in code generated via [sendSignInLinkToEmail]. */ - EMAIL_SIGN_IN(4), - /** Verify and change email code generated via [User.verifyBeforeUpdateEmail]. */ - VERIFY_AND_CHANGE_EMAIL(5), - /** Action code for reverting second factor addition. */ - REVERT_SECOND_FACTOR_ADDITION(6); - - final int index; - - ActionCodeInfoOperation(final int index) { - this.index = index; - } - } - - /** Generated class from Pigeon that represents data sent in messages. */ - public static final class InternalMultiFactorSession { - private @NonNull String id; - - public @NonNull String getId() { - return id; - } - - public void setId(@NonNull String setterArg) { - if (setterArg == null) { - throw new IllegalStateException("Nonnull field \"id\" is null."); - } - this.id = setterArg; - } - - /** Constructor is non-public to enforce null safety; use Builder. */ - InternalMultiFactorSession() {} - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - InternalMultiFactorSession that = (InternalMultiFactorSession) o; - return pigeonDeepEquals(id, that.id); - } - - @Override - public int hashCode() { - Object[] fields = new Object[] {getClass(), id}; - return pigeonDeepHashCode(fields); - } - - public static final class Builder { - - private @Nullable String id; - - @CanIgnoreReturnValue - public @NonNull Builder setId(@NonNull String setterArg) { - this.id = setterArg; - return this; - } - - public @NonNull InternalMultiFactorSession build() { - InternalMultiFactorSession pigeonReturn = new InternalMultiFactorSession(); - pigeonReturn.setId(id); - return pigeonReturn; - } - } - - @NonNull - public ArrayList toList() { - ArrayList toListResult = new ArrayList<>(1); - toListResult.add(id); - return toListResult; - } - - static @NonNull InternalMultiFactorSession fromList(@NonNull ArrayList pigeonVar_list) { - InternalMultiFactorSession pigeonResult = new InternalMultiFactorSession(); - Object id = pigeonVar_list.get(0); - pigeonResult.setId((String) id); - return pigeonResult; - } - } - - /** Generated class from Pigeon that represents data sent in messages. */ - public static final class InternalPhoneMultiFactorAssertion { - private @NonNull String verificationId; - - public @NonNull String getVerificationId() { - return verificationId; - } - - public void setVerificationId(@NonNull String setterArg) { - if (setterArg == null) { - throw new IllegalStateException("Nonnull field \"verificationId\" is null."); - } - this.verificationId = setterArg; - } - - private @NonNull String verificationCode; - - public @NonNull String getVerificationCode() { - return verificationCode; - } - - public void setVerificationCode(@NonNull String setterArg) { - if (setterArg == null) { - throw new IllegalStateException("Nonnull field \"verificationCode\" is null."); - } - this.verificationCode = setterArg; - } - - /** Constructor is non-public to enforce null safety; use Builder. */ - InternalPhoneMultiFactorAssertion() {} - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - InternalPhoneMultiFactorAssertion that = (InternalPhoneMultiFactorAssertion) o; - return pigeonDeepEquals(verificationId, that.verificationId) - && pigeonDeepEquals(verificationCode, that.verificationCode); - } - - @Override - public int hashCode() { - Object[] fields = new Object[] {getClass(), verificationId, verificationCode}; - return pigeonDeepHashCode(fields); - } - - public static final class Builder { - - private @Nullable String verificationId; - - @CanIgnoreReturnValue - public @NonNull Builder setVerificationId(@NonNull String setterArg) { - this.verificationId = setterArg; - return this; - } - - private @Nullable String verificationCode; - - @CanIgnoreReturnValue - public @NonNull Builder setVerificationCode(@NonNull String setterArg) { - this.verificationCode = setterArg; - return this; - } - - public @NonNull InternalPhoneMultiFactorAssertion build() { - InternalPhoneMultiFactorAssertion pigeonReturn = new InternalPhoneMultiFactorAssertion(); - pigeonReturn.setVerificationId(verificationId); - pigeonReturn.setVerificationCode(verificationCode); - return pigeonReturn; - } - } - - @NonNull - public ArrayList toList() { - ArrayList toListResult = new ArrayList<>(2); - toListResult.add(verificationId); - toListResult.add(verificationCode); - return toListResult; - } - - static @NonNull InternalPhoneMultiFactorAssertion fromList( - @NonNull ArrayList pigeonVar_list) { - InternalPhoneMultiFactorAssertion pigeonResult = new InternalPhoneMultiFactorAssertion(); - Object verificationId = pigeonVar_list.get(0); - pigeonResult.setVerificationId((String) verificationId); - Object verificationCode = pigeonVar_list.get(1); - pigeonResult.setVerificationCode((String) verificationCode); - return pigeonResult; - } - } - - /** Generated class from Pigeon that represents data sent in messages. */ - public static final class InternalMultiFactorInfo { - private @Nullable String displayName; - - public @Nullable String getDisplayName() { - return displayName; - } - - public void setDisplayName(@Nullable String setterArg) { - this.displayName = setterArg; - } - - private @NonNull Double enrollmentTimestamp; - - public @NonNull Double getEnrollmentTimestamp() { - return enrollmentTimestamp; - } - - public void setEnrollmentTimestamp(@NonNull Double setterArg) { - if (setterArg == null) { - throw new IllegalStateException("Nonnull field \"enrollmentTimestamp\" is null."); - } - this.enrollmentTimestamp = setterArg; - } - - private @Nullable String factorId; - - public @Nullable String getFactorId() { - return factorId; - } - - public void setFactorId(@Nullable String setterArg) { - this.factorId = setterArg; - } - - private @NonNull String uid; - - public @NonNull String getUid() { - return uid; - } - - public void setUid(@NonNull String setterArg) { - if (setterArg == null) { - throw new IllegalStateException("Nonnull field \"uid\" is null."); - } - this.uid = setterArg; - } - - private @Nullable String phoneNumber; - - public @Nullable String getPhoneNumber() { - return phoneNumber; - } - - public void setPhoneNumber(@Nullable String setterArg) { - this.phoneNumber = setterArg; - } - - /** Constructor is non-public to enforce null safety; use Builder. */ - InternalMultiFactorInfo() {} - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - InternalMultiFactorInfo that = (InternalMultiFactorInfo) o; - return pigeonDeepEquals(displayName, that.displayName) - && pigeonDeepEquals(enrollmentTimestamp, that.enrollmentTimestamp) - && pigeonDeepEquals(factorId, that.factorId) - && pigeonDeepEquals(uid, that.uid) - && pigeonDeepEquals(phoneNumber, that.phoneNumber); - } - - @Override - public int hashCode() { - Object[] fields = - new Object[] {getClass(), displayName, enrollmentTimestamp, factorId, uid, phoneNumber}; - return pigeonDeepHashCode(fields); - } - - public static final class Builder { - - private @Nullable String displayName; - - @CanIgnoreReturnValue - public @NonNull Builder setDisplayName(@Nullable String setterArg) { - this.displayName = setterArg; - return this; - } - - private @Nullable Double enrollmentTimestamp; - - @CanIgnoreReturnValue - public @NonNull Builder setEnrollmentTimestamp(@NonNull Double setterArg) { - this.enrollmentTimestamp = setterArg; - return this; - } - - private @Nullable String factorId; - - @CanIgnoreReturnValue - public @NonNull Builder setFactorId(@Nullable String setterArg) { - this.factorId = setterArg; - return this; - } - - private @Nullable String uid; - - @CanIgnoreReturnValue - public @NonNull Builder setUid(@NonNull String setterArg) { - this.uid = setterArg; - return this; - } - - private @Nullable String phoneNumber; - - @CanIgnoreReturnValue - public @NonNull Builder setPhoneNumber(@Nullable String setterArg) { - this.phoneNumber = setterArg; - return this; - } - - public @NonNull InternalMultiFactorInfo build() { - InternalMultiFactorInfo pigeonReturn = new InternalMultiFactorInfo(); - pigeonReturn.setDisplayName(displayName); - pigeonReturn.setEnrollmentTimestamp(enrollmentTimestamp); - pigeonReturn.setFactorId(factorId); - pigeonReturn.setUid(uid); - pigeonReturn.setPhoneNumber(phoneNumber); - return pigeonReturn; - } - } - - @NonNull - public ArrayList toList() { - ArrayList toListResult = new ArrayList<>(5); - toListResult.add(displayName); - toListResult.add(enrollmentTimestamp); - toListResult.add(factorId); - toListResult.add(uid); - toListResult.add(phoneNumber); - return toListResult; - } - - static @NonNull InternalMultiFactorInfo fromList(@NonNull ArrayList pigeonVar_list) { - InternalMultiFactorInfo pigeonResult = new InternalMultiFactorInfo(); - Object displayName = pigeonVar_list.get(0); - pigeonResult.setDisplayName((String) displayName); - Object enrollmentTimestamp = pigeonVar_list.get(1); - pigeonResult.setEnrollmentTimestamp((Double) enrollmentTimestamp); - Object factorId = pigeonVar_list.get(2); - pigeonResult.setFactorId((String) factorId); - Object uid = pigeonVar_list.get(3); - pigeonResult.setUid((String) uid); - Object phoneNumber = pigeonVar_list.get(4); - pigeonResult.setPhoneNumber((String) phoneNumber); - return pigeonResult; - } - } - - /** Generated class from Pigeon that represents data sent in messages. */ - public static final class AuthPigeonFirebaseApp { - private @NonNull String appName; - - public @NonNull String getAppName() { - return appName; - } - - public void setAppName(@NonNull String setterArg) { - if (setterArg == null) { - throw new IllegalStateException("Nonnull field \"appName\" is null."); - } - this.appName = setterArg; - } - - private @Nullable String tenantId; - - public @Nullable String getTenantId() { - return tenantId; - } - - public void setTenantId(@Nullable String setterArg) { - this.tenantId = setterArg; - } - - private @Nullable String customAuthDomain; - - public @Nullable String getCustomAuthDomain() { - return customAuthDomain; - } - - public void setCustomAuthDomain(@Nullable String setterArg) { - this.customAuthDomain = setterArg; - } - - /** Constructor is non-public to enforce null safety; use Builder. */ - AuthPigeonFirebaseApp() {} - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - AuthPigeonFirebaseApp that = (AuthPigeonFirebaseApp) o; - return pigeonDeepEquals(appName, that.appName) - && pigeonDeepEquals(tenantId, that.tenantId) - && pigeonDeepEquals(customAuthDomain, that.customAuthDomain); - } - - @Override - public int hashCode() { - Object[] fields = new Object[] {getClass(), appName, tenantId, customAuthDomain}; - return pigeonDeepHashCode(fields); - } - - public static final class Builder { - - private @Nullable String appName; - - @CanIgnoreReturnValue - public @NonNull Builder setAppName(@NonNull String setterArg) { - this.appName = setterArg; - return this; - } - - private @Nullable String tenantId; - - @CanIgnoreReturnValue - public @NonNull Builder setTenantId(@Nullable String setterArg) { - this.tenantId = setterArg; - return this; - } - - private @Nullable String customAuthDomain; - - @CanIgnoreReturnValue - public @NonNull Builder setCustomAuthDomain(@Nullable String setterArg) { - this.customAuthDomain = setterArg; - return this; - } - - public @NonNull AuthPigeonFirebaseApp build() { - AuthPigeonFirebaseApp pigeonReturn = new AuthPigeonFirebaseApp(); - pigeonReturn.setAppName(appName); - pigeonReturn.setTenantId(tenantId); - pigeonReturn.setCustomAuthDomain(customAuthDomain); - return pigeonReturn; - } - } - - @NonNull - public ArrayList toList() { - ArrayList toListResult = new ArrayList<>(3); - toListResult.add(appName); - toListResult.add(tenantId); - toListResult.add(customAuthDomain); - return toListResult; - } - - static @NonNull AuthPigeonFirebaseApp fromList(@NonNull ArrayList pigeonVar_list) { - AuthPigeonFirebaseApp pigeonResult = new AuthPigeonFirebaseApp(); - Object appName = pigeonVar_list.get(0); - pigeonResult.setAppName((String) appName); - Object tenantId = pigeonVar_list.get(1); - pigeonResult.setTenantId((String) tenantId); - Object customAuthDomain = pigeonVar_list.get(2); - pigeonResult.setCustomAuthDomain((String) customAuthDomain); - return pigeonResult; - } - } - - /** Generated class from Pigeon that represents data sent in messages. */ - public static final class InternalActionCodeInfoData { - private @Nullable String email; - - public @Nullable String getEmail() { - return email; - } - - public void setEmail(@Nullable String setterArg) { - this.email = setterArg; - } - - private @Nullable String previousEmail; - - public @Nullable String getPreviousEmail() { - return previousEmail; - } - - public void setPreviousEmail(@Nullable String setterArg) { - this.previousEmail = setterArg; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - InternalActionCodeInfoData that = (InternalActionCodeInfoData) o; - return pigeonDeepEquals(email, that.email) - && pigeonDeepEquals(previousEmail, that.previousEmail); - } - - @Override - public int hashCode() { - Object[] fields = new Object[] {getClass(), email, previousEmail}; - return pigeonDeepHashCode(fields); - } - - public static final class Builder { - - private @Nullable String email; - - @CanIgnoreReturnValue - public @NonNull Builder setEmail(@Nullable String setterArg) { - this.email = setterArg; - return this; - } - - private @Nullable String previousEmail; - - @CanIgnoreReturnValue - public @NonNull Builder setPreviousEmail(@Nullable String setterArg) { - this.previousEmail = setterArg; - return this; - } - - public @NonNull InternalActionCodeInfoData build() { - InternalActionCodeInfoData pigeonReturn = new InternalActionCodeInfoData(); - pigeonReturn.setEmail(email); - pigeonReturn.setPreviousEmail(previousEmail); - return pigeonReturn; - } - } - - @NonNull - public ArrayList toList() { - ArrayList toListResult = new ArrayList<>(2); - toListResult.add(email); - toListResult.add(previousEmail); - return toListResult; - } - - static @NonNull InternalActionCodeInfoData fromList(@NonNull ArrayList pigeonVar_list) { - InternalActionCodeInfoData pigeonResult = new InternalActionCodeInfoData(); - Object email = pigeonVar_list.get(0); - pigeonResult.setEmail((String) email); - Object previousEmail = pigeonVar_list.get(1); - pigeonResult.setPreviousEmail((String) previousEmail); - return pigeonResult; - } - } - - /** Generated class from Pigeon that represents data sent in messages. */ - public static final class InternalActionCodeInfo { - private @NonNull ActionCodeInfoOperation operation; - - public @NonNull ActionCodeInfoOperation getOperation() { - return operation; - } - - public void setOperation(@NonNull ActionCodeInfoOperation setterArg) { - if (setterArg == null) { - throw new IllegalStateException("Nonnull field \"operation\" is null."); - } - this.operation = setterArg; - } - - private @NonNull InternalActionCodeInfoData data; - - public @NonNull InternalActionCodeInfoData getData() { - return data; - } - - public void setData(@NonNull InternalActionCodeInfoData setterArg) { - if (setterArg == null) { - throw new IllegalStateException("Nonnull field \"data\" is null."); - } - this.data = setterArg; - } - - /** Constructor is non-public to enforce null safety; use Builder. */ - InternalActionCodeInfo() {} - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - InternalActionCodeInfo that = (InternalActionCodeInfo) o; - return pigeonDeepEquals(operation, that.operation) && pigeonDeepEquals(data, that.data); - } - - @Override - public int hashCode() { - Object[] fields = new Object[] {getClass(), operation, data}; - return pigeonDeepHashCode(fields); - } - - public static final class Builder { - - private @Nullable ActionCodeInfoOperation operation; - - @CanIgnoreReturnValue - public @NonNull Builder setOperation(@NonNull ActionCodeInfoOperation setterArg) { - this.operation = setterArg; - return this; - } - - private @Nullable InternalActionCodeInfoData data; - - @CanIgnoreReturnValue - public @NonNull Builder setData(@NonNull InternalActionCodeInfoData setterArg) { - this.data = setterArg; - return this; - } - - public @NonNull InternalActionCodeInfo build() { - InternalActionCodeInfo pigeonReturn = new InternalActionCodeInfo(); - pigeonReturn.setOperation(operation); - pigeonReturn.setData(data); - return pigeonReturn; - } - } - - @NonNull - public ArrayList toList() { - ArrayList toListResult = new ArrayList<>(2); - toListResult.add(operation); - toListResult.add(data); - return toListResult; - } - - static @NonNull InternalActionCodeInfo fromList(@NonNull ArrayList pigeonVar_list) { - InternalActionCodeInfo pigeonResult = new InternalActionCodeInfo(); - Object operation = pigeonVar_list.get(0); - pigeonResult.setOperation((ActionCodeInfoOperation) operation); - Object data = pigeonVar_list.get(1); - pigeonResult.setData((InternalActionCodeInfoData) data); - return pigeonResult; - } - } - - /** Generated class from Pigeon that represents data sent in messages. */ - public static final class InternalAdditionalUserInfo { - private @NonNull Boolean isNewUser; - - public @NonNull Boolean getIsNewUser() { - return isNewUser; - } - - public void setIsNewUser(@NonNull Boolean setterArg) { - if (setterArg == null) { - throw new IllegalStateException("Nonnull field \"isNewUser\" is null."); - } - this.isNewUser = setterArg; - } - - private @Nullable String providerId; - - public @Nullable String getProviderId() { - return providerId; - } - - public void setProviderId(@Nullable String setterArg) { - this.providerId = setterArg; - } - - private @Nullable String username; - - public @Nullable String getUsername() { - return username; - } - - public void setUsername(@Nullable String setterArg) { - this.username = setterArg; - } - - private @Nullable String authorizationCode; - - public @Nullable String getAuthorizationCode() { - return authorizationCode; - } - - public void setAuthorizationCode(@Nullable String setterArg) { - this.authorizationCode = setterArg; - } - - private @Nullable Map profile; - - public @Nullable Map getProfile() { - return profile; - } - - public void setProfile(@Nullable Map setterArg) { - this.profile = setterArg; - } - - /** Constructor is non-public to enforce null safety; use Builder. */ - InternalAdditionalUserInfo() {} - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - InternalAdditionalUserInfo that = (InternalAdditionalUserInfo) o; - return pigeonDeepEquals(isNewUser, that.isNewUser) - && pigeonDeepEquals(providerId, that.providerId) - && pigeonDeepEquals(username, that.username) - && pigeonDeepEquals(authorizationCode, that.authorizationCode) - && pigeonDeepEquals(profile, that.profile); - } - - @Override - public int hashCode() { - Object[] fields = - new Object[] {getClass(), isNewUser, providerId, username, authorizationCode, profile}; - return pigeonDeepHashCode(fields); - } - - public static final class Builder { - - private @Nullable Boolean isNewUser; - - @CanIgnoreReturnValue - public @NonNull Builder setIsNewUser(@NonNull Boolean setterArg) { - this.isNewUser = setterArg; - return this; - } - - private @Nullable String providerId; - - @CanIgnoreReturnValue - public @NonNull Builder setProviderId(@Nullable String setterArg) { - this.providerId = setterArg; - return this; - } - - private @Nullable String username; - - @CanIgnoreReturnValue - public @NonNull Builder setUsername(@Nullable String setterArg) { - this.username = setterArg; - return this; - } - - private @Nullable String authorizationCode; - - @CanIgnoreReturnValue - public @NonNull Builder setAuthorizationCode(@Nullable String setterArg) { - this.authorizationCode = setterArg; - return this; - } - - private @Nullable Map profile; - - @CanIgnoreReturnValue - public @NonNull Builder setProfile(@Nullable Map setterArg) { - this.profile = setterArg; - return this; - } - - public @NonNull InternalAdditionalUserInfo build() { - InternalAdditionalUserInfo pigeonReturn = new InternalAdditionalUserInfo(); - pigeonReturn.setIsNewUser(isNewUser); - pigeonReturn.setProviderId(providerId); - pigeonReturn.setUsername(username); - pigeonReturn.setAuthorizationCode(authorizationCode); - pigeonReturn.setProfile(profile); - return pigeonReturn; - } - } - - @NonNull - public ArrayList toList() { - ArrayList toListResult = new ArrayList<>(5); - toListResult.add(isNewUser); - toListResult.add(providerId); - toListResult.add(username); - toListResult.add(authorizationCode); - toListResult.add(profile); - return toListResult; - } - - static @NonNull InternalAdditionalUserInfo fromList(@NonNull ArrayList pigeonVar_list) { - InternalAdditionalUserInfo pigeonResult = new InternalAdditionalUserInfo(); - Object isNewUser = pigeonVar_list.get(0); - pigeonResult.setIsNewUser((Boolean) isNewUser); - Object providerId = pigeonVar_list.get(1); - pigeonResult.setProviderId((String) providerId); - Object username = pigeonVar_list.get(2); - pigeonResult.setUsername((String) username); - Object authorizationCode = pigeonVar_list.get(3); - pigeonResult.setAuthorizationCode((String) authorizationCode); - Object profile = pigeonVar_list.get(4); - pigeonResult.setProfile((Map) profile); - return pigeonResult; - } - } - - /** Generated class from Pigeon that represents data sent in messages. */ - public static final class InternalAuthCredential { - private @NonNull String providerId; - - public @NonNull String getProviderId() { - return providerId; - } - - public void setProviderId(@NonNull String setterArg) { - if (setterArg == null) { - throw new IllegalStateException("Nonnull field \"providerId\" is null."); - } - this.providerId = setterArg; - } - - private @NonNull String signInMethod; - - public @NonNull String getSignInMethod() { - return signInMethod; - } - - public void setSignInMethod(@NonNull String setterArg) { - if (setterArg == null) { - throw new IllegalStateException("Nonnull field \"signInMethod\" is null."); - } - this.signInMethod = setterArg; - } - - private @NonNull Long nativeId; - - public @NonNull Long getNativeId() { - return nativeId; - } - - public void setNativeId(@NonNull Long setterArg) { - if (setterArg == null) { - throw new IllegalStateException("Nonnull field \"nativeId\" is null."); - } - this.nativeId = setterArg; - } - - private @Nullable String accessToken; - - public @Nullable String getAccessToken() { - return accessToken; - } - - public void setAccessToken(@Nullable String setterArg) { - this.accessToken = setterArg; - } - - /** Constructor is non-public to enforce null safety; use Builder. */ - InternalAuthCredential() {} - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - InternalAuthCredential that = (InternalAuthCredential) o; - return pigeonDeepEquals(providerId, that.providerId) - && pigeonDeepEquals(signInMethod, that.signInMethod) - && pigeonDeepEquals(nativeId, that.nativeId) - && pigeonDeepEquals(accessToken, that.accessToken); - } - - @Override - public int hashCode() { - Object[] fields = new Object[] {getClass(), providerId, signInMethod, nativeId, accessToken}; - return pigeonDeepHashCode(fields); - } - - public static final class Builder { - - private @Nullable String providerId; - - @CanIgnoreReturnValue - public @NonNull Builder setProviderId(@NonNull String setterArg) { - this.providerId = setterArg; - return this; - } - - private @Nullable String signInMethod; - - @CanIgnoreReturnValue - public @NonNull Builder setSignInMethod(@NonNull String setterArg) { - this.signInMethod = setterArg; - return this; - } - - private @Nullable Long nativeId; - - @CanIgnoreReturnValue - public @NonNull Builder setNativeId(@NonNull Long setterArg) { - this.nativeId = setterArg; - return this; - } - - private @Nullable String accessToken; - - @CanIgnoreReturnValue - public @NonNull Builder setAccessToken(@Nullable String setterArg) { - this.accessToken = setterArg; - return this; - } - - public @NonNull InternalAuthCredential build() { - InternalAuthCredential pigeonReturn = new InternalAuthCredential(); - pigeonReturn.setProviderId(providerId); - pigeonReturn.setSignInMethod(signInMethod); - pigeonReturn.setNativeId(nativeId); - pigeonReturn.setAccessToken(accessToken); - return pigeonReturn; - } - } - - @NonNull - public ArrayList toList() { - ArrayList toListResult = new ArrayList<>(4); - toListResult.add(providerId); - toListResult.add(signInMethod); - toListResult.add(nativeId); - toListResult.add(accessToken); - return toListResult; - } - - static @NonNull InternalAuthCredential fromList(@NonNull ArrayList pigeonVar_list) { - InternalAuthCredential pigeonResult = new InternalAuthCredential(); - Object providerId = pigeonVar_list.get(0); - pigeonResult.setProviderId((String) providerId); - Object signInMethod = pigeonVar_list.get(1); - pigeonResult.setSignInMethod((String) signInMethod); - Object nativeId = pigeonVar_list.get(2); - pigeonResult.setNativeId((Long) nativeId); - Object accessToken = pigeonVar_list.get(3); - pigeonResult.setAccessToken((String) accessToken); - return pigeonResult; - } - } - - /** Generated class from Pigeon that represents data sent in messages. */ - public static final class InternalUserInfo { - private @NonNull String uid; - - public @NonNull String getUid() { - return uid; - } - - public void setUid(@NonNull String setterArg) { - if (setterArg == null) { - throw new IllegalStateException("Nonnull field \"uid\" is null."); - } - this.uid = setterArg; - } - - private @Nullable String email; - - public @Nullable String getEmail() { - return email; - } - - public void setEmail(@Nullable String setterArg) { - this.email = setterArg; - } - - private @Nullable String displayName; - - public @Nullable String getDisplayName() { - return displayName; - } - - public void setDisplayName(@Nullable String setterArg) { - this.displayName = setterArg; - } - - private @Nullable String photoUrl; - - public @Nullable String getPhotoUrl() { - return photoUrl; - } - - public void setPhotoUrl(@Nullable String setterArg) { - this.photoUrl = setterArg; - } - - private @Nullable String phoneNumber; - - public @Nullable String getPhoneNumber() { - return phoneNumber; - } - - public void setPhoneNumber(@Nullable String setterArg) { - this.phoneNumber = setterArg; - } - - private @NonNull Boolean isAnonymous; - - public @NonNull Boolean getIsAnonymous() { - return isAnonymous; - } - - public void setIsAnonymous(@NonNull Boolean setterArg) { - if (setterArg == null) { - throw new IllegalStateException("Nonnull field \"isAnonymous\" is null."); - } - this.isAnonymous = setterArg; - } - - private @NonNull Boolean isEmailVerified; - - public @NonNull Boolean getIsEmailVerified() { - return isEmailVerified; - } - - public void setIsEmailVerified(@NonNull Boolean setterArg) { - if (setterArg == null) { - throw new IllegalStateException("Nonnull field \"isEmailVerified\" is null."); - } - this.isEmailVerified = setterArg; - } - - private @Nullable String providerId; - - public @Nullable String getProviderId() { - return providerId; - } - - public void setProviderId(@Nullable String setterArg) { - this.providerId = setterArg; - } - - private @Nullable String tenantId; - - public @Nullable String getTenantId() { - return tenantId; - } - - public void setTenantId(@Nullable String setterArg) { - this.tenantId = setterArg; - } - - private @Nullable String refreshToken; - - public @Nullable String getRefreshToken() { - return refreshToken; - } - - public void setRefreshToken(@Nullable String setterArg) { - this.refreshToken = setterArg; - } - - private @Nullable Long creationTimestamp; - - public @Nullable Long getCreationTimestamp() { - return creationTimestamp; - } - - public void setCreationTimestamp(@Nullable Long setterArg) { - this.creationTimestamp = setterArg; - } - - private @Nullable Long lastSignInTimestamp; - - public @Nullable Long getLastSignInTimestamp() { - return lastSignInTimestamp; - } - - public void setLastSignInTimestamp(@Nullable Long setterArg) { - this.lastSignInTimestamp = setterArg; - } - - /** Constructor is non-public to enforce null safety; use Builder. */ - InternalUserInfo() {} - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - InternalUserInfo that = (InternalUserInfo) o; - return pigeonDeepEquals(uid, that.uid) - && pigeonDeepEquals(email, that.email) - && pigeonDeepEquals(displayName, that.displayName) - && pigeonDeepEquals(photoUrl, that.photoUrl) - && pigeonDeepEquals(phoneNumber, that.phoneNumber) - && pigeonDeepEquals(isAnonymous, that.isAnonymous) - && pigeonDeepEquals(isEmailVerified, that.isEmailVerified) - && pigeonDeepEquals(providerId, that.providerId) - && pigeonDeepEquals(tenantId, that.tenantId) - && pigeonDeepEquals(refreshToken, that.refreshToken) - && pigeonDeepEquals(creationTimestamp, that.creationTimestamp) - && pigeonDeepEquals(lastSignInTimestamp, that.lastSignInTimestamp); - } - - @Override - public int hashCode() { - Object[] fields = - new Object[] { - getClass(), - uid, - email, - displayName, - photoUrl, - phoneNumber, - isAnonymous, - isEmailVerified, - providerId, - tenantId, - refreshToken, - creationTimestamp, - lastSignInTimestamp - }; - return pigeonDeepHashCode(fields); - } - - public static final class Builder { - - private @Nullable String uid; - - @CanIgnoreReturnValue - public @NonNull Builder setUid(@NonNull String setterArg) { - this.uid = setterArg; - return this; - } - - private @Nullable String email; - - @CanIgnoreReturnValue - public @NonNull Builder setEmail(@Nullable String setterArg) { - this.email = setterArg; - return this; - } - - private @Nullable String displayName; - - @CanIgnoreReturnValue - public @NonNull Builder setDisplayName(@Nullable String setterArg) { - this.displayName = setterArg; - return this; - } - - private @Nullable String photoUrl; - - @CanIgnoreReturnValue - public @NonNull Builder setPhotoUrl(@Nullable String setterArg) { - this.photoUrl = setterArg; - return this; - } - - private @Nullable String phoneNumber; - - @CanIgnoreReturnValue - public @NonNull Builder setPhoneNumber(@Nullable String setterArg) { - this.phoneNumber = setterArg; - return this; - } - - private @Nullable Boolean isAnonymous; - - @CanIgnoreReturnValue - public @NonNull Builder setIsAnonymous(@NonNull Boolean setterArg) { - this.isAnonymous = setterArg; - return this; - } - - private @Nullable Boolean isEmailVerified; - - @CanIgnoreReturnValue - public @NonNull Builder setIsEmailVerified(@NonNull Boolean setterArg) { - this.isEmailVerified = setterArg; - return this; - } - - private @Nullable String providerId; - - @CanIgnoreReturnValue - public @NonNull Builder setProviderId(@Nullable String setterArg) { - this.providerId = setterArg; - return this; - } - - private @Nullable String tenantId; - - @CanIgnoreReturnValue - public @NonNull Builder setTenantId(@Nullable String setterArg) { - this.tenantId = setterArg; - return this; - } - - private @Nullable String refreshToken; - - @CanIgnoreReturnValue - public @NonNull Builder setRefreshToken(@Nullable String setterArg) { - this.refreshToken = setterArg; - return this; - } - - private @Nullable Long creationTimestamp; - - @CanIgnoreReturnValue - public @NonNull Builder setCreationTimestamp(@Nullable Long setterArg) { - this.creationTimestamp = setterArg; - return this; - } - - private @Nullable Long lastSignInTimestamp; - - @CanIgnoreReturnValue - public @NonNull Builder setLastSignInTimestamp(@Nullable Long setterArg) { - this.lastSignInTimestamp = setterArg; - return this; - } - - public @NonNull InternalUserInfo build() { - InternalUserInfo pigeonReturn = new InternalUserInfo(); - pigeonReturn.setUid(uid); - pigeonReturn.setEmail(email); - pigeonReturn.setDisplayName(displayName); - pigeonReturn.setPhotoUrl(photoUrl); - pigeonReturn.setPhoneNumber(phoneNumber); - pigeonReturn.setIsAnonymous(isAnonymous); - pigeonReturn.setIsEmailVerified(isEmailVerified); - pigeonReturn.setProviderId(providerId); - pigeonReturn.setTenantId(tenantId); - pigeonReturn.setRefreshToken(refreshToken); - pigeonReturn.setCreationTimestamp(creationTimestamp); - pigeonReturn.setLastSignInTimestamp(lastSignInTimestamp); - return pigeonReturn; - } - } - - @NonNull - public ArrayList toList() { - ArrayList toListResult = new ArrayList<>(12); - toListResult.add(uid); - toListResult.add(email); - toListResult.add(displayName); - toListResult.add(photoUrl); - toListResult.add(phoneNumber); - toListResult.add(isAnonymous); - toListResult.add(isEmailVerified); - toListResult.add(providerId); - toListResult.add(tenantId); - toListResult.add(refreshToken); - toListResult.add(creationTimestamp); - toListResult.add(lastSignInTimestamp); - return toListResult; - } - - static @NonNull InternalUserInfo fromList(@NonNull ArrayList pigeonVar_list) { - InternalUserInfo pigeonResult = new InternalUserInfo(); - Object uid = pigeonVar_list.get(0); - pigeonResult.setUid((String) uid); - Object email = pigeonVar_list.get(1); - pigeonResult.setEmail((String) email); - Object displayName = pigeonVar_list.get(2); - pigeonResult.setDisplayName((String) displayName); - Object photoUrl = pigeonVar_list.get(3); - pigeonResult.setPhotoUrl((String) photoUrl); - Object phoneNumber = pigeonVar_list.get(4); - pigeonResult.setPhoneNumber((String) phoneNumber); - Object isAnonymous = pigeonVar_list.get(5); - pigeonResult.setIsAnonymous((Boolean) isAnonymous); - Object isEmailVerified = pigeonVar_list.get(6); - pigeonResult.setIsEmailVerified((Boolean) isEmailVerified); - Object providerId = pigeonVar_list.get(7); - pigeonResult.setProviderId((String) providerId); - Object tenantId = pigeonVar_list.get(8); - pigeonResult.setTenantId((String) tenantId); - Object refreshToken = pigeonVar_list.get(9); - pigeonResult.setRefreshToken((String) refreshToken); - Object creationTimestamp = pigeonVar_list.get(10); - pigeonResult.setCreationTimestamp((Long) creationTimestamp); - Object lastSignInTimestamp = pigeonVar_list.get(11); - pigeonResult.setLastSignInTimestamp((Long) lastSignInTimestamp); - return pigeonResult; - } - } - - /** Generated class from Pigeon that represents data sent in messages. */ - public static final class InternalUserDetails { - private @NonNull InternalUserInfo userInfo; - - public @NonNull InternalUserInfo getUserInfo() { - return userInfo; - } - - public void setUserInfo(@NonNull InternalUserInfo setterArg) { - if (setterArg == null) { - throw new IllegalStateException("Nonnull field \"userInfo\" is null."); - } - this.userInfo = setterArg; - } - - private @NonNull List> providerData; - - public @NonNull List> getProviderData() { - return providerData; - } - - public void setProviderData(@NonNull List> setterArg) { - if (setterArg == null) { - throw new IllegalStateException("Nonnull field \"providerData\" is null."); - } - this.providerData = setterArg; - } - - /** Constructor is non-public to enforce null safety; use Builder. */ - InternalUserDetails() {} - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - InternalUserDetails that = (InternalUserDetails) o; - return pigeonDeepEquals(userInfo, that.userInfo) - && pigeonDeepEquals(providerData, that.providerData); - } - - @Override - public int hashCode() { - Object[] fields = new Object[] {getClass(), userInfo, providerData}; - return pigeonDeepHashCode(fields); - } - - public static final class Builder { - - private @Nullable InternalUserInfo userInfo; - - @CanIgnoreReturnValue - public @NonNull Builder setUserInfo(@NonNull InternalUserInfo setterArg) { - this.userInfo = setterArg; - return this; - } - - private @Nullable List> providerData; - - @CanIgnoreReturnValue - public @NonNull Builder setProviderData(@NonNull List> setterArg) { - this.providerData = setterArg; - return this; - } - - public @NonNull InternalUserDetails build() { - InternalUserDetails pigeonReturn = new InternalUserDetails(); - pigeonReturn.setUserInfo(userInfo); - pigeonReturn.setProviderData(providerData); - return pigeonReturn; - } - } - - @NonNull - public ArrayList toList() { - ArrayList toListResult = new ArrayList<>(2); - toListResult.add(userInfo); - toListResult.add(providerData); - return toListResult; - } - - static @NonNull InternalUserDetails fromList(@NonNull ArrayList pigeonVar_list) { - InternalUserDetails pigeonResult = new InternalUserDetails(); - Object userInfo = pigeonVar_list.get(0); - pigeonResult.setUserInfo((InternalUserInfo) userInfo); - Object providerData = pigeonVar_list.get(1); - pigeonResult.setProviderData((List>) providerData); - return pigeonResult; - } - } - - /** Generated class from Pigeon that represents data sent in messages. */ - public static final class InternalUserCredential { - private @Nullable InternalUserDetails user; - - public @Nullable InternalUserDetails getUser() { - return user; - } - - public void setUser(@Nullable InternalUserDetails setterArg) { - this.user = setterArg; - } - - private @Nullable InternalAdditionalUserInfo additionalUserInfo; - - public @Nullable InternalAdditionalUserInfo getAdditionalUserInfo() { - return additionalUserInfo; - } - - public void setAdditionalUserInfo(@Nullable InternalAdditionalUserInfo setterArg) { - this.additionalUserInfo = setterArg; - } - - private @Nullable InternalAuthCredential credential; - - public @Nullable InternalAuthCredential getCredential() { - return credential; - } - - public void setCredential(@Nullable InternalAuthCredential setterArg) { - this.credential = setterArg; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - InternalUserCredential that = (InternalUserCredential) o; - return pigeonDeepEquals(user, that.user) - && pigeonDeepEquals(additionalUserInfo, that.additionalUserInfo) - && pigeonDeepEquals(credential, that.credential); - } - - @Override - public int hashCode() { - Object[] fields = new Object[] {getClass(), user, additionalUserInfo, credential}; - return pigeonDeepHashCode(fields); - } - - public static final class Builder { - - private @Nullable InternalUserDetails user; - - @CanIgnoreReturnValue - public @NonNull Builder setUser(@Nullable InternalUserDetails setterArg) { - this.user = setterArg; - return this; - } - - private @Nullable InternalAdditionalUserInfo additionalUserInfo; - - @CanIgnoreReturnValue - public @NonNull Builder setAdditionalUserInfo( - @Nullable InternalAdditionalUserInfo setterArg) { - this.additionalUserInfo = setterArg; - return this; - } - - private @Nullable InternalAuthCredential credential; - - @CanIgnoreReturnValue - public @NonNull Builder setCredential(@Nullable InternalAuthCredential setterArg) { - this.credential = setterArg; - return this; - } - - public @NonNull InternalUserCredential build() { - InternalUserCredential pigeonReturn = new InternalUserCredential(); - pigeonReturn.setUser(user); - pigeonReturn.setAdditionalUserInfo(additionalUserInfo); - pigeonReturn.setCredential(credential); - return pigeonReturn; - } - } - - @NonNull - public ArrayList toList() { - ArrayList toListResult = new ArrayList<>(3); - toListResult.add(user); - toListResult.add(additionalUserInfo); - toListResult.add(credential); - return toListResult; - } - - static @NonNull InternalUserCredential fromList(@NonNull ArrayList pigeonVar_list) { - InternalUserCredential pigeonResult = new InternalUserCredential(); - Object user = pigeonVar_list.get(0); - pigeonResult.setUser((InternalUserDetails) user); - Object additionalUserInfo = pigeonVar_list.get(1); - pigeonResult.setAdditionalUserInfo((InternalAdditionalUserInfo) additionalUserInfo); - Object credential = pigeonVar_list.get(2); - pigeonResult.setCredential((InternalAuthCredential) credential); - return pigeonResult; - } - } - - /** Generated class from Pigeon that represents data sent in messages. */ - public static final class InternalAuthCredentialInput { - private @NonNull String providerId; - - public @NonNull String getProviderId() { - return providerId; - } - - public void setProviderId(@NonNull String setterArg) { - if (setterArg == null) { - throw new IllegalStateException("Nonnull field \"providerId\" is null."); - } - this.providerId = setterArg; - } - - private @NonNull String signInMethod; - - public @NonNull String getSignInMethod() { - return signInMethod; - } - - public void setSignInMethod(@NonNull String setterArg) { - if (setterArg == null) { - throw new IllegalStateException("Nonnull field \"signInMethod\" is null."); - } - this.signInMethod = setterArg; - } - - private @Nullable String token; - - public @Nullable String getToken() { - return token; - } - - public void setToken(@Nullable String setterArg) { - this.token = setterArg; - } - - private @Nullable String accessToken; - - public @Nullable String getAccessToken() { - return accessToken; - } - - public void setAccessToken(@Nullable String setterArg) { - this.accessToken = setterArg; - } - - /** Constructor is non-public to enforce null safety; use Builder. */ - InternalAuthCredentialInput() {} - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - InternalAuthCredentialInput that = (InternalAuthCredentialInput) o; - return pigeonDeepEquals(providerId, that.providerId) - && pigeonDeepEquals(signInMethod, that.signInMethod) - && pigeonDeepEquals(token, that.token) - && pigeonDeepEquals(accessToken, that.accessToken); - } - - @Override - public int hashCode() { - Object[] fields = new Object[] {getClass(), providerId, signInMethod, token, accessToken}; - return pigeonDeepHashCode(fields); - } - - public static final class Builder { - - private @Nullable String providerId; - - @CanIgnoreReturnValue - public @NonNull Builder setProviderId(@NonNull String setterArg) { - this.providerId = setterArg; - return this; - } - - private @Nullable String signInMethod; - - @CanIgnoreReturnValue - public @NonNull Builder setSignInMethod(@NonNull String setterArg) { - this.signInMethod = setterArg; - return this; - } - - private @Nullable String token; - - @CanIgnoreReturnValue - public @NonNull Builder setToken(@Nullable String setterArg) { - this.token = setterArg; - return this; - } - - private @Nullable String accessToken; - - @CanIgnoreReturnValue - public @NonNull Builder setAccessToken(@Nullable String setterArg) { - this.accessToken = setterArg; - return this; - } - - public @NonNull InternalAuthCredentialInput build() { - InternalAuthCredentialInput pigeonReturn = new InternalAuthCredentialInput(); - pigeonReturn.setProviderId(providerId); - pigeonReturn.setSignInMethod(signInMethod); - pigeonReturn.setToken(token); - pigeonReturn.setAccessToken(accessToken); - return pigeonReturn; - } - } - - @NonNull - public ArrayList toList() { - ArrayList toListResult = new ArrayList<>(4); - toListResult.add(providerId); - toListResult.add(signInMethod); - toListResult.add(token); - toListResult.add(accessToken); - return toListResult; - } - - static @NonNull InternalAuthCredentialInput fromList( - @NonNull ArrayList pigeonVar_list) { - InternalAuthCredentialInput pigeonResult = new InternalAuthCredentialInput(); - Object providerId = pigeonVar_list.get(0); - pigeonResult.setProviderId((String) providerId); - Object signInMethod = pigeonVar_list.get(1); - pigeonResult.setSignInMethod((String) signInMethod); - Object token = pigeonVar_list.get(2); - pigeonResult.setToken((String) token); - Object accessToken = pigeonVar_list.get(3); - pigeonResult.setAccessToken((String) accessToken); - return pigeonResult; - } - } - - /** Generated class from Pigeon that represents data sent in messages. */ - public static final class InternalActionCodeSettings { - private @NonNull String url; - - public @NonNull String getUrl() { - return url; - } - - public void setUrl(@NonNull String setterArg) { - if (setterArg == null) { - throw new IllegalStateException("Nonnull field \"url\" is null."); - } - this.url = setterArg; - } - - private @Nullable String dynamicLinkDomain; - - public @Nullable String getDynamicLinkDomain() { - return dynamicLinkDomain; - } - - public void setDynamicLinkDomain(@Nullable String setterArg) { - this.dynamicLinkDomain = setterArg; - } - - private @NonNull Boolean handleCodeInApp; - - public @NonNull Boolean getHandleCodeInApp() { - return handleCodeInApp; - } - - public void setHandleCodeInApp(@NonNull Boolean setterArg) { - if (setterArg == null) { - throw new IllegalStateException("Nonnull field \"handleCodeInApp\" is null."); - } - this.handleCodeInApp = setterArg; - } - - private @Nullable String iOSBundleId; - - public @Nullable String getIOSBundleId() { - return iOSBundleId; - } - - public void setIOSBundleId(@Nullable String setterArg) { - this.iOSBundleId = setterArg; - } - - private @Nullable String androidPackageName; - - public @Nullable String getAndroidPackageName() { - return androidPackageName; - } - - public void setAndroidPackageName(@Nullable String setterArg) { - this.androidPackageName = setterArg; - } - - private @NonNull Boolean androidInstallApp; - - public @NonNull Boolean getAndroidInstallApp() { - return androidInstallApp; - } - - public void setAndroidInstallApp(@NonNull Boolean setterArg) { - if (setterArg == null) { - throw new IllegalStateException("Nonnull field \"androidInstallApp\" is null."); - } - this.androidInstallApp = setterArg; - } - - private @Nullable String androidMinimumVersion; - - public @Nullable String getAndroidMinimumVersion() { - return androidMinimumVersion; - } - - public void setAndroidMinimumVersion(@Nullable String setterArg) { - this.androidMinimumVersion = setterArg; - } - - private @Nullable String linkDomain; - - public @Nullable String getLinkDomain() { - return linkDomain; - } - - public void setLinkDomain(@Nullable String setterArg) { - this.linkDomain = setterArg; - } - - /** Constructor is non-public to enforce null safety; use Builder. */ - InternalActionCodeSettings() {} - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - InternalActionCodeSettings that = (InternalActionCodeSettings) o; - return pigeonDeepEquals(url, that.url) - && pigeonDeepEquals(dynamicLinkDomain, that.dynamicLinkDomain) - && pigeonDeepEquals(handleCodeInApp, that.handleCodeInApp) - && pigeonDeepEquals(iOSBundleId, that.iOSBundleId) - && pigeonDeepEquals(androidPackageName, that.androidPackageName) - && pigeonDeepEquals(androidInstallApp, that.androidInstallApp) - && pigeonDeepEquals(androidMinimumVersion, that.androidMinimumVersion) - && pigeonDeepEquals(linkDomain, that.linkDomain); - } - - @Override - public int hashCode() { - Object[] fields = - new Object[] { - getClass(), - url, - dynamicLinkDomain, - handleCodeInApp, - iOSBundleId, - androidPackageName, - androidInstallApp, - androidMinimumVersion, - linkDomain - }; - return pigeonDeepHashCode(fields); - } - - public static final class Builder { - - private @Nullable String url; - - @CanIgnoreReturnValue - public @NonNull Builder setUrl(@NonNull String setterArg) { - this.url = setterArg; - return this; - } - - private @Nullable String dynamicLinkDomain; - - @CanIgnoreReturnValue - public @NonNull Builder setDynamicLinkDomain(@Nullable String setterArg) { - this.dynamicLinkDomain = setterArg; - return this; - } - - private @Nullable Boolean handleCodeInApp; - - @CanIgnoreReturnValue - public @NonNull Builder setHandleCodeInApp(@NonNull Boolean setterArg) { - this.handleCodeInApp = setterArg; - return this; - } - - private @Nullable String iOSBundleId; - - @CanIgnoreReturnValue - public @NonNull Builder setIOSBundleId(@Nullable String setterArg) { - this.iOSBundleId = setterArg; - return this; - } - - private @Nullable String androidPackageName; - - @CanIgnoreReturnValue - public @NonNull Builder setAndroidPackageName(@Nullable String setterArg) { - this.androidPackageName = setterArg; - return this; - } - - private @Nullable Boolean androidInstallApp; - - @CanIgnoreReturnValue - public @NonNull Builder setAndroidInstallApp(@NonNull Boolean setterArg) { - this.androidInstallApp = setterArg; - return this; - } - - private @Nullable String androidMinimumVersion; - - @CanIgnoreReturnValue - public @NonNull Builder setAndroidMinimumVersion(@Nullable String setterArg) { - this.androidMinimumVersion = setterArg; - return this; - } - - private @Nullable String linkDomain; - - @CanIgnoreReturnValue - public @NonNull Builder setLinkDomain(@Nullable String setterArg) { - this.linkDomain = setterArg; - return this; - } - - public @NonNull InternalActionCodeSettings build() { - InternalActionCodeSettings pigeonReturn = new InternalActionCodeSettings(); - pigeonReturn.setUrl(url); - pigeonReturn.setDynamicLinkDomain(dynamicLinkDomain); - pigeonReturn.setHandleCodeInApp(handleCodeInApp); - pigeonReturn.setIOSBundleId(iOSBundleId); - pigeonReturn.setAndroidPackageName(androidPackageName); - pigeonReturn.setAndroidInstallApp(androidInstallApp); - pigeonReturn.setAndroidMinimumVersion(androidMinimumVersion); - pigeonReturn.setLinkDomain(linkDomain); - return pigeonReturn; - } - } - - @NonNull - public ArrayList toList() { - ArrayList toListResult = new ArrayList<>(8); - toListResult.add(url); - toListResult.add(dynamicLinkDomain); - toListResult.add(handleCodeInApp); - toListResult.add(iOSBundleId); - toListResult.add(androidPackageName); - toListResult.add(androidInstallApp); - toListResult.add(androidMinimumVersion); - toListResult.add(linkDomain); - return toListResult; - } - - static @NonNull InternalActionCodeSettings fromList(@NonNull ArrayList pigeonVar_list) { - InternalActionCodeSettings pigeonResult = new InternalActionCodeSettings(); - Object url = pigeonVar_list.get(0); - pigeonResult.setUrl((String) url); - Object dynamicLinkDomain = pigeonVar_list.get(1); - pigeonResult.setDynamicLinkDomain((String) dynamicLinkDomain); - Object handleCodeInApp = pigeonVar_list.get(2); - pigeonResult.setHandleCodeInApp((Boolean) handleCodeInApp); - Object iOSBundleId = pigeonVar_list.get(3); - pigeonResult.setIOSBundleId((String) iOSBundleId); - Object androidPackageName = pigeonVar_list.get(4); - pigeonResult.setAndroidPackageName((String) androidPackageName); - Object androidInstallApp = pigeonVar_list.get(5); - pigeonResult.setAndroidInstallApp((Boolean) androidInstallApp); - Object androidMinimumVersion = pigeonVar_list.get(6); - pigeonResult.setAndroidMinimumVersion((String) androidMinimumVersion); - Object linkDomain = pigeonVar_list.get(7); - pigeonResult.setLinkDomain((String) linkDomain); - return pigeonResult; - } - } - - /** Generated class from Pigeon that represents data sent in messages. */ - public static final class InternalFirebaseAuthSettings { - private @NonNull Boolean appVerificationDisabledForTesting; - - public @NonNull Boolean getAppVerificationDisabledForTesting() { - return appVerificationDisabledForTesting; - } - - public void setAppVerificationDisabledForTesting(@NonNull Boolean setterArg) { - if (setterArg == null) { - throw new IllegalStateException( - "Nonnull field \"appVerificationDisabledForTesting\" is null."); - } - this.appVerificationDisabledForTesting = setterArg; - } - - private @Nullable String userAccessGroup; - - public @Nullable String getUserAccessGroup() { - return userAccessGroup; - } - - public void setUserAccessGroup(@Nullable String setterArg) { - this.userAccessGroup = setterArg; - } - - private @Nullable String phoneNumber; - - public @Nullable String getPhoneNumber() { - return phoneNumber; - } - - public void setPhoneNumber(@Nullable String setterArg) { - this.phoneNumber = setterArg; - } - - private @Nullable String smsCode; - - public @Nullable String getSmsCode() { - return smsCode; - } - - public void setSmsCode(@Nullable String setterArg) { - this.smsCode = setterArg; - } - - private @Nullable Boolean forceRecaptchaFlow; - - public @Nullable Boolean getForceRecaptchaFlow() { - return forceRecaptchaFlow; - } - - public void setForceRecaptchaFlow(@Nullable Boolean setterArg) { - this.forceRecaptchaFlow = setterArg; - } - - /** Constructor is non-public to enforce null safety; use Builder. */ - InternalFirebaseAuthSettings() {} - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - InternalFirebaseAuthSettings that = (InternalFirebaseAuthSettings) o; - return pigeonDeepEquals( - appVerificationDisabledForTesting, that.appVerificationDisabledForTesting) - && pigeonDeepEquals(userAccessGroup, that.userAccessGroup) - && pigeonDeepEquals(phoneNumber, that.phoneNumber) - && pigeonDeepEquals(smsCode, that.smsCode) - && pigeonDeepEquals(forceRecaptchaFlow, that.forceRecaptchaFlow); - } - - @Override - public int hashCode() { - Object[] fields = - new Object[] { - getClass(), - appVerificationDisabledForTesting, - userAccessGroup, - phoneNumber, - smsCode, - forceRecaptchaFlow - }; - return pigeonDeepHashCode(fields); - } - - public static final class Builder { - - private @Nullable Boolean appVerificationDisabledForTesting; - - @CanIgnoreReturnValue - public @NonNull Builder setAppVerificationDisabledForTesting(@NonNull Boolean setterArg) { - this.appVerificationDisabledForTesting = setterArg; - return this; - } - - private @Nullable String userAccessGroup; - - @CanIgnoreReturnValue - public @NonNull Builder setUserAccessGroup(@Nullable String setterArg) { - this.userAccessGroup = setterArg; - return this; - } - - private @Nullable String phoneNumber; - - @CanIgnoreReturnValue - public @NonNull Builder setPhoneNumber(@Nullable String setterArg) { - this.phoneNumber = setterArg; - return this; - } - - private @Nullable String smsCode; - - @CanIgnoreReturnValue - public @NonNull Builder setSmsCode(@Nullable String setterArg) { - this.smsCode = setterArg; - return this; - } - - private @Nullable Boolean forceRecaptchaFlow; - - @CanIgnoreReturnValue - public @NonNull Builder setForceRecaptchaFlow(@Nullable Boolean setterArg) { - this.forceRecaptchaFlow = setterArg; - return this; - } - - public @NonNull InternalFirebaseAuthSettings build() { - InternalFirebaseAuthSettings pigeonReturn = new InternalFirebaseAuthSettings(); - pigeonReturn.setAppVerificationDisabledForTesting(appVerificationDisabledForTesting); - pigeonReturn.setUserAccessGroup(userAccessGroup); - pigeonReturn.setPhoneNumber(phoneNumber); - pigeonReturn.setSmsCode(smsCode); - pigeonReturn.setForceRecaptchaFlow(forceRecaptchaFlow); - return pigeonReturn; - } - } - - @NonNull - public ArrayList toList() { - ArrayList toListResult = new ArrayList<>(5); - toListResult.add(appVerificationDisabledForTesting); - toListResult.add(userAccessGroup); - toListResult.add(phoneNumber); - toListResult.add(smsCode); - toListResult.add(forceRecaptchaFlow); - return toListResult; - } - - static @NonNull InternalFirebaseAuthSettings fromList( - @NonNull ArrayList pigeonVar_list) { - InternalFirebaseAuthSettings pigeonResult = new InternalFirebaseAuthSettings(); - Object appVerificationDisabledForTesting = pigeonVar_list.get(0); - pigeonResult.setAppVerificationDisabledForTesting( - (Boolean) appVerificationDisabledForTesting); - Object userAccessGroup = pigeonVar_list.get(1); - pigeonResult.setUserAccessGroup((String) userAccessGroup); - Object phoneNumber = pigeonVar_list.get(2); - pigeonResult.setPhoneNumber((String) phoneNumber); - Object smsCode = pigeonVar_list.get(3); - pigeonResult.setSmsCode((String) smsCode); - Object forceRecaptchaFlow = pigeonVar_list.get(4); - pigeonResult.setForceRecaptchaFlow((Boolean) forceRecaptchaFlow); - return pigeonResult; - } - } - - /** Generated class from Pigeon that represents data sent in messages. */ - public static final class InternalSignInProvider { - private @NonNull String providerId; - - public @NonNull String getProviderId() { - return providerId; - } - - public void setProviderId(@NonNull String setterArg) { - if (setterArg == null) { - throw new IllegalStateException("Nonnull field \"providerId\" is null."); - } - this.providerId = setterArg; - } - - private @Nullable List scopes; - - public @Nullable List getScopes() { - return scopes; - } - - public void setScopes(@Nullable List setterArg) { - this.scopes = setterArg; - } - - private @Nullable Map customParameters; - - public @Nullable Map getCustomParameters() { - return customParameters; - } - - public void setCustomParameters(@Nullable Map setterArg) { - this.customParameters = setterArg; - } - - /** Constructor is non-public to enforce null safety; use Builder. */ - InternalSignInProvider() {} - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - InternalSignInProvider that = (InternalSignInProvider) o; - return pigeonDeepEquals(providerId, that.providerId) - && pigeonDeepEquals(scopes, that.scopes) - && pigeonDeepEquals(customParameters, that.customParameters); - } - - @Override - public int hashCode() { - Object[] fields = new Object[] {getClass(), providerId, scopes, customParameters}; - return pigeonDeepHashCode(fields); - } - - public static final class Builder { - - private @Nullable String providerId; - - @CanIgnoreReturnValue - public @NonNull Builder setProviderId(@NonNull String setterArg) { - this.providerId = setterArg; - return this; - } - - private @Nullable List scopes; - - @CanIgnoreReturnValue - public @NonNull Builder setScopes(@Nullable List setterArg) { - this.scopes = setterArg; - return this; - } - - private @Nullable Map customParameters; - - @CanIgnoreReturnValue - public @NonNull Builder setCustomParameters(@Nullable Map setterArg) { - this.customParameters = setterArg; - return this; - } - - public @NonNull InternalSignInProvider build() { - InternalSignInProvider pigeonReturn = new InternalSignInProvider(); - pigeonReturn.setProviderId(providerId); - pigeonReturn.setScopes(scopes); - pigeonReturn.setCustomParameters(customParameters); - return pigeonReturn; - } - } - - @NonNull - public ArrayList toList() { - ArrayList toListResult = new ArrayList<>(3); - toListResult.add(providerId); - toListResult.add(scopes); - toListResult.add(customParameters); - return toListResult; - } - - static @NonNull InternalSignInProvider fromList(@NonNull ArrayList pigeonVar_list) { - InternalSignInProvider pigeonResult = new InternalSignInProvider(); - Object providerId = pigeonVar_list.get(0); - pigeonResult.setProviderId((String) providerId); - Object scopes = pigeonVar_list.get(1); - pigeonResult.setScopes((List) scopes); - Object customParameters = pigeonVar_list.get(2); - pigeonResult.setCustomParameters((Map) customParameters); - return pigeonResult; - } - } - - /** Generated class from Pigeon that represents data sent in messages. */ - public static final class InternalVerifyPhoneNumberRequest { - private @Nullable String phoneNumber; - - public @Nullable String getPhoneNumber() { - return phoneNumber; - } - - public void setPhoneNumber(@Nullable String setterArg) { - this.phoneNumber = setterArg; - } - - private @NonNull Long timeout; - - public @NonNull Long getTimeout() { - return timeout; - } - - public void setTimeout(@NonNull Long setterArg) { - if (setterArg == null) { - throw new IllegalStateException("Nonnull field \"timeout\" is null."); - } - this.timeout = setterArg; - } - - private @Nullable Long forceResendingToken; - - public @Nullable Long getForceResendingToken() { - return forceResendingToken; - } - - public void setForceResendingToken(@Nullable Long setterArg) { - this.forceResendingToken = setterArg; - } - - private @Nullable String autoRetrievedSmsCodeForTesting; - - public @Nullable String getAutoRetrievedSmsCodeForTesting() { - return autoRetrievedSmsCodeForTesting; - } - - public void setAutoRetrievedSmsCodeForTesting(@Nullable String setterArg) { - this.autoRetrievedSmsCodeForTesting = setterArg; - } - - private @Nullable String multiFactorInfoId; - - public @Nullable String getMultiFactorInfoId() { - return multiFactorInfoId; - } - - public void setMultiFactorInfoId(@Nullable String setterArg) { - this.multiFactorInfoId = setterArg; - } - - private @Nullable String multiFactorSessionId; - - public @Nullable String getMultiFactorSessionId() { - return multiFactorSessionId; - } - - public void setMultiFactorSessionId(@Nullable String setterArg) { - this.multiFactorSessionId = setterArg; - } - - /** Constructor is non-public to enforce null safety; use Builder. */ - InternalVerifyPhoneNumberRequest() {} - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - InternalVerifyPhoneNumberRequest that = (InternalVerifyPhoneNumberRequest) o; - return pigeonDeepEquals(phoneNumber, that.phoneNumber) - && pigeonDeepEquals(timeout, that.timeout) - && pigeonDeepEquals(forceResendingToken, that.forceResendingToken) - && pigeonDeepEquals(autoRetrievedSmsCodeForTesting, that.autoRetrievedSmsCodeForTesting) - && pigeonDeepEquals(multiFactorInfoId, that.multiFactorInfoId) - && pigeonDeepEquals(multiFactorSessionId, that.multiFactorSessionId); - } - - @Override - public int hashCode() { - Object[] fields = - new Object[] { - getClass(), - phoneNumber, - timeout, - forceResendingToken, - autoRetrievedSmsCodeForTesting, - multiFactorInfoId, - multiFactorSessionId - }; - return pigeonDeepHashCode(fields); - } - - public static final class Builder { - - private @Nullable String phoneNumber; - - @CanIgnoreReturnValue - public @NonNull Builder setPhoneNumber(@Nullable String setterArg) { - this.phoneNumber = setterArg; - return this; - } - - private @Nullable Long timeout; - - @CanIgnoreReturnValue - public @NonNull Builder setTimeout(@NonNull Long setterArg) { - this.timeout = setterArg; - return this; - } - - private @Nullable Long forceResendingToken; - - @CanIgnoreReturnValue - public @NonNull Builder setForceResendingToken(@Nullable Long setterArg) { - this.forceResendingToken = setterArg; - return this; - } - - private @Nullable String autoRetrievedSmsCodeForTesting; - - @CanIgnoreReturnValue - public @NonNull Builder setAutoRetrievedSmsCodeForTesting(@Nullable String setterArg) { - this.autoRetrievedSmsCodeForTesting = setterArg; - return this; - } - - private @Nullable String multiFactorInfoId; - - @CanIgnoreReturnValue - public @NonNull Builder setMultiFactorInfoId(@Nullable String setterArg) { - this.multiFactorInfoId = setterArg; - return this; - } - - private @Nullable String multiFactorSessionId; - - @CanIgnoreReturnValue - public @NonNull Builder setMultiFactorSessionId(@Nullable String setterArg) { - this.multiFactorSessionId = setterArg; - return this; - } - - public @NonNull InternalVerifyPhoneNumberRequest build() { - InternalVerifyPhoneNumberRequest pigeonReturn = new InternalVerifyPhoneNumberRequest(); - pigeonReturn.setPhoneNumber(phoneNumber); - pigeonReturn.setTimeout(timeout); - pigeonReturn.setForceResendingToken(forceResendingToken); - pigeonReturn.setAutoRetrievedSmsCodeForTesting(autoRetrievedSmsCodeForTesting); - pigeonReturn.setMultiFactorInfoId(multiFactorInfoId); - pigeonReturn.setMultiFactorSessionId(multiFactorSessionId); - return pigeonReturn; - } - } - - @NonNull - public ArrayList toList() { - ArrayList toListResult = new ArrayList<>(6); - toListResult.add(phoneNumber); - toListResult.add(timeout); - toListResult.add(forceResendingToken); - toListResult.add(autoRetrievedSmsCodeForTesting); - toListResult.add(multiFactorInfoId); - toListResult.add(multiFactorSessionId); - return toListResult; - } - - static @NonNull InternalVerifyPhoneNumberRequest fromList( - @NonNull ArrayList pigeonVar_list) { - InternalVerifyPhoneNumberRequest pigeonResult = new InternalVerifyPhoneNumberRequest(); - Object phoneNumber = pigeonVar_list.get(0); - pigeonResult.setPhoneNumber((String) phoneNumber); - Object timeout = pigeonVar_list.get(1); - pigeonResult.setTimeout((Long) timeout); - Object forceResendingToken = pigeonVar_list.get(2); - pigeonResult.setForceResendingToken((Long) forceResendingToken); - Object autoRetrievedSmsCodeForTesting = pigeonVar_list.get(3); - pigeonResult.setAutoRetrievedSmsCodeForTesting((String) autoRetrievedSmsCodeForTesting); - Object multiFactorInfoId = pigeonVar_list.get(4); - pigeonResult.setMultiFactorInfoId((String) multiFactorInfoId); - Object multiFactorSessionId = pigeonVar_list.get(5); - pigeonResult.setMultiFactorSessionId((String) multiFactorSessionId); - return pigeonResult; - } - } - - /** Generated class from Pigeon that represents data sent in messages. */ - public static final class InternalIdTokenResult { - private @Nullable String token; - - public @Nullable String getToken() { - return token; - } - - public void setToken(@Nullable String setterArg) { - this.token = setterArg; - } - - private @Nullable Long expirationTimestamp; - - public @Nullable Long getExpirationTimestamp() { - return expirationTimestamp; - } - - public void setExpirationTimestamp(@Nullable Long setterArg) { - this.expirationTimestamp = setterArg; - } - - private @Nullable Long authTimestamp; - - public @Nullable Long getAuthTimestamp() { - return authTimestamp; - } - - public void setAuthTimestamp(@Nullable Long setterArg) { - this.authTimestamp = setterArg; - } - - private @Nullable Long issuedAtTimestamp; - - public @Nullable Long getIssuedAtTimestamp() { - return issuedAtTimestamp; - } - - public void setIssuedAtTimestamp(@Nullable Long setterArg) { - this.issuedAtTimestamp = setterArg; - } - - private @Nullable String signInProvider; - - public @Nullable String getSignInProvider() { - return signInProvider; - } - - public void setSignInProvider(@Nullable String setterArg) { - this.signInProvider = setterArg; - } - - private @Nullable Map claims; - - public @Nullable Map getClaims() { - return claims; - } - - public void setClaims(@Nullable Map setterArg) { - this.claims = setterArg; - } - - private @Nullable String signInSecondFactor; - - public @Nullable String getSignInSecondFactor() { - return signInSecondFactor; - } - - public void setSignInSecondFactor(@Nullable String setterArg) { - this.signInSecondFactor = setterArg; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - InternalIdTokenResult that = (InternalIdTokenResult) o; - return pigeonDeepEquals(token, that.token) - && pigeonDeepEquals(expirationTimestamp, that.expirationTimestamp) - && pigeonDeepEquals(authTimestamp, that.authTimestamp) - && pigeonDeepEquals(issuedAtTimestamp, that.issuedAtTimestamp) - && pigeonDeepEquals(signInProvider, that.signInProvider) - && pigeonDeepEquals(claims, that.claims) - && pigeonDeepEquals(signInSecondFactor, that.signInSecondFactor); - } - - @Override - public int hashCode() { - Object[] fields = - new Object[] { - getClass(), - token, - expirationTimestamp, - authTimestamp, - issuedAtTimestamp, - signInProvider, - claims, - signInSecondFactor - }; - return pigeonDeepHashCode(fields); - } - - public static final class Builder { - - private @Nullable String token; - - @CanIgnoreReturnValue - public @NonNull Builder setToken(@Nullable String setterArg) { - this.token = setterArg; - return this; - } - - private @Nullable Long expirationTimestamp; - - @CanIgnoreReturnValue - public @NonNull Builder setExpirationTimestamp(@Nullable Long setterArg) { - this.expirationTimestamp = setterArg; - return this; - } - - private @Nullable Long authTimestamp; - - @CanIgnoreReturnValue - public @NonNull Builder setAuthTimestamp(@Nullable Long setterArg) { - this.authTimestamp = setterArg; - return this; - } - - private @Nullable Long issuedAtTimestamp; - - @CanIgnoreReturnValue - public @NonNull Builder setIssuedAtTimestamp(@Nullable Long setterArg) { - this.issuedAtTimestamp = setterArg; - return this; - } - - private @Nullable String signInProvider; - - @CanIgnoreReturnValue - public @NonNull Builder setSignInProvider(@Nullable String setterArg) { - this.signInProvider = setterArg; - return this; - } - - private @Nullable Map claims; - - @CanIgnoreReturnValue - public @NonNull Builder setClaims(@Nullable Map setterArg) { - this.claims = setterArg; - return this; - } - - private @Nullable String signInSecondFactor; - - @CanIgnoreReturnValue - public @NonNull Builder setSignInSecondFactor(@Nullable String setterArg) { - this.signInSecondFactor = setterArg; - return this; - } - - public @NonNull InternalIdTokenResult build() { - InternalIdTokenResult pigeonReturn = new InternalIdTokenResult(); - pigeonReturn.setToken(token); - pigeonReturn.setExpirationTimestamp(expirationTimestamp); - pigeonReturn.setAuthTimestamp(authTimestamp); - pigeonReturn.setIssuedAtTimestamp(issuedAtTimestamp); - pigeonReturn.setSignInProvider(signInProvider); - pigeonReturn.setClaims(claims); - pigeonReturn.setSignInSecondFactor(signInSecondFactor); - return pigeonReturn; - } - } - - @NonNull - public ArrayList toList() { - ArrayList toListResult = new ArrayList<>(7); - toListResult.add(token); - toListResult.add(expirationTimestamp); - toListResult.add(authTimestamp); - toListResult.add(issuedAtTimestamp); - toListResult.add(signInProvider); - toListResult.add(claims); - toListResult.add(signInSecondFactor); - return toListResult; - } - - static @NonNull InternalIdTokenResult fromList(@NonNull ArrayList pigeonVar_list) { - InternalIdTokenResult pigeonResult = new InternalIdTokenResult(); - Object token = pigeonVar_list.get(0); - pigeonResult.setToken((String) token); - Object expirationTimestamp = pigeonVar_list.get(1); - pigeonResult.setExpirationTimestamp((Long) expirationTimestamp); - Object authTimestamp = pigeonVar_list.get(2); - pigeonResult.setAuthTimestamp((Long) authTimestamp); - Object issuedAtTimestamp = pigeonVar_list.get(3); - pigeonResult.setIssuedAtTimestamp((Long) issuedAtTimestamp); - Object signInProvider = pigeonVar_list.get(4); - pigeonResult.setSignInProvider((String) signInProvider); - Object claims = pigeonVar_list.get(5); - pigeonResult.setClaims((Map) claims); - Object signInSecondFactor = pigeonVar_list.get(6); - pigeonResult.setSignInSecondFactor((String) signInSecondFactor); - return pigeonResult; - } - } - - /** Generated class from Pigeon that represents data sent in messages. */ - public static final class InternalUserProfile { - private @Nullable String displayName; - - public @Nullable String getDisplayName() { - return displayName; - } - - public void setDisplayName(@Nullable String setterArg) { - this.displayName = setterArg; - } - - private @Nullable String photoUrl; - - public @Nullable String getPhotoUrl() { - return photoUrl; - } - - public void setPhotoUrl(@Nullable String setterArg) { - this.photoUrl = setterArg; - } - - private @NonNull Boolean displayNameChanged; - - public @NonNull Boolean getDisplayNameChanged() { - return displayNameChanged; - } - - public void setDisplayNameChanged(@NonNull Boolean setterArg) { - if (setterArg == null) { - throw new IllegalStateException("Nonnull field \"displayNameChanged\" is null."); - } - this.displayNameChanged = setterArg; - } - - private @NonNull Boolean photoUrlChanged; - - public @NonNull Boolean getPhotoUrlChanged() { - return photoUrlChanged; - } - - public void setPhotoUrlChanged(@NonNull Boolean setterArg) { - if (setterArg == null) { - throw new IllegalStateException("Nonnull field \"photoUrlChanged\" is null."); - } - this.photoUrlChanged = setterArg; - } - - /** Constructor is non-public to enforce null safety; use Builder. */ - InternalUserProfile() {} - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - InternalUserProfile that = (InternalUserProfile) o; - return pigeonDeepEquals(displayName, that.displayName) - && pigeonDeepEquals(photoUrl, that.photoUrl) - && pigeonDeepEquals(displayNameChanged, that.displayNameChanged) - && pigeonDeepEquals(photoUrlChanged, that.photoUrlChanged); - } - - @Override - public int hashCode() { - Object[] fields = - new Object[] {getClass(), displayName, photoUrl, displayNameChanged, photoUrlChanged}; - return pigeonDeepHashCode(fields); - } - - public static final class Builder { - - private @Nullable String displayName; - - @CanIgnoreReturnValue - public @NonNull Builder setDisplayName(@Nullable String setterArg) { - this.displayName = setterArg; - return this; - } - - private @Nullable String photoUrl; - - @CanIgnoreReturnValue - public @NonNull Builder setPhotoUrl(@Nullable String setterArg) { - this.photoUrl = setterArg; - return this; - } - - private @Nullable Boolean displayNameChanged; - - @CanIgnoreReturnValue - public @NonNull Builder setDisplayNameChanged(@NonNull Boolean setterArg) { - this.displayNameChanged = setterArg; - return this; - } - - private @Nullable Boolean photoUrlChanged; - - @CanIgnoreReturnValue - public @NonNull Builder setPhotoUrlChanged(@NonNull Boolean setterArg) { - this.photoUrlChanged = setterArg; - return this; - } - - public @NonNull InternalUserProfile build() { - InternalUserProfile pigeonReturn = new InternalUserProfile(); - pigeonReturn.setDisplayName(displayName); - pigeonReturn.setPhotoUrl(photoUrl); - pigeonReturn.setDisplayNameChanged(displayNameChanged); - pigeonReturn.setPhotoUrlChanged(photoUrlChanged); - return pigeonReturn; - } - } - - @NonNull - public ArrayList toList() { - ArrayList toListResult = new ArrayList<>(4); - toListResult.add(displayName); - toListResult.add(photoUrl); - toListResult.add(displayNameChanged); - toListResult.add(photoUrlChanged); - return toListResult; - } - - static @NonNull InternalUserProfile fromList(@NonNull ArrayList pigeonVar_list) { - InternalUserProfile pigeonResult = new InternalUserProfile(); - Object displayName = pigeonVar_list.get(0); - pigeonResult.setDisplayName((String) displayName); - Object photoUrl = pigeonVar_list.get(1); - pigeonResult.setPhotoUrl((String) photoUrl); - Object displayNameChanged = pigeonVar_list.get(2); - pigeonResult.setDisplayNameChanged((Boolean) displayNameChanged); - Object photoUrlChanged = pigeonVar_list.get(3); - pigeonResult.setPhotoUrlChanged((Boolean) photoUrlChanged); - return pigeonResult; - } - } - - /** Generated class from Pigeon that represents data sent in messages. */ - public static final class InternalTotpSecret { - private @Nullable Long codeIntervalSeconds; - - public @Nullable Long getCodeIntervalSeconds() { - return codeIntervalSeconds; - } - - public void setCodeIntervalSeconds(@Nullable Long setterArg) { - this.codeIntervalSeconds = setterArg; - } - - private @Nullable Long codeLength; - - public @Nullable Long getCodeLength() { - return codeLength; - } - - public void setCodeLength(@Nullable Long setterArg) { - this.codeLength = setterArg; - } - - private @Nullable Long enrollmentCompletionDeadline; - - public @Nullable Long getEnrollmentCompletionDeadline() { - return enrollmentCompletionDeadline; - } - - public void setEnrollmentCompletionDeadline(@Nullable Long setterArg) { - this.enrollmentCompletionDeadline = setterArg; - } - - private @Nullable String hashingAlgorithm; - - public @Nullable String getHashingAlgorithm() { - return hashingAlgorithm; - } - - public void setHashingAlgorithm(@Nullable String setterArg) { - this.hashingAlgorithm = setterArg; - } - - private @NonNull String secretKey; - - public @NonNull String getSecretKey() { - return secretKey; - } - - public void setSecretKey(@NonNull String setterArg) { - if (setterArg == null) { - throw new IllegalStateException("Nonnull field \"secretKey\" is null."); - } - this.secretKey = setterArg; - } - - /** Constructor is non-public to enforce null safety; use Builder. */ - InternalTotpSecret() {} - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - InternalTotpSecret that = (InternalTotpSecret) o; - return pigeonDeepEquals(codeIntervalSeconds, that.codeIntervalSeconds) - && pigeonDeepEquals(codeLength, that.codeLength) - && pigeonDeepEquals(enrollmentCompletionDeadline, that.enrollmentCompletionDeadline) - && pigeonDeepEquals(hashingAlgorithm, that.hashingAlgorithm) - && pigeonDeepEquals(secretKey, that.secretKey); - } - - @Override - public int hashCode() { - Object[] fields = - new Object[] { - getClass(), - codeIntervalSeconds, - codeLength, - enrollmentCompletionDeadline, - hashingAlgorithm, - secretKey - }; - return pigeonDeepHashCode(fields); - } - - public static final class Builder { - - private @Nullable Long codeIntervalSeconds; - - @CanIgnoreReturnValue - public @NonNull Builder setCodeIntervalSeconds(@Nullable Long setterArg) { - this.codeIntervalSeconds = setterArg; - return this; - } - - private @Nullable Long codeLength; - - @CanIgnoreReturnValue - public @NonNull Builder setCodeLength(@Nullable Long setterArg) { - this.codeLength = setterArg; - return this; - } - - private @Nullable Long enrollmentCompletionDeadline; - - @CanIgnoreReturnValue - public @NonNull Builder setEnrollmentCompletionDeadline(@Nullable Long setterArg) { - this.enrollmentCompletionDeadline = setterArg; - return this; - } - - private @Nullable String hashingAlgorithm; - - @CanIgnoreReturnValue - public @NonNull Builder setHashingAlgorithm(@Nullable String setterArg) { - this.hashingAlgorithm = setterArg; - return this; - } - - private @Nullable String secretKey; - - @CanIgnoreReturnValue - public @NonNull Builder setSecretKey(@NonNull String setterArg) { - this.secretKey = setterArg; - return this; - } - - public @NonNull InternalTotpSecret build() { - InternalTotpSecret pigeonReturn = new InternalTotpSecret(); - pigeonReturn.setCodeIntervalSeconds(codeIntervalSeconds); - pigeonReturn.setCodeLength(codeLength); - pigeonReturn.setEnrollmentCompletionDeadline(enrollmentCompletionDeadline); - pigeonReturn.setHashingAlgorithm(hashingAlgorithm); - pigeonReturn.setSecretKey(secretKey); - return pigeonReturn; - } - } - - @NonNull - public ArrayList toList() { - ArrayList toListResult = new ArrayList<>(5); - toListResult.add(codeIntervalSeconds); - toListResult.add(codeLength); - toListResult.add(enrollmentCompletionDeadline); - toListResult.add(hashingAlgorithm); - toListResult.add(secretKey); - return toListResult; - } - - static @NonNull InternalTotpSecret fromList(@NonNull ArrayList pigeonVar_list) { - InternalTotpSecret pigeonResult = new InternalTotpSecret(); - Object codeIntervalSeconds = pigeonVar_list.get(0); - pigeonResult.setCodeIntervalSeconds((Long) codeIntervalSeconds); - Object codeLength = pigeonVar_list.get(1); - pigeonResult.setCodeLength((Long) codeLength); - Object enrollmentCompletionDeadline = pigeonVar_list.get(2); - pigeonResult.setEnrollmentCompletionDeadline((Long) enrollmentCompletionDeadline); - Object hashingAlgorithm = pigeonVar_list.get(3); - pigeonResult.setHashingAlgorithm((String) hashingAlgorithm); - Object secretKey = pigeonVar_list.get(4); - pigeonResult.setSecretKey((String) secretKey); - return pigeonResult; - } - } - - private static class PigeonCodec extends StandardMessageCodec { - public static final PigeonCodec INSTANCE = new PigeonCodec(); - - private PigeonCodec() {} - - @Override - protected Object readValueOfType(byte type, @NonNull ByteBuffer buffer) { - switch (type) { - case (byte) 129: - { - Object value = readValue(buffer); - return value == null - ? null - : ActionCodeInfoOperation.values()[((Long) value).intValue()]; - } - case (byte) 130: - return InternalMultiFactorSession.fromList((ArrayList) readValue(buffer)); - case (byte) 131: - return InternalPhoneMultiFactorAssertion.fromList((ArrayList) readValue(buffer)); - case (byte) 132: - return InternalMultiFactorInfo.fromList((ArrayList) readValue(buffer)); - case (byte) 133: - return AuthPigeonFirebaseApp.fromList((ArrayList) readValue(buffer)); - case (byte) 134: - return InternalActionCodeInfoData.fromList((ArrayList) readValue(buffer)); - case (byte) 135: - return InternalActionCodeInfo.fromList((ArrayList) readValue(buffer)); - case (byte) 136: - return InternalAdditionalUserInfo.fromList((ArrayList) readValue(buffer)); - case (byte) 137: - return InternalAuthCredential.fromList((ArrayList) readValue(buffer)); - case (byte) 138: - return InternalUserInfo.fromList((ArrayList) readValue(buffer)); - case (byte) 139: - return InternalUserDetails.fromList((ArrayList) readValue(buffer)); - case (byte) 140: - return InternalUserCredential.fromList((ArrayList) readValue(buffer)); - case (byte) 141: - return InternalAuthCredentialInput.fromList((ArrayList) readValue(buffer)); - case (byte) 142: - return InternalActionCodeSettings.fromList((ArrayList) readValue(buffer)); - case (byte) 143: - return InternalFirebaseAuthSettings.fromList((ArrayList) readValue(buffer)); - case (byte) 144: - return InternalSignInProvider.fromList((ArrayList) readValue(buffer)); - case (byte) 145: - return InternalVerifyPhoneNumberRequest.fromList((ArrayList) readValue(buffer)); - case (byte) 146: - return InternalIdTokenResult.fromList((ArrayList) readValue(buffer)); - case (byte) 147: - return InternalUserProfile.fromList((ArrayList) readValue(buffer)); - case (byte) 148: - return InternalTotpSecret.fromList((ArrayList) readValue(buffer)); - default: - return super.readValueOfType(type, buffer); - } - } - - @Override - protected void writeValue(@NonNull ByteArrayOutputStream stream, Object value) { - if (value instanceof ActionCodeInfoOperation) { - stream.write(129); - writeValue(stream, value == null ? null : ((ActionCodeInfoOperation) value).index); - } else if (value instanceof InternalMultiFactorSession) { - stream.write(130); - writeValue(stream, ((InternalMultiFactorSession) value).toList()); - } else if (value instanceof InternalPhoneMultiFactorAssertion) { - stream.write(131); - writeValue(stream, ((InternalPhoneMultiFactorAssertion) value).toList()); - } else if (value instanceof InternalMultiFactorInfo) { - stream.write(132); - writeValue(stream, ((InternalMultiFactorInfo) value).toList()); - } else if (value instanceof AuthPigeonFirebaseApp) { - stream.write(133); - writeValue(stream, ((AuthPigeonFirebaseApp) value).toList()); - } else if (value instanceof InternalActionCodeInfoData) { - stream.write(134); - writeValue(stream, ((InternalActionCodeInfoData) value).toList()); - } else if (value instanceof InternalActionCodeInfo) { - stream.write(135); - writeValue(stream, ((InternalActionCodeInfo) value).toList()); - } else if (value instanceof InternalAdditionalUserInfo) { - stream.write(136); - writeValue(stream, ((InternalAdditionalUserInfo) value).toList()); - } else if (value instanceof InternalAuthCredential) { - stream.write(137); - writeValue(stream, ((InternalAuthCredential) value).toList()); - } else if (value instanceof InternalUserInfo) { - stream.write(138); - writeValue(stream, ((InternalUserInfo) value).toList()); - } else if (value instanceof InternalUserDetails) { - stream.write(139); - writeValue(stream, ((InternalUserDetails) value).toList()); - } else if (value instanceof InternalUserCredential) { - stream.write(140); - writeValue(stream, ((InternalUserCredential) value).toList()); - } else if (value instanceof InternalAuthCredentialInput) { - stream.write(141); - writeValue(stream, ((InternalAuthCredentialInput) value).toList()); - } else if (value instanceof InternalActionCodeSettings) { - stream.write(142); - writeValue(stream, ((InternalActionCodeSettings) value).toList()); - } else if (value instanceof InternalFirebaseAuthSettings) { - stream.write(143); - writeValue(stream, ((InternalFirebaseAuthSettings) value).toList()); - } else if (value instanceof InternalSignInProvider) { - stream.write(144); - writeValue(stream, ((InternalSignInProvider) value).toList()); - } else if (value instanceof InternalVerifyPhoneNumberRequest) { - stream.write(145); - writeValue(stream, ((InternalVerifyPhoneNumberRequest) value).toList()); - } else if (value instanceof InternalIdTokenResult) { - stream.write(146); - writeValue(stream, ((InternalIdTokenResult) value).toList()); - } else if (value instanceof InternalUserProfile) { - stream.write(147); - writeValue(stream, ((InternalUserProfile) value).toList()); - } else if (value instanceof InternalTotpSecret) { - stream.write(148); - writeValue(stream, ((InternalTotpSecret) value).toList()); - } else { - super.writeValue(stream, value); - } - } - } - - /** Asynchronous error handling return type for non-nullable API method returns. */ - public interface Result { - /** Success case callback method for handling returns. */ - void success(@NonNull T result); - - /** Failure case callback method for handling errors. */ - void error(@NonNull Throwable error); - } - - /** Asynchronous error handling return type for nullable API method returns. */ - public interface NullableResult { - /** Success case callback method for handling returns. */ - void success(@Nullable T result); - - /** Failure case callback method for handling errors. */ - void error(@NonNull Throwable error); - } - - /** Asynchronous error handling return type for void API method returns. */ - public interface VoidResult { - /** Success case callback method for handling returns. */ - void success(); - - /** Failure case callback method for handling errors. */ - void error(@NonNull Throwable error); - } - - /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ - public interface FirebaseAuthHostApi { - - void registerIdTokenListener( - @NonNull AuthPigeonFirebaseApp app, @NonNull Result result); - - void registerAuthStateListener( - @NonNull AuthPigeonFirebaseApp app, @NonNull Result result); - - void useEmulator( - @NonNull AuthPigeonFirebaseApp app, - @NonNull String host, - @NonNull Long port, - @NonNull VoidResult result); - - void applyActionCode( - @NonNull AuthPigeonFirebaseApp app, @NonNull String code, @NonNull VoidResult result); - - void checkActionCode( - @NonNull AuthPigeonFirebaseApp app, - @NonNull String code, - @NonNull Result result); - - void confirmPasswordReset( - @NonNull AuthPigeonFirebaseApp app, - @NonNull String code, - @NonNull String newPassword, - @NonNull VoidResult result); - - void createUserWithEmailAndPassword( - @NonNull AuthPigeonFirebaseApp app, - @NonNull String email, - @NonNull String password, - @NonNull Result result); - - void signInAnonymously( - @NonNull AuthPigeonFirebaseApp app, @NonNull Result result); - - void signInWithCredential( - @NonNull AuthPigeonFirebaseApp app, - @NonNull Map input, - @NonNull Result result); - - void signInWithCustomToken( - @NonNull AuthPigeonFirebaseApp app, - @NonNull String token, - @NonNull Result result); - - void signInWithEmailAndPassword( - @NonNull AuthPigeonFirebaseApp app, - @NonNull String email, - @NonNull String password, - @NonNull Result result); - - void signInWithEmailLink( - @NonNull AuthPigeonFirebaseApp app, - @NonNull String email, - @NonNull String emailLink, - @NonNull Result result); - - void signInWithProvider( - @NonNull AuthPigeonFirebaseApp app, - @NonNull InternalSignInProvider signInProvider, - @NonNull Result result); - - void signOut(@NonNull AuthPigeonFirebaseApp app, @NonNull VoidResult result); - - void fetchSignInMethodsForEmail( - @NonNull AuthPigeonFirebaseApp app, - @NonNull String email, - @NonNull Result> result); - - void sendPasswordResetEmail( - @NonNull AuthPigeonFirebaseApp app, - @NonNull String email, - @Nullable InternalActionCodeSettings actionCodeSettings, - @NonNull VoidResult result); - - void sendSignInLinkToEmail( - @NonNull AuthPigeonFirebaseApp app, - @NonNull String email, - @NonNull InternalActionCodeSettings actionCodeSettings, - @NonNull VoidResult result); - - void setLanguageCode( - @NonNull AuthPigeonFirebaseApp app, - @Nullable String languageCode, - @NonNull Result result); - - void setSettings( - @NonNull AuthPigeonFirebaseApp app, - @NonNull InternalFirebaseAuthSettings settings, - @NonNull VoidResult result); - - void verifyPasswordResetCode( - @NonNull AuthPigeonFirebaseApp app, @NonNull String code, @NonNull Result result); - - void verifyPhoneNumber( - @NonNull AuthPigeonFirebaseApp app, - @NonNull InternalVerifyPhoneNumberRequest request, - @NonNull Result result); - - void revokeTokenWithAuthorizationCode( - @NonNull AuthPigeonFirebaseApp app, - @NonNull String authorizationCode, - @NonNull VoidResult result); - - void revokeAccessToken( - @NonNull AuthPigeonFirebaseApp app, - @NonNull String accessToken, - @NonNull VoidResult result); - - void initializeRecaptchaConfig(@NonNull AuthPigeonFirebaseApp app, @NonNull VoidResult result); - - /** The codec used by FirebaseAuthHostApi. */ - static @NonNull MessageCodec getCodec() { - return PigeonCodec.INSTANCE; - } - - /** - * Sets up an instance of `FirebaseAuthHostApi` to handle messages through the - * `binaryMessenger`. - */ - static void setUp(@NonNull BinaryMessenger binaryMessenger, @Nullable FirebaseAuthHostApi api) { - setUp(binaryMessenger, "", api); - } - - static void setUp( - @NonNull BinaryMessenger binaryMessenger, - @NonNull String messageChannelSuffix, - @Nullable FirebaseAuthHostApi api) { - messageChannelSuffix = messageChannelSuffix.isEmpty() ? "" : "." + messageChannelSuffix; - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.registerIdTokenListener" - + messageChannelSuffix, - getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - ArrayList args = (ArrayList) message; - AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); - Result resultCallback = - new Result() { - public void success(String result) { - wrapped.add(0, result); - reply.reply(wrapped); - } - - public void error(Throwable error) { - ArrayList wrappedError = wrapError(error); - reply.reply(wrappedError); - } - }; - - api.registerIdTokenListener(appArg, resultCallback); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.registerAuthStateListener" - + messageChannelSuffix, - getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - ArrayList args = (ArrayList) message; - AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); - Result resultCallback = - new Result() { - public void success(String result) { - wrapped.add(0, result); - reply.reply(wrapped); - } - - public void error(Throwable error) { - ArrayList wrappedError = wrapError(error); - reply.reply(wrappedError); - } - }; - - api.registerAuthStateListener(appArg, resultCallback); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.useEmulator" - + messageChannelSuffix, - getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - ArrayList args = (ArrayList) message; - AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); - String hostArg = (String) args.get(1); - Long portArg = (Long) args.get(2); - VoidResult resultCallback = - new VoidResult() { - public void success() { - wrapped.add(0, null); - reply.reply(wrapped); - } - - public void error(Throwable error) { - ArrayList wrappedError = wrapError(error); - reply.reply(wrappedError); - } - }; - - api.useEmulator(appArg, hostArg, portArg, resultCallback); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.applyActionCode" - + messageChannelSuffix, - getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - ArrayList args = (ArrayList) message; - AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); - String codeArg = (String) args.get(1); - VoidResult resultCallback = - new VoidResult() { - public void success() { - wrapped.add(0, null); - reply.reply(wrapped); - } - - public void error(Throwable error) { - ArrayList wrappedError = wrapError(error); - reply.reply(wrappedError); - } - }; - - api.applyActionCode(appArg, codeArg, resultCallback); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.checkActionCode" - + messageChannelSuffix, - getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - ArrayList args = (ArrayList) message; - AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); - String codeArg = (String) args.get(1); - Result resultCallback = - new Result() { - public void success(InternalActionCodeInfo result) { - wrapped.add(0, result); - reply.reply(wrapped); - } - - public void error(Throwable error) { - ArrayList wrappedError = wrapError(error); - reply.reply(wrappedError); - } - }; - - api.checkActionCode(appArg, codeArg, resultCallback); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.confirmPasswordReset" - + messageChannelSuffix, - getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - ArrayList args = (ArrayList) message; - AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); - String codeArg = (String) args.get(1); - String newPasswordArg = (String) args.get(2); - VoidResult resultCallback = - new VoidResult() { - public void success() { - wrapped.add(0, null); - reply.reply(wrapped); - } - - public void error(Throwable error) { - ArrayList wrappedError = wrapError(error); - reply.reply(wrappedError); - } - }; - - api.confirmPasswordReset(appArg, codeArg, newPasswordArg, resultCallback); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.createUserWithEmailAndPassword" - + messageChannelSuffix, - getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - ArrayList args = (ArrayList) message; - AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); - String emailArg = (String) args.get(1); - String passwordArg = (String) args.get(2); - Result resultCallback = - new Result() { - public void success(InternalUserCredential result) { - wrapped.add(0, result); - reply.reply(wrapped); - } - - public void error(Throwable error) { - ArrayList wrappedError = wrapError(error); - reply.reply(wrappedError); - } - }; - - api.createUserWithEmailAndPassword(appArg, emailArg, passwordArg, resultCallback); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.signInAnonymously" - + messageChannelSuffix, - getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - ArrayList args = (ArrayList) message; - AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); - Result resultCallback = - new Result() { - public void success(InternalUserCredential result) { - wrapped.add(0, result); - reply.reply(wrapped); - } - - public void error(Throwable error) { - ArrayList wrappedError = wrapError(error); - reply.reply(wrappedError); - } - }; - - api.signInAnonymously(appArg, resultCallback); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.signInWithCredential" - + messageChannelSuffix, - getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - ArrayList args = (ArrayList) message; - AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); - Map inputArg = (Map) args.get(1); - Result resultCallback = - new Result() { - public void success(InternalUserCredential result) { - wrapped.add(0, result); - reply.reply(wrapped); - } - - public void error(Throwable error) { - ArrayList wrappedError = wrapError(error); - reply.reply(wrappedError); - } - }; - - api.signInWithCredential(appArg, inputArg, resultCallback); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.signInWithCustomToken" - + messageChannelSuffix, - getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - ArrayList args = (ArrayList) message; - AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); - String tokenArg = (String) args.get(1); - Result resultCallback = - new Result() { - public void success(InternalUserCredential result) { - wrapped.add(0, result); - reply.reply(wrapped); - } - - public void error(Throwable error) { - ArrayList wrappedError = wrapError(error); - reply.reply(wrappedError); - } - }; - - api.signInWithCustomToken(appArg, tokenArg, resultCallback); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.signInWithEmailAndPassword" - + messageChannelSuffix, - getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - ArrayList args = (ArrayList) message; - AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); - String emailArg = (String) args.get(1); - String passwordArg = (String) args.get(2); - Result resultCallback = - new Result() { - public void success(InternalUserCredential result) { - wrapped.add(0, result); - reply.reply(wrapped); - } - - public void error(Throwable error) { - ArrayList wrappedError = wrapError(error); - reply.reply(wrappedError); - } - }; - - api.signInWithEmailAndPassword(appArg, emailArg, passwordArg, resultCallback); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.signInWithEmailLink" - + messageChannelSuffix, - getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - ArrayList args = (ArrayList) message; - AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); - String emailArg = (String) args.get(1); - String emailLinkArg = (String) args.get(2); - Result resultCallback = - new Result() { - public void success(InternalUserCredential result) { - wrapped.add(0, result); - reply.reply(wrapped); - } - - public void error(Throwable error) { - ArrayList wrappedError = wrapError(error); - reply.reply(wrappedError); - } - }; - - api.signInWithEmailLink(appArg, emailArg, emailLinkArg, resultCallback); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.signInWithProvider" - + messageChannelSuffix, - getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - ArrayList args = (ArrayList) message; - AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); - InternalSignInProvider signInProviderArg = (InternalSignInProvider) args.get(1); - Result resultCallback = - new Result() { - public void success(InternalUserCredential result) { - wrapped.add(0, result); - reply.reply(wrapped); - } - - public void error(Throwable error) { - ArrayList wrappedError = wrapError(error); - reply.reply(wrappedError); - } - }; - - api.signInWithProvider(appArg, signInProviderArg, resultCallback); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.signOut" - + messageChannelSuffix, - getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - ArrayList args = (ArrayList) message; - AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); - VoidResult resultCallback = - new VoidResult() { - public void success() { - wrapped.add(0, null); - reply.reply(wrapped); - } - - public void error(Throwable error) { - ArrayList wrappedError = wrapError(error); - reply.reply(wrappedError); - } - }; - - api.signOut(appArg, resultCallback); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.fetchSignInMethodsForEmail" - + messageChannelSuffix, - getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - ArrayList args = (ArrayList) message; - AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); - String emailArg = (String) args.get(1); - Result> resultCallback = - new Result>() { - public void success(List result) { - wrapped.add(0, result); - reply.reply(wrapped); - } - - public void error(Throwable error) { - ArrayList wrappedError = wrapError(error); - reply.reply(wrappedError); - } - }; - - api.fetchSignInMethodsForEmail(appArg, emailArg, resultCallback); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.sendPasswordResetEmail" - + messageChannelSuffix, - getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - ArrayList args = (ArrayList) message; - AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); - String emailArg = (String) args.get(1); - InternalActionCodeSettings actionCodeSettingsArg = - (InternalActionCodeSettings) args.get(2); - VoidResult resultCallback = - new VoidResult() { - public void success() { - wrapped.add(0, null); - reply.reply(wrapped); - } - - public void error(Throwable error) { - ArrayList wrappedError = wrapError(error); - reply.reply(wrappedError); - } - }; - - api.sendPasswordResetEmail(appArg, emailArg, actionCodeSettingsArg, resultCallback); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.sendSignInLinkToEmail" - + messageChannelSuffix, - getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - ArrayList args = (ArrayList) message; - AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); - String emailArg = (String) args.get(1); - InternalActionCodeSettings actionCodeSettingsArg = - (InternalActionCodeSettings) args.get(2); - VoidResult resultCallback = - new VoidResult() { - public void success() { - wrapped.add(0, null); - reply.reply(wrapped); - } - - public void error(Throwable error) { - ArrayList wrappedError = wrapError(error); - reply.reply(wrappedError); - } - }; - - api.sendSignInLinkToEmail(appArg, emailArg, actionCodeSettingsArg, resultCallback); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.setLanguageCode" - + messageChannelSuffix, - getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - ArrayList args = (ArrayList) message; - AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); - String languageCodeArg = (String) args.get(1); - Result resultCallback = - new Result() { - public void success(String result) { - wrapped.add(0, result); - reply.reply(wrapped); - } - - public void error(Throwable error) { - ArrayList wrappedError = wrapError(error); - reply.reply(wrappedError); - } - }; - - api.setLanguageCode(appArg, languageCodeArg, resultCallback); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.setSettings" - + messageChannelSuffix, - getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - ArrayList args = (ArrayList) message; - AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); - InternalFirebaseAuthSettings settingsArg = - (InternalFirebaseAuthSettings) args.get(1); - VoidResult resultCallback = - new VoidResult() { - public void success() { - wrapped.add(0, null); - reply.reply(wrapped); - } - - public void error(Throwable error) { - ArrayList wrappedError = wrapError(error); - reply.reply(wrappedError); - } - }; - - api.setSettings(appArg, settingsArg, resultCallback); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.verifyPasswordResetCode" - + messageChannelSuffix, - getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - ArrayList args = (ArrayList) message; - AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); - String codeArg = (String) args.get(1); - Result resultCallback = - new Result() { - public void success(String result) { - wrapped.add(0, result); - reply.reply(wrapped); - } - - public void error(Throwable error) { - ArrayList wrappedError = wrapError(error); - reply.reply(wrappedError); - } - }; - - api.verifyPasswordResetCode(appArg, codeArg, resultCallback); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.verifyPhoneNumber" - + messageChannelSuffix, - getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - ArrayList args = (ArrayList) message; - AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); - InternalVerifyPhoneNumberRequest requestArg = - (InternalVerifyPhoneNumberRequest) args.get(1); - Result resultCallback = - new Result() { - public void success(String result) { - wrapped.add(0, result); - reply.reply(wrapped); - } - - public void error(Throwable error) { - ArrayList wrappedError = wrapError(error); - reply.reply(wrappedError); - } - }; - - api.verifyPhoneNumber(appArg, requestArg, resultCallback); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.revokeTokenWithAuthorizationCode" - + messageChannelSuffix, - getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - ArrayList args = (ArrayList) message; - AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); - String authorizationCodeArg = (String) args.get(1); - VoidResult resultCallback = - new VoidResult() { - public void success() { - wrapped.add(0, null); - reply.reply(wrapped); - } - - public void error(Throwable error) { - ArrayList wrappedError = wrapError(error); - reply.reply(wrappedError); - } - }; - - api.revokeTokenWithAuthorizationCode(appArg, authorizationCodeArg, resultCallback); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.revokeAccessToken" - + messageChannelSuffix, - getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - ArrayList args = (ArrayList) message; - AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); - String accessTokenArg = (String) args.get(1); - VoidResult resultCallback = - new VoidResult() { - public void success() { - wrapped.add(0, null); - reply.reply(wrapped); - } - - public void error(Throwable error) { - ArrayList wrappedError = wrapError(error); - reply.reply(wrappedError); - } - }; - - api.revokeAccessToken(appArg, accessTokenArg, resultCallback); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.initializeRecaptchaConfig" - + messageChannelSuffix, - getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - ArrayList args = (ArrayList) message; - AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); - VoidResult resultCallback = - new VoidResult() { - public void success() { - wrapped.add(0, null); - reply.reply(wrapped); - } - - public void error(Throwable error) { - ArrayList wrappedError = wrapError(error); - reply.reply(wrappedError); - } - }; - - api.initializeRecaptchaConfig(appArg, resultCallback); - }); - } else { - channel.setMessageHandler(null); - } - } - } - } - - /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ - public interface FirebaseAuthUserHostApi { - - void delete(@NonNull AuthPigeonFirebaseApp app, @NonNull VoidResult result); - - void getIdToken( - @NonNull AuthPigeonFirebaseApp app, - @NonNull Boolean forceRefresh, - @NonNull Result result); - - void linkWithCredential( - @NonNull AuthPigeonFirebaseApp app, - @NonNull Map input, - @NonNull Result result); - - void linkWithProvider( - @NonNull AuthPigeonFirebaseApp app, - @NonNull InternalSignInProvider signInProvider, - @NonNull Result result); - - void reauthenticateWithCredential( - @NonNull AuthPigeonFirebaseApp app, - @NonNull Map input, - @NonNull Result result); - - void reauthenticateWithProvider( - @NonNull AuthPigeonFirebaseApp app, - @NonNull InternalSignInProvider signInProvider, - @NonNull Result result); - - void reload(@NonNull AuthPigeonFirebaseApp app, @NonNull Result result); - - void sendEmailVerification( - @NonNull AuthPigeonFirebaseApp app, - @Nullable InternalActionCodeSettings actionCodeSettings, - @NonNull VoidResult result); - - void unlink( - @NonNull AuthPigeonFirebaseApp app, - @NonNull String providerId, - @NonNull Result result); - - void updateEmail( - @NonNull AuthPigeonFirebaseApp app, - @NonNull String newEmail, - @NonNull Result result); - - void updatePassword( - @NonNull AuthPigeonFirebaseApp app, - @NonNull String newPassword, - @NonNull Result result); - - void updatePhoneNumber( - @NonNull AuthPigeonFirebaseApp app, - @NonNull Map input, - @NonNull Result result); - - void updateProfile( - @NonNull AuthPigeonFirebaseApp app, - @NonNull InternalUserProfile profile, - @NonNull Result result); - - void verifyBeforeUpdateEmail( - @NonNull AuthPigeonFirebaseApp app, - @NonNull String newEmail, - @Nullable InternalActionCodeSettings actionCodeSettings, - @NonNull VoidResult result); - - /** The codec used by FirebaseAuthUserHostApi. */ - static @NonNull MessageCodec getCodec() { - return PigeonCodec.INSTANCE; - } - - /** - * Sets up an instance of `FirebaseAuthUserHostApi` to handle messages through the - * `binaryMessenger`. - */ - static void setUp( - @NonNull BinaryMessenger binaryMessenger, @Nullable FirebaseAuthUserHostApi api) { - setUp(binaryMessenger, "", api); - } - - static void setUp( - @NonNull BinaryMessenger binaryMessenger, - @NonNull String messageChannelSuffix, - @Nullable FirebaseAuthUserHostApi api) { - messageChannelSuffix = messageChannelSuffix.isEmpty() ? "" : "." + messageChannelSuffix; - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.delete" - + messageChannelSuffix, - getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - ArrayList args = (ArrayList) message; - AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); - VoidResult resultCallback = - new VoidResult() { - public void success() { - wrapped.add(0, null); - reply.reply(wrapped); - } - - public void error(Throwable error) { - ArrayList wrappedError = wrapError(error); - reply.reply(wrappedError); - } - }; - - api.delete(appArg, resultCallback); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.getIdToken" - + messageChannelSuffix, - getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - ArrayList args = (ArrayList) message; - AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); - Boolean forceRefreshArg = (Boolean) args.get(1); - Result resultCallback = - new Result() { - public void success(InternalIdTokenResult result) { - wrapped.add(0, result); - reply.reply(wrapped); - } - - public void error(Throwable error) { - ArrayList wrappedError = wrapError(error); - reply.reply(wrappedError); - } - }; - - api.getIdToken(appArg, forceRefreshArg, resultCallback); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.linkWithCredential" - + messageChannelSuffix, - getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - ArrayList args = (ArrayList) message; - AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); - Map inputArg = (Map) args.get(1); - Result resultCallback = - new Result() { - public void success(InternalUserCredential result) { - wrapped.add(0, result); - reply.reply(wrapped); - } - - public void error(Throwable error) { - ArrayList wrappedError = wrapError(error); - reply.reply(wrappedError); - } - }; - - api.linkWithCredential(appArg, inputArg, resultCallback); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.linkWithProvider" - + messageChannelSuffix, - getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - ArrayList args = (ArrayList) message; - AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); - InternalSignInProvider signInProviderArg = (InternalSignInProvider) args.get(1); - Result resultCallback = - new Result() { - public void success(InternalUserCredential result) { - wrapped.add(0, result); - reply.reply(wrapped); - } - - public void error(Throwable error) { - ArrayList wrappedError = wrapError(error); - reply.reply(wrappedError); - } - }; - - api.linkWithProvider(appArg, signInProviderArg, resultCallback); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.reauthenticateWithCredential" - + messageChannelSuffix, - getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - ArrayList args = (ArrayList) message; - AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); - Map inputArg = (Map) args.get(1); - Result resultCallback = - new Result() { - public void success(InternalUserCredential result) { - wrapped.add(0, result); - reply.reply(wrapped); - } - - public void error(Throwable error) { - ArrayList wrappedError = wrapError(error); - reply.reply(wrappedError); - } - }; - - api.reauthenticateWithCredential(appArg, inputArg, resultCallback); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.reauthenticateWithProvider" - + messageChannelSuffix, - getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - ArrayList args = (ArrayList) message; - AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); - InternalSignInProvider signInProviderArg = (InternalSignInProvider) args.get(1); - Result resultCallback = - new Result() { - public void success(InternalUserCredential result) { - wrapped.add(0, result); - reply.reply(wrapped); - } - - public void error(Throwable error) { - ArrayList wrappedError = wrapError(error); - reply.reply(wrappedError); - } - }; - - api.reauthenticateWithProvider(appArg, signInProviderArg, resultCallback); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.reload" - + messageChannelSuffix, - getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - ArrayList args = (ArrayList) message; - AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); - Result resultCallback = - new Result() { - public void success(InternalUserDetails result) { - wrapped.add(0, result); - reply.reply(wrapped); - } - - public void error(Throwable error) { - ArrayList wrappedError = wrapError(error); - reply.reply(wrappedError); - } - }; - - api.reload(appArg, resultCallback); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.sendEmailVerification" - + messageChannelSuffix, - getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - ArrayList args = (ArrayList) message; - AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); - InternalActionCodeSettings actionCodeSettingsArg = - (InternalActionCodeSettings) args.get(1); - VoidResult resultCallback = - new VoidResult() { - public void success() { - wrapped.add(0, null); - reply.reply(wrapped); - } - - public void error(Throwable error) { - ArrayList wrappedError = wrapError(error); - reply.reply(wrappedError); - } - }; - - api.sendEmailVerification(appArg, actionCodeSettingsArg, resultCallback); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.unlink" - + messageChannelSuffix, - getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - ArrayList args = (ArrayList) message; - AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); - String providerIdArg = (String) args.get(1); - Result resultCallback = - new Result() { - public void success(InternalUserCredential result) { - wrapped.add(0, result); - reply.reply(wrapped); - } - - public void error(Throwable error) { - ArrayList wrappedError = wrapError(error); - reply.reply(wrappedError); - } - }; - - api.unlink(appArg, providerIdArg, resultCallback); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.updateEmail" - + messageChannelSuffix, - getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - ArrayList args = (ArrayList) message; - AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); - String newEmailArg = (String) args.get(1); - Result resultCallback = - new Result() { - public void success(InternalUserDetails result) { - wrapped.add(0, result); - reply.reply(wrapped); - } - - public void error(Throwable error) { - ArrayList wrappedError = wrapError(error); - reply.reply(wrappedError); - } - }; - - api.updateEmail(appArg, newEmailArg, resultCallback); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.updatePassword" - + messageChannelSuffix, - getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - ArrayList args = (ArrayList) message; - AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); - String newPasswordArg = (String) args.get(1); - Result resultCallback = - new Result() { - public void success(InternalUserDetails result) { - wrapped.add(0, result); - reply.reply(wrapped); - } - - public void error(Throwable error) { - ArrayList wrappedError = wrapError(error); - reply.reply(wrappedError); - } - }; - - api.updatePassword(appArg, newPasswordArg, resultCallback); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.updatePhoneNumber" - + messageChannelSuffix, - getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - ArrayList args = (ArrayList) message; - AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); - Map inputArg = (Map) args.get(1); - Result resultCallback = - new Result() { - public void success(InternalUserDetails result) { - wrapped.add(0, result); - reply.reply(wrapped); - } - - public void error(Throwable error) { - ArrayList wrappedError = wrapError(error); - reply.reply(wrappedError); - } - }; - - api.updatePhoneNumber(appArg, inputArg, resultCallback); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.updateProfile" - + messageChannelSuffix, - getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - ArrayList args = (ArrayList) message; - AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); - InternalUserProfile profileArg = (InternalUserProfile) args.get(1); - Result resultCallback = - new Result() { - public void success(InternalUserDetails result) { - wrapped.add(0, result); - reply.reply(wrapped); - } - - public void error(Throwable error) { - ArrayList wrappedError = wrapError(error); - reply.reply(wrappedError); - } - }; - - api.updateProfile(appArg, profileArg, resultCallback); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.verifyBeforeUpdateEmail" - + messageChannelSuffix, - getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - ArrayList args = (ArrayList) message; - AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); - String newEmailArg = (String) args.get(1); - InternalActionCodeSettings actionCodeSettingsArg = - (InternalActionCodeSettings) args.get(2); - VoidResult resultCallback = - new VoidResult() { - public void success() { - wrapped.add(0, null); - reply.reply(wrapped); - } - - public void error(Throwable error) { - ArrayList wrappedError = wrapError(error); - reply.reply(wrappedError); - } - }; - - api.verifyBeforeUpdateEmail( - appArg, newEmailArg, actionCodeSettingsArg, resultCallback); - }); - } else { - channel.setMessageHandler(null); - } - } - } - } - - /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ - public interface MultiFactorUserHostApi { - - void enrollPhone( - @NonNull AuthPigeonFirebaseApp app, - @NonNull InternalPhoneMultiFactorAssertion assertion, - @Nullable String displayName, - @NonNull VoidResult result); - - void enrollTotp( - @NonNull AuthPigeonFirebaseApp app, - @NonNull String assertionId, - @Nullable String displayName, - @NonNull VoidResult result); - - void getSession( - @NonNull AuthPigeonFirebaseApp app, @NonNull Result result); - - void unenroll( - @NonNull AuthPigeonFirebaseApp app, @NonNull String factorUid, @NonNull VoidResult result); - - void getEnrolledFactors( - @NonNull AuthPigeonFirebaseApp app, @NonNull Result> result); - - /** The codec used by MultiFactorUserHostApi. */ - static @NonNull MessageCodec getCodec() { - return PigeonCodec.INSTANCE; - } - - /** - * Sets up an instance of `MultiFactorUserHostApi` to handle messages through the - * `binaryMessenger`. - */ - static void setUp( - @NonNull BinaryMessenger binaryMessenger, @Nullable MultiFactorUserHostApi api) { - setUp(binaryMessenger, "", api); - } - - static void setUp( - @NonNull BinaryMessenger binaryMessenger, - @NonNull String messageChannelSuffix, - @Nullable MultiFactorUserHostApi api) { - messageChannelSuffix = messageChannelSuffix.isEmpty() ? "" : "." + messageChannelSuffix; - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.firebase_auth_platform_interface.MultiFactorUserHostApi.enrollPhone" - + messageChannelSuffix, - getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - ArrayList args = (ArrayList) message; - AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); - InternalPhoneMultiFactorAssertion assertionArg = - (InternalPhoneMultiFactorAssertion) args.get(1); - String displayNameArg = (String) args.get(2); - VoidResult resultCallback = - new VoidResult() { - public void success() { - wrapped.add(0, null); - reply.reply(wrapped); - } - - public void error(Throwable error) { - ArrayList wrappedError = wrapError(error); - reply.reply(wrappedError); - } - }; - - api.enrollPhone(appArg, assertionArg, displayNameArg, resultCallback); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.firebase_auth_platform_interface.MultiFactorUserHostApi.enrollTotp" - + messageChannelSuffix, - getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - ArrayList args = (ArrayList) message; - AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); - String assertionIdArg = (String) args.get(1); - String displayNameArg = (String) args.get(2); - VoidResult resultCallback = - new VoidResult() { - public void success() { - wrapped.add(0, null); - reply.reply(wrapped); - } - - public void error(Throwable error) { - ArrayList wrappedError = wrapError(error); - reply.reply(wrappedError); - } - }; - - api.enrollTotp(appArg, assertionIdArg, displayNameArg, resultCallback); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.firebase_auth_platform_interface.MultiFactorUserHostApi.getSession" - + messageChannelSuffix, - getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - ArrayList args = (ArrayList) message; - AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); - Result resultCallback = - new Result() { - public void success(InternalMultiFactorSession result) { - wrapped.add(0, result); - reply.reply(wrapped); - } - - public void error(Throwable error) { - ArrayList wrappedError = wrapError(error); - reply.reply(wrappedError); - } - }; - - api.getSession(appArg, resultCallback); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.firebase_auth_platform_interface.MultiFactorUserHostApi.unenroll" - + messageChannelSuffix, - getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - ArrayList args = (ArrayList) message; - AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); - String factorUidArg = (String) args.get(1); - VoidResult resultCallback = - new VoidResult() { - public void success() { - wrapped.add(0, null); - reply.reply(wrapped); - } - - public void error(Throwable error) { - ArrayList wrappedError = wrapError(error); - reply.reply(wrappedError); - } - }; - - api.unenroll(appArg, factorUidArg, resultCallback); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.firebase_auth_platform_interface.MultiFactorUserHostApi.getEnrolledFactors" - + messageChannelSuffix, - getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - ArrayList args = (ArrayList) message; - AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); - Result> resultCallback = - new Result>() { - public void success(List result) { - wrapped.add(0, result); - reply.reply(wrapped); - } - - public void error(Throwable error) { - ArrayList wrappedError = wrapError(error); - reply.reply(wrappedError); - } - }; - - api.getEnrolledFactors(appArg, resultCallback); - }); - } else { - channel.setMessageHandler(null); - } - } - } - } - - /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ - public interface MultiFactoResolverHostApi { - - void resolveSignIn( - @NonNull String resolverId, - @Nullable InternalPhoneMultiFactorAssertion assertion, - @Nullable String totpAssertionId, - @NonNull Result result); - - /** The codec used by MultiFactoResolverHostApi. */ - static @NonNull MessageCodec getCodec() { - return PigeonCodec.INSTANCE; - } - - /** - * Sets up an instance of `MultiFactoResolverHostApi` to handle messages through the - * `binaryMessenger`. - */ - static void setUp( - @NonNull BinaryMessenger binaryMessenger, @Nullable MultiFactoResolverHostApi api) { - setUp(binaryMessenger, "", api); - } - - static void setUp( - @NonNull BinaryMessenger binaryMessenger, - @NonNull String messageChannelSuffix, - @Nullable MultiFactoResolverHostApi api) { - messageChannelSuffix = messageChannelSuffix.isEmpty() ? "" : "." + messageChannelSuffix; - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.firebase_auth_platform_interface.MultiFactoResolverHostApi.resolveSignIn" - + messageChannelSuffix, - getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - ArrayList args = (ArrayList) message; - String resolverIdArg = (String) args.get(0); - InternalPhoneMultiFactorAssertion assertionArg = - (InternalPhoneMultiFactorAssertion) args.get(1); - String totpAssertionIdArg = (String) args.get(2); - Result resultCallback = - new Result() { - public void success(InternalUserCredential result) { - wrapped.add(0, result); - reply.reply(wrapped); - } - - public void error(Throwable error) { - ArrayList wrappedError = wrapError(error); - reply.reply(wrappedError); - } - }; - - api.resolveSignIn(resolverIdArg, assertionArg, totpAssertionIdArg, resultCallback); - }); - } else { - channel.setMessageHandler(null); - } - } - } - } - - /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ - public interface MultiFactorTotpHostApi { - - void generateSecret(@NonNull String sessionId, @NonNull Result result); - - void getAssertionForEnrollment( - @NonNull String secretKey, @NonNull String oneTimePassword, @NonNull Result result); - - void getAssertionForSignIn( - @NonNull String enrollmentId, - @NonNull String oneTimePassword, - @NonNull Result result); - - /** The codec used by MultiFactorTotpHostApi. */ - static @NonNull MessageCodec getCodec() { - return PigeonCodec.INSTANCE; - } - - /** - * Sets up an instance of `MultiFactorTotpHostApi` to handle messages through the - * `binaryMessenger`. - */ - static void setUp( - @NonNull BinaryMessenger binaryMessenger, @Nullable MultiFactorTotpHostApi api) { - setUp(binaryMessenger, "", api); - } - - static void setUp( - @NonNull BinaryMessenger binaryMessenger, - @NonNull String messageChannelSuffix, - @Nullable MultiFactorTotpHostApi api) { - messageChannelSuffix = messageChannelSuffix.isEmpty() ? "" : "." + messageChannelSuffix; - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.firebase_auth_platform_interface.MultiFactorTotpHostApi.generateSecret" - + messageChannelSuffix, - getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - ArrayList args = (ArrayList) message; - String sessionIdArg = (String) args.get(0); - Result resultCallback = - new Result() { - public void success(InternalTotpSecret result) { - wrapped.add(0, result); - reply.reply(wrapped); - } - - public void error(Throwable error) { - ArrayList wrappedError = wrapError(error); - reply.reply(wrappedError); - } - }; - - api.generateSecret(sessionIdArg, resultCallback); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.firebase_auth_platform_interface.MultiFactorTotpHostApi.getAssertionForEnrollment" - + messageChannelSuffix, - getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - ArrayList args = (ArrayList) message; - String secretKeyArg = (String) args.get(0); - String oneTimePasswordArg = (String) args.get(1); - Result resultCallback = - new Result() { - public void success(String result) { - wrapped.add(0, result); - reply.reply(wrapped); - } - - public void error(Throwable error) { - ArrayList wrappedError = wrapError(error); - reply.reply(wrappedError); - } - }; - - api.getAssertionForEnrollment(secretKeyArg, oneTimePasswordArg, resultCallback); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.firebase_auth_platform_interface.MultiFactorTotpHostApi.getAssertionForSignIn" - + messageChannelSuffix, - getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - ArrayList args = (ArrayList) message; - String enrollmentIdArg = (String) args.get(0); - String oneTimePasswordArg = (String) args.get(1); - Result resultCallback = - new Result() { - public void success(String result) { - wrapped.add(0, result); - reply.reply(wrapped); - } - - public void error(Throwable error) { - ArrayList wrappedError = wrapError(error); - reply.reply(wrappedError); - } - }; - - api.getAssertionForSignIn(enrollmentIdArg, oneTimePasswordArg, resultCallback); - }); - } else { - channel.setMessageHandler(null); - } - } - } - } - - /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ - public interface MultiFactorTotpSecretHostApi { - - void generateQrCodeUrl( - @NonNull String secretKey, - @Nullable String accountName, - @Nullable String issuer, - @NonNull Result result); - - void openInOtpApp( - @NonNull String secretKey, @NonNull String qrCodeUrl, @NonNull VoidResult result); - - /** The codec used by MultiFactorTotpSecretHostApi. */ - static @NonNull MessageCodec getCodec() { - return PigeonCodec.INSTANCE; - } - - /** - * Sets up an instance of `MultiFactorTotpSecretHostApi` to handle messages through the - * `binaryMessenger`. - */ - static void setUp( - @NonNull BinaryMessenger binaryMessenger, @Nullable MultiFactorTotpSecretHostApi api) { - setUp(binaryMessenger, "", api); - } - - static void setUp( - @NonNull BinaryMessenger binaryMessenger, - @NonNull String messageChannelSuffix, - @Nullable MultiFactorTotpSecretHostApi api) { - messageChannelSuffix = messageChannelSuffix.isEmpty() ? "" : "." + messageChannelSuffix; - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.firebase_auth_platform_interface.MultiFactorTotpSecretHostApi.generateQrCodeUrl" - + messageChannelSuffix, - getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - ArrayList args = (ArrayList) message; - String secretKeyArg = (String) args.get(0); - String accountNameArg = (String) args.get(1); - String issuerArg = (String) args.get(2); - Result resultCallback = - new Result() { - public void success(String result) { - wrapped.add(0, result); - reply.reply(wrapped); - } - - public void error(Throwable error) { - ArrayList wrappedError = wrapError(error); - reply.reply(wrappedError); - } - }; - - api.generateQrCodeUrl(secretKeyArg, accountNameArg, issuerArg, resultCallback); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.firebase_auth_platform_interface.MultiFactorTotpSecretHostApi.openInOtpApp" - + messageChannelSuffix, - getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - ArrayList args = (ArrayList) message; - String secretKeyArg = (String) args.get(0); - String qrCodeUrlArg = (String) args.get(1); - VoidResult resultCallback = - new VoidResult() { - public void success() { - wrapped.add(0, null); - reply.reply(wrapped); - } - - public void error(Throwable error) { - ArrayList wrappedError = wrapError(error); - reply.reply(wrappedError); - } - }; - - api.openInOtpApp(secretKeyArg, qrCodeUrlArg, resultCallback); - }); - } else { - channel.setMessageHandler(null); - } - } - } - } - - /** - * Only used to generate the object interface that are use outside of the Pigeon interface - * - *

Generated interface from Pigeon that represents a handler of messages from Flutter. - */ - public interface GenerateInterfaces { - - void pigeonInterface(@NonNull InternalMultiFactorInfo info); - - /** The codec used by GenerateInterfaces. */ - static @NonNull MessageCodec getCodec() { - return PigeonCodec.INSTANCE; - } - - /** - * Sets up an instance of `GenerateInterfaces` to handle messages through the `binaryMessenger`. - */ - static void setUp(@NonNull BinaryMessenger binaryMessenger, @Nullable GenerateInterfaces api) { - setUp(binaryMessenger, "", api); - } - - static void setUp( - @NonNull BinaryMessenger binaryMessenger, - @NonNull String messageChannelSuffix, - @Nullable GenerateInterfaces api) { - messageChannelSuffix = messageChannelSuffix.isEmpty() ? "" : "." + messageChannelSuffix; - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.firebase_auth_platform_interface.GenerateInterfaces.pigeonInterface" - + messageChannelSuffix, - getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - ArrayList args = (ArrayList) message; - InternalMultiFactorInfo infoArg = (InternalMultiFactorInfo) args.get(0); - try { - api.pigeonInterface(infoArg); - wrapped.add(0, null); - } catch (Throwable exception) { - wrapped = wrapError(exception); - } - reply.reply(wrapped); - }); - } else { - channel.setMessageHandler(null); - } - } - } - } -} diff --git a/packages/firebase_auth/firebase_auth/android/src/main/java/io/flutter/plugins/firebase/auth/IdTokenChannelStreamHandler.java b/packages/firebase_auth/firebase_auth/android/src/main/java/io/flutter/plugins/firebase/auth/IdTokenChannelStreamHandler.java deleted file mode 100644 index ae413a402f91..000000000000 --- a/packages/firebase_auth/firebase_auth/android/src/main/java/io/flutter/plugins/firebase/auth/IdTokenChannelStreamHandler.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright 2022, the Chromium project authors. Please see the AUTHORS file - * for details. All rights reserved. Use of this source code is governed by a - * BSD-style license that can be found in the LICENSE file. - */ - -package io.flutter.plugins.firebase.auth; - -import com.google.firebase.auth.FirebaseAuth; -import com.google.firebase.auth.FirebaseAuth.IdTokenListener; -import com.google.firebase.auth.FirebaseUser; -import io.flutter.plugin.common.EventChannel.EventSink; -import io.flutter.plugin.common.EventChannel.StreamHandler; -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.atomic.AtomicBoolean; - -public class IdTokenChannelStreamHandler implements StreamHandler { - - private final FirebaseAuth firebaseAuth; - private IdTokenListener idTokenListener; - - public IdTokenChannelStreamHandler(FirebaseAuth firebaseAuth) { - this.firebaseAuth = firebaseAuth; - } - - @Override - public void onListen(Object arguments, EventSink events) { - Map event = new HashMap<>(); - event.put(Constants.APP_NAME, firebaseAuth.getApp().getName()); - - final AtomicBoolean initialAuthState = new AtomicBoolean(true); - - idTokenListener = - auth -> { - if (initialAuthState.get()) { - initialAuthState.set(false); - return; - } - - FirebaseUser user = auth.getCurrentUser(); - - if (user == null) { - event.put(Constants.USER, null); - } else { - event.put( - Constants.USER, PigeonParser.manuallyToList(PigeonParser.parseFirebaseUser(user))); - } - - events.success(event); - }; - - firebaseAuth.addIdTokenListener(idTokenListener); - } - - @Override - public void onCancel(Object arguments) { - if (idTokenListener != null) { - firebaseAuth.removeIdTokenListener(idTokenListener); - idTokenListener = null; - } - } -} diff --git a/packages/firebase_auth/firebase_auth/android/src/main/java/io/flutter/plugins/firebase/auth/PhoneNumberVerificationStreamHandler.java b/packages/firebase_auth/firebase_auth/android/src/main/java/io/flutter/plugins/firebase/auth/PhoneNumberVerificationStreamHandler.java deleted file mode 100644 index a227be99a49d..000000000000 --- a/packages/firebase_auth/firebase_auth/android/src/main/java/io/flutter/plugins/firebase/auth/PhoneNumberVerificationStreamHandler.java +++ /dev/null @@ -1,197 +0,0 @@ -/* - * Copyright 2022, the Chromium project authors. Please see the AUTHORS file - * for details. All rights reserved. Use of this source code is governed by a - * BSD-style license that can be found in the LICENSE file. - */ - -package io.flutter.plugins.firebase.auth; - -import android.app.Activity; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import com.google.firebase.FirebaseException; -import com.google.firebase.auth.FirebaseAuth; -import com.google.firebase.auth.MultiFactorSession; -import com.google.firebase.auth.PhoneAuthCredential; -import com.google.firebase.auth.PhoneAuthOptions; -import com.google.firebase.auth.PhoneAuthProvider; -import com.google.firebase.auth.PhoneAuthProvider.ForceResendingToken; -import com.google.firebase.auth.PhoneMultiFactorInfo; -import io.flutter.plugin.common.EventChannel.EventSink; -import io.flutter.plugin.common.EventChannel.StreamHandler; -import java.util.HashMap; -import java.util.Locale; -import java.util.Map; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicReference; - -public class PhoneNumberVerificationStreamHandler implements StreamHandler { - - interface OnCredentialsListener { - void onCredentialsReceived(PhoneAuthCredential credential); - } - - final AtomicReference activityRef = new AtomicReference<>(null); - final FirebaseAuth firebaseAuth; - final String phoneNumber; - final PhoneMultiFactorInfo multiFactorInfo; - final int timeout; - final OnCredentialsListener onCredentialsListener; - - final MultiFactorSession multiFactorSession; - - String autoRetrievedSmsCodeForTesting; - Integer forceResendingToken; - - private static final HashMap forceResendingTokens = new HashMap<>(); - - @Nullable private EventSink eventSink; - - public PhoneNumberVerificationStreamHandler( - Activity activity, - @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, - @NonNull GeneratedAndroidFirebaseAuth.InternalVerifyPhoneNumberRequest request, - @Nullable MultiFactorSession multiFactorSession, - @Nullable PhoneMultiFactorInfo multiFactorInfo, - OnCredentialsListener onCredentialsListener) { - this.activityRef.set(activity); - - this.multiFactorSession = multiFactorSession; - this.multiFactorInfo = multiFactorInfo; - firebaseAuth = FlutterFirebaseAuthPlugin.getAuthFromPigeon(app); - phoneNumber = request.getPhoneNumber(); - timeout = Math.toIntExact(request.getTimeout()); - - if (request.getAutoRetrievedSmsCodeForTesting() != null) { - autoRetrievedSmsCodeForTesting = request.getAutoRetrievedSmsCodeForTesting(); - } - - if (request.getForceResendingToken() != null) { - forceResendingToken = Math.toIntExact(request.getForceResendingToken()); - } - - this.onCredentialsListener = onCredentialsListener; - } - - @Override - public void onListen(Object arguments, EventSink events) { - eventSink = events; - - PhoneAuthProvider.OnVerificationStateChangedCallbacks callbacks = - new PhoneAuthProvider.OnVerificationStateChangedCallbacks() { - @Override - public void onVerificationCompleted(@NonNull PhoneAuthCredential phoneAuthCredential) { - int phoneAuthCredentialHashCode = phoneAuthCredential.hashCode(); - onCredentialsListener.onCredentialsReceived(phoneAuthCredential); - - Map event = new HashMap<>(); - event.put(Constants.TOKEN, phoneAuthCredentialHashCode); - - if (phoneAuthCredential.getSmsCode() != null) { - event.put(Constants.SMS_CODE, phoneAuthCredential.getSmsCode()); - } - - event.put(Constants.NAME, "Auth#phoneVerificationCompleted"); - - if (eventSink != null) { - eventSink.success(event); - } - } - - @Override - public void onVerificationFailed(@NonNull FirebaseException e) { - Map event = new HashMap<>(); - Map error = new HashMap<>(); - GeneratedAndroidFirebaseAuth.FlutterError flutterError = - FlutterFirebaseAuthPluginException.parserExceptionToFlutter(e); - error.put( - "code", - flutterError - .code - .replaceAll("ERROR_", "") - .toLowerCase(Locale.ROOT) - .replaceAll("_", "-")); - error.put("message", flutterError.getMessage()); - error.put("details", flutterError.details); - event.put("error", error); - - event.put(Constants.NAME, "Auth#phoneVerificationFailed"); - - if (eventSink != null) { - eventSink.success(event); - } - } - - @Override - public void onCodeSent( - @NonNull String verificationId, - @NonNull PhoneAuthProvider.ForceResendingToken token) { - int forceResendingTokenHashCode = token.hashCode(); - forceResendingTokens.put(forceResendingTokenHashCode, token); - - Map event = new HashMap<>(); - event.put(Constants.VERIFICATION_ID, verificationId); - event.put(Constants.FORCE_RESENDING_TOKEN, forceResendingTokenHashCode); - - event.put(Constants.NAME, "Auth#phoneCodeSent"); - - if (eventSink != null) { - eventSink.success(event); - } - } - - @Override - public void onCodeAutoRetrievalTimeOut(@NonNull String verificationId) { - Map event = new HashMap<>(); - event.put(Constants.VERIFICATION_ID, verificationId); - - event.put(Constants.NAME, "Auth#phoneCodeAutoRetrievalTimeout"); - - if (eventSink != null) { - eventSink.success(event); - } - } - }; - - // Allows the auto-retrieval flow to be tested. - // See https://firebase.google.com/docs/auth/android/phone-auth#integration-testing - if (autoRetrievedSmsCodeForTesting != null) { - firebaseAuth - .getFirebaseAuthSettings() - .setAutoRetrievedSmsCodeForPhoneNumber(phoneNumber, autoRetrievedSmsCodeForTesting); - } - - PhoneAuthOptions.Builder phoneAuthOptionsBuilder = new PhoneAuthOptions.Builder(firebaseAuth); - phoneAuthOptionsBuilder.setActivity(activityRef.get()); - phoneAuthOptionsBuilder.setCallbacks(callbacks); - - if (phoneNumber != null) { - phoneAuthOptionsBuilder.setPhoneNumber(phoneNumber); - } - if (multiFactorSession != null) { - phoneAuthOptionsBuilder.setMultiFactorSession(multiFactorSession); - } - if (multiFactorInfo != null) { - phoneAuthOptionsBuilder.setMultiFactorHint(multiFactorInfo); - } - phoneAuthOptionsBuilder.setTimeout((long) timeout, TimeUnit.MILLISECONDS); - - if (forceResendingToken != null) { - PhoneAuthProvider.ForceResendingToken forceResendingToken = - forceResendingTokens.get(this.forceResendingToken); - - if (forceResendingToken != null) { - phoneAuthOptionsBuilder.setForceResendingToken(forceResendingToken); - } - } - - PhoneAuthProvider.verifyPhoneNumber(phoneAuthOptionsBuilder.build()); - } - - @Override - public void onCancel(Object arguments) { - eventSink = null; - - activityRef.set(null); - } -} diff --git a/packages/firebase_auth/firebase_auth/android/src/main/java/io/flutter/plugins/firebase/auth/PigeonParser.java b/packages/firebase_auth/firebase_auth/android/src/main/java/io/flutter/plugins/firebase/auth/PigeonParser.java deleted file mode 100644 index 4c9e102a54ae..000000000000 --- a/packages/firebase_auth/firebase_auth/android/src/main/java/io/flutter/plugins/firebase/auth/PigeonParser.java +++ /dev/null @@ -1,382 +0,0 @@ -/* - * Copyright 2023, the Chromium project authors. Please see the AUTHORS file - * for details. All rights reserved. Use of this source code is governed by a - * BSD-style license that can be found in the LICENSE file. - */ - -package io.flutter.plugins.firebase.auth; - -import android.net.Uri; -import androidx.annotation.NonNull; -import com.google.firebase.auth.ActionCodeEmailInfo; -import com.google.firebase.auth.ActionCodeInfo; -import com.google.firebase.auth.ActionCodeResult; -import com.google.firebase.auth.ActionCodeSettings; -import com.google.firebase.auth.AdditionalUserInfo; -import com.google.firebase.auth.AuthCredential; -import com.google.firebase.auth.AuthResult; -import com.google.firebase.auth.EmailAuthProvider; -import com.google.firebase.auth.FacebookAuthProvider; -import com.google.firebase.auth.FirebaseAuthProvider; -import com.google.firebase.auth.FirebaseUser; -import com.google.firebase.auth.FirebaseUserMetadata; -import com.google.firebase.auth.GetTokenResult; -import com.google.firebase.auth.GithubAuthProvider; -import com.google.firebase.auth.GoogleAuthProvider; -import com.google.firebase.auth.MultiFactorInfo; -import com.google.firebase.auth.OAuthCredential; -import com.google.firebase.auth.OAuthProvider; -import com.google.firebase.auth.PhoneAuthProvider; -import com.google.firebase.auth.PhoneMultiFactorInfo; -import com.google.firebase.auth.PlayGamesAuthProvider; -import com.google.firebase.auth.TwitterAuthProvider; -import com.google.firebase.auth.UserInfo; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; - -public class PigeonParser { - static List manuallyToList( - GeneratedAndroidFirebaseAuth.InternalUserDetails pigeonUserDetails) { - List output = new ArrayList<>(); - output.add(pigeonUserDetails.getUserInfo().toList()); - output.add(pigeonUserDetails.getProviderData()); - return output; - } - - static GeneratedAndroidFirebaseAuth.InternalUserCredential parseAuthResult( - @NonNull AuthResult authResult) { - GeneratedAndroidFirebaseAuth.InternalUserCredential.Builder builder = - new GeneratedAndroidFirebaseAuth.InternalUserCredential.Builder(); - - builder.setAdditionalUserInfo(parseAdditionalUserInfo(authResult.getAdditionalUserInfo())); - builder.setCredential(parseAuthCredential(authResult.getCredential())); - builder.setUser(parseFirebaseUser(authResult.getUser())); - - return builder.build(); - } - - private static GeneratedAndroidFirebaseAuth.InternalAdditionalUserInfo parseAdditionalUserInfo( - AdditionalUserInfo additionalUserInfo) { - if (additionalUserInfo == null) { - return null; - } - - GeneratedAndroidFirebaseAuth.InternalAdditionalUserInfo.Builder builder = - new GeneratedAndroidFirebaseAuth.InternalAdditionalUserInfo.Builder(); - - builder.setIsNewUser(additionalUserInfo.isNewUser()); - builder.setProfile(additionalUserInfo.getProfile()); - builder.setProviderId(additionalUserInfo.getProviderId()); - builder.setUsername(additionalUserInfo.getUsername()); - - return builder.build(); - } - - static GeneratedAndroidFirebaseAuth.InternalAuthCredential parseAuthCredential( - AuthCredential authCredential) { - if (authCredential == null) { - return null; - } - - int authCredentialHashCode = authCredential.hashCode(); - FlutterFirebaseAuthPlugin.authCredentials.put(authCredentialHashCode, authCredential); - - GeneratedAndroidFirebaseAuth.InternalAuthCredential.Builder builder = - new GeneratedAndroidFirebaseAuth.InternalAuthCredential.Builder(); - - builder.setProviderId(authCredential.getProvider()); - builder.setSignInMethod(authCredential.getSignInMethod()); - builder.setNativeId((long) authCredentialHashCode); - if (authCredential instanceof OAuthCredential) { - builder.setAccessToken(((OAuthCredential) authCredential).getAccessToken()); - } - - return builder.build(); - } - - static GeneratedAndroidFirebaseAuth.InternalUserDetails parseFirebaseUser( - FirebaseUser firebaseUser) { - if (firebaseUser == null) { - return null; - } - - GeneratedAndroidFirebaseAuth.InternalUserDetails.Builder builder = - new GeneratedAndroidFirebaseAuth.InternalUserDetails.Builder(); - - GeneratedAndroidFirebaseAuth.InternalUserInfo.Builder builderInfo = - new GeneratedAndroidFirebaseAuth.InternalUserInfo.Builder(); - - builderInfo.setDisplayName(firebaseUser.getDisplayName()); - builderInfo.setEmail(firebaseUser.getEmail()); - builderInfo.setIsEmailVerified(firebaseUser.isEmailVerified()); - builderInfo.setIsAnonymous(firebaseUser.isAnonymous()); - - final FirebaseUserMetadata userMetadata = firebaseUser.getMetadata(); - if (userMetadata != null) { - builderInfo.setCreationTimestamp(firebaseUser.getMetadata().getCreationTimestamp()); - builderInfo.setLastSignInTimestamp(firebaseUser.getMetadata().getLastSignInTimestamp()); - } - builderInfo.setPhoneNumber(firebaseUser.getPhoneNumber()); - builderInfo.setPhotoUrl(parsePhotoUrl(firebaseUser.getPhotoUrl())); - builderInfo.setUid(firebaseUser.getUid()); - builderInfo.setTenantId(firebaseUser.getTenantId()); - - builder.setUserInfo(builderInfo.build()); - builder.setProviderData(parseUserInfoList(firebaseUser.getProviderData())); - - return builder.build(); - } - - private static List> parseUserInfoList( - List userInfoList) { - List> output = new ArrayList<>(); - - if (userInfoList == null) { - return null; - } - - for (UserInfo userInfo : new ArrayList(userInfoList)) { - if (userInfo == null) { - continue; - } - if (!FirebaseAuthProvider.PROVIDER_ID.equals(userInfo.getProviderId())) { - output.add(parseUserInfoToMap(userInfo)); - } - } - - return output; - } - - private static Map parseUserInfoToMap(UserInfo userInfo) { - Map output = new HashMap<>(); - output.put("displayName", userInfo.getDisplayName()); - output.put("email", userInfo.getEmail()); - output.put("isEmailVerified", userInfo.isEmailVerified()); - output.put("phoneNumber", userInfo.getPhoneNumber()); - output.put("photoUrl", parsePhotoUrl(userInfo.getPhotoUrl())); - // Can be null on Emulator - output.put("uid", userInfo.getUid() == null ? "" : userInfo.getUid()); - output.put("providerId", userInfo.getProviderId()); - output.put("isAnonymous", false); - return output; - } - - private static String parsePhotoUrl(Uri photoUri) { - if (photoUri == null) { - return null; - } - - String photoUrl = photoUri.toString(); - - // Return null if the URL is an empty string - return "".equals(photoUrl) ? null : photoUrl; - } - - @SuppressWarnings("ConstantConditions") - static AuthCredential getCredential(Map credentialMap) { - // If the credential map contains a token, it means a native one has been stored - if (credentialMap.get(Constants.TOKEN) != null) { - int token = ((Number) credentialMap.get(Constants.TOKEN)).intValue(); - AuthCredential credential = FlutterFirebaseAuthPlugin.authCredentials.get(token); - - if (credential == null) { - throw FlutterFirebaseAuthPluginException.invalidCredential(); - } - - return credential; - } - - String signInMethod = - (String) Objects.requireNonNull(credentialMap.get(Constants.SIGN_IN_METHOD)); - String secret = (String) credentialMap.get(Constants.SECRET); - String idToken = (String) credentialMap.get(Constants.ID_TOKEN); - String accessToken = (String) credentialMap.get(Constants.ACCESS_TOKEN); - String rawNonce = (String) credentialMap.get(Constants.RAW_NONCE); - - switch (signInMethod) { - case Constants.SIGN_IN_METHOD_PASSWORD: - return EmailAuthProvider.getCredential( - (String) Objects.requireNonNull(credentialMap.get(Constants.EMAIL)), - Objects.requireNonNull(secret)); - case Constants.SIGN_IN_METHOD_EMAIL_LINK: - return EmailAuthProvider.getCredentialWithLink( - (String) Objects.requireNonNull(credentialMap.get(Constants.EMAIL)), - (String) Objects.requireNonNull(credentialMap.get(Constants.EMAIL_LINK))); - case Constants.SIGN_IN_METHOD_FACEBOOK: - return FacebookAuthProvider.getCredential(Objects.requireNonNull(accessToken)); - case Constants.SIGN_IN_METHOD_GOOGLE: - return GoogleAuthProvider.getCredential(idToken, accessToken); - case Constants.SIGN_IN_METHOD_TWITTER: - return TwitterAuthProvider.getCredential( - Objects.requireNonNull(accessToken), Objects.requireNonNull(secret)); - case Constants.SIGN_IN_METHOD_GITHUB: - return GithubAuthProvider.getCredential(Objects.requireNonNull(accessToken)); - case Constants.SIGN_IN_METHOD_PHONE: - { - String verificationId = - (String) Objects.requireNonNull(credentialMap.get(Constants.VERIFICATION_ID)); - String smsCode = (String) Objects.requireNonNull(credentialMap.get(Constants.SMS_CODE)); - return PhoneAuthProvider.getCredential(verificationId, smsCode); - } - case Constants.SIGN_IN_METHOD_OAUTH: - { - String providerId = - (String) Objects.requireNonNull(credentialMap.get(Constants.PROVIDER_ID)); - OAuthProvider.CredentialBuilder builder = OAuthProvider.newCredentialBuilder(providerId); - if (accessToken != null) { - builder.setAccessToken(accessToken); - } - if (rawNonce == null) { - builder.setIdToken(Objects.requireNonNull(idToken)); - } else { - builder.setIdTokenWithRawNonce(Objects.requireNonNull(idToken), rawNonce); - } - - return builder.build(); - } - case Constants.SIGN_IN_METHOD_PLAY_GAMES: - { - String serverAuthCode = - (String) Objects.requireNonNull(credentialMap.get(Constants.SERVER_AUTH_CODE)); - return PlayGamesAuthProvider.getCredential(serverAuthCode); - } - default: - return null; - } - } - - static ActionCodeSettings getActionCodeSettings( - @NonNull GeneratedAndroidFirebaseAuth.InternalActionCodeSettings pigeonActionCodeSettings) { - ActionCodeSettings.Builder builder = ActionCodeSettings.newBuilder(); - - builder.setUrl(pigeonActionCodeSettings.getUrl()); - - if (pigeonActionCodeSettings.getDynamicLinkDomain() != null) { - builder.setDynamicLinkDomain(pigeonActionCodeSettings.getDynamicLinkDomain()); - } - - if (pigeonActionCodeSettings.getLinkDomain() != null) { - builder.setLinkDomain(pigeonActionCodeSettings.getLinkDomain()); - } - - builder.setHandleCodeInApp(pigeonActionCodeSettings.getHandleCodeInApp()); - - if (pigeonActionCodeSettings.getAndroidPackageName() != null) { - builder.setAndroidPackageName( - pigeonActionCodeSettings.getAndroidPackageName(), - pigeonActionCodeSettings.getAndroidInstallApp(), - pigeonActionCodeSettings.getAndroidMinimumVersion()); - } - - if (pigeonActionCodeSettings.getIOSBundleId() != null) { - builder.setIOSBundleId(pigeonActionCodeSettings.getIOSBundleId()); - } - - return builder.build(); - } - - static List multiFactorInfoToPigeon( - List hints) { - List pigeonHints = new ArrayList<>(); - for (MultiFactorInfo info : hints) { - if (info instanceof PhoneMultiFactorInfo) { - pigeonHints.add( - new GeneratedAndroidFirebaseAuth.InternalMultiFactorInfo.Builder() - .setPhoneNumber(((PhoneMultiFactorInfo) info).getPhoneNumber()) - .setDisplayName(info.getDisplayName()) - .setEnrollmentTimestamp((double) info.getEnrollmentTimestamp()) - .setUid(info.getUid()) - .setFactorId(info.getFactorId()) - .build()); - - } else { - pigeonHints.add( - new GeneratedAndroidFirebaseAuth.InternalMultiFactorInfo.Builder() - .setDisplayName(info.getDisplayName()) - .setEnrollmentTimestamp((double) info.getEnrollmentTimestamp()) - .setUid(info.getUid()) - .setFactorId(info.getFactorId()) - .build()); - } - } - return pigeonHints; - } - - static List> multiFactorInfoToMap(List hints) { - List> pigeonHints = new ArrayList<>(); - for (GeneratedAndroidFirebaseAuth.InternalMultiFactorInfo info : - multiFactorInfoToPigeon(hints)) { - pigeonHints.add(info.toList()); - } - return pigeonHints; - } - - static GeneratedAndroidFirebaseAuth.InternalActionCodeInfo parseActionCodeResult( - @NonNull ActionCodeResult actionCodeResult) { - GeneratedAndroidFirebaseAuth.InternalActionCodeInfo.Builder builder = - new GeneratedAndroidFirebaseAuth.InternalActionCodeInfo.Builder(); - GeneratedAndroidFirebaseAuth.InternalActionCodeInfoData.Builder builderData = - new GeneratedAndroidFirebaseAuth.InternalActionCodeInfoData.Builder(); - - int operation = actionCodeResult.getOperation(); - - switch (operation) { - case ActionCodeResult.PASSWORD_RESET: - builder.setOperation(GeneratedAndroidFirebaseAuth.ActionCodeInfoOperation.PASSWORD_RESET); - break; - case ActionCodeResult.VERIFY_EMAIL: - builder.setOperation(GeneratedAndroidFirebaseAuth.ActionCodeInfoOperation.VERIFY_EMAIL); - break; - case ActionCodeResult.RECOVER_EMAIL: - builder.setOperation(GeneratedAndroidFirebaseAuth.ActionCodeInfoOperation.RECOVER_EMAIL); - break; - case ActionCodeResult.SIGN_IN_WITH_EMAIL_LINK: - builder.setOperation(GeneratedAndroidFirebaseAuth.ActionCodeInfoOperation.EMAIL_SIGN_IN); - break; - case ActionCodeResult.VERIFY_BEFORE_CHANGE_EMAIL: - builder.setOperation( - GeneratedAndroidFirebaseAuth.ActionCodeInfoOperation.VERIFY_AND_CHANGE_EMAIL); - break; - case ActionCodeResult.REVERT_SECOND_FACTOR_ADDITION: - builder.setOperation( - GeneratedAndroidFirebaseAuth.ActionCodeInfoOperation.REVERT_SECOND_FACTOR_ADDITION); - break; - } - - ActionCodeInfo actionCodeInfo = actionCodeResult.getInfo(); - - if (actionCodeInfo != null && operation == ActionCodeResult.VERIFY_EMAIL - || operation == ActionCodeResult.PASSWORD_RESET) { - builderData.setEmail(actionCodeInfo.getEmail()); - } else if (operation == ActionCodeResult.RECOVER_EMAIL - || operation == ActionCodeResult.VERIFY_BEFORE_CHANGE_EMAIL) { - ActionCodeEmailInfo actionCodeEmailInfo = - (ActionCodeEmailInfo) Objects.requireNonNull(actionCodeInfo); - builderData.setEmail(actionCodeEmailInfo.getEmail()); - builderData.setPreviousEmail(actionCodeEmailInfo.getPreviousEmail()); - } - - builder.setData(builderData.build()); - - return builder.build(); - } - - static GeneratedAndroidFirebaseAuth.InternalIdTokenResult parseTokenResult( - @NonNull GetTokenResult tokenResult) { - final GeneratedAndroidFirebaseAuth.InternalIdTokenResult.Builder builder = - new GeneratedAndroidFirebaseAuth.InternalIdTokenResult.Builder(); - - builder.setToken(tokenResult.getToken()); - builder.setSignInProvider(tokenResult.getSignInProvider()); - builder.setAuthTimestamp(tokenResult.getAuthTimestamp() * 1000); - builder.setExpirationTimestamp(tokenResult.getExpirationTimestamp() * 1000); - builder.setIssuedAtTimestamp(tokenResult.getIssuedAtTimestamp() * 1000); - builder.setClaims(tokenResult.getClaims()); - builder.setSignInSecondFactor(tokenResult.getSignInSecondFactor()); - - return builder.build(); - } -} diff --git a/packages/firebase_auth/firebase_auth/android/src/main/kotlin/io/flutter/plugins/firebase/auth/AuthStateChannelStreamHandler.kt b/packages/firebase_auth/firebase_auth/android/src/main/kotlin/io/flutter/plugins/firebase/auth/AuthStateChannelStreamHandler.kt new file mode 100644 index 000000000000..723382ca04a6 --- /dev/null +++ b/packages/firebase_auth/firebase_auth/android/src/main/kotlin/io/flutter/plugins/firebase/auth/AuthStateChannelStreamHandler.kt @@ -0,0 +1,49 @@ +/* + * Copyright 2022, the Chromium project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ +package io.flutter.plugins.firebase.auth + +import com.google.firebase.auth.FirebaseAuth +import io.flutter.plugin.common.EventChannel.EventSink +import io.flutter.plugin.common.EventChannel.StreamHandler +import java.util.concurrent.atomic.AtomicBoolean + +class AuthStateChannelStreamHandler(private val firebaseAuth: FirebaseAuth) : StreamHandler { + private var authStateListener: FirebaseAuth.AuthStateListener? = null + + override fun onListen(arguments: Any?, events: EventSink) { + val event: MutableMap = HashMap() + event[Constants.APP_NAME] = firebaseAuth.app.name + + val initialAuthState = AtomicBoolean(true) + + authStateListener = + FirebaseAuth.AuthStateListener { auth -> + if (initialAuthState.get()) { + initialAuthState.set(false) + return@AuthStateListener + } + + val user = auth.currentUser + if (user == null) { + event[Constants.USER] = null + } else { + event[Constants.USER] = + PigeonParser.manuallyToList(PigeonParser.parseFirebaseUser(user)!!) + } + + events.success(event) + } + + firebaseAuth.addAuthStateListener(authStateListener!!) + } + + override fun onCancel(arguments: Any?) { + if (authStateListener != null) { + firebaseAuth.removeAuthStateListener(authStateListener!!) + authStateListener = null + } + } +} diff --git a/packages/firebase_auth/firebase_auth/android/src/main/kotlin/io/flutter/plugins/firebase/auth/Constants.kt b/packages/firebase_auth/firebase_auth/android/src/main/kotlin/io/flutter/plugins/firebase/auth/Constants.kt new file mode 100644 index 000000000000..be7aa931feb1 --- /dev/null +++ b/packages/firebase_auth/firebase_auth/android/src/main/kotlin/io/flutter/plugins/firebase/auth/Constants.kt @@ -0,0 +1,42 @@ +/* + * Copyright 2022, the Chromium project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ +package io.flutter.plugins.firebase.auth + +object Constants { + const val APP_NAME = "appName" + + const val SIGN_IN_METHOD_PASSWORD = "password" + const val SIGN_IN_METHOD_EMAIL_LINK = "emailLink" + const val SIGN_IN_METHOD_FACEBOOK = "facebook.com" + const val SIGN_IN_METHOD_GOOGLE = "google.com" + const val SIGN_IN_METHOD_TWITTER = "twitter.com" + const val SIGN_IN_METHOD_GITHUB = "github.com" + const val SIGN_IN_METHOD_PHONE = "phone" + const val SIGN_IN_METHOD_OAUTH = "oauth" + const val SIGN_IN_METHOD_PLAY_GAMES = "playgames.google.com" + + const val USER = "user" + const val EMAIL = "email" + + const val PROVIDER_ID = "providerId" + const val CREDENTIAL = "credential" + const val SECRET = "secret" + const val ID_TOKEN = "idToken" + const val TOKEN = "token" + const val ACCESS_TOKEN = "accessToken" + const val RAW_NONCE = "rawNonce" + const val EMAIL_LINK = "emailLink" + const val VERIFICATION_ID = "verificationId" + const val SMS_CODE = "smsCode" + const val SIGN_IN_METHOD = "signInMethod" + const val FORCE_RESENDING_TOKEN = "forceResendingToken" + const val NAME = "name" + const val SERVER_AUTH_CODE = "serverAuthCode" + + const val MULTI_FACTOR_HINTS = "multiFactorHints" + const val MULTI_FACTOR_SESSION_ID = "multiFactorSessionId" + const val MULTI_FACTOR_RESOLVER_ID = "multiFactorResolverId" +} diff --git a/packages/firebase_auth/firebase_auth/android/src/main/kotlin/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthPlugin.kt b/packages/firebase_auth/firebase_auth/android/src/main/kotlin/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthPlugin.kt new file mode 100644 index 000000000000..118b1a112757 --- /dev/null +++ b/packages/firebase_auth/firebase_auth/android/src/main/kotlin/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthPlugin.kt @@ -0,0 +1,552 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +package io.flutter.plugins.firebase.auth + +import android.app.Activity +import com.google.android.gms.tasks.Task +import com.google.android.gms.tasks.TaskCompletionSource +import com.google.firebase.FirebaseApp +import com.google.firebase.auth.AuthCredential +import com.google.firebase.auth.FirebaseAuth +import com.google.firebase.auth.OAuthProvider +import com.google.firebase.auth.PhoneMultiFactorInfo +import io.flutter.embedding.engine.plugins.FlutterPlugin +import io.flutter.embedding.engine.plugins.activity.ActivityAware +import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding +import io.flutter.plugin.common.BinaryMessenger +import io.flutter.plugin.common.EventChannel +import io.flutter.plugin.common.EventChannel.StreamHandler +import io.flutter.plugin.common.MethodChannel +import io.flutter.plugins.firebase.core.FlutterFirebasePlugin +import io.flutter.plugins.firebase.core.FlutterFirebasePlugin.cachedThreadPool +import io.flutter.plugins.firebase.core.FlutterFirebasePluginRegistry +import java.util.UUID + +/** Flutter plugin for Firebase Auth. */ +class FlutterFirebaseAuthPlugin : + FlutterFirebasePlugin, FlutterPlugin, ActivityAware, FirebaseAuthHostApi { + private var messenger: BinaryMessenger? = null + private var channel: MethodChannel? = null + private var activity: Activity? = null + private val streamHandlers: MutableMap = HashMap() + private val firebaseAuthUser = FlutterFirebaseAuthUser() + private val firebaseMultiFactor = FlutterFirebaseMultiFactor() + private val firebaseTotpMultiFactor = FlutterFirebaseTotpMultiFactor() + private val firebaseTotpSecret = FlutterFirebaseTotpSecret() + + private fun initInstance(messenger: BinaryMessenger) { + FlutterFirebasePluginRegistry.registerPlugin(METHOD_CHANNEL_NAME, this) + channel = MethodChannel(messenger, METHOD_CHANNEL_NAME) + FirebaseAuthHostApi.setUp(messenger, this) + FirebaseAuthUserHostApi.setUp(messenger, firebaseAuthUser) + MultiFactorUserHostApi.setUp(messenger, firebaseMultiFactor) + MultiFactoResolverHostApi.setUp(messenger, firebaseMultiFactor) + MultiFactorTotpHostApi.setUp(messenger, firebaseTotpMultiFactor) + MultiFactorTotpSecretHostApi.setUp(messenger, firebaseTotpSecret) + this.messenger = messenger + } + + override fun onAttachedToEngine(binding: FlutterPlugin.FlutterPluginBinding) { + initInstance(binding.binaryMessenger) + } + + override fun onDetachedFromEngine(binding: FlutterPlugin.FlutterPluginBinding) { + channel?.setMethodCallHandler(null) + + val resolvedMessenger = checkNotNull(messenger) + FirebaseAuthHostApi.setUp(resolvedMessenger, null) + FirebaseAuthUserHostApi.setUp(resolvedMessenger, null) + MultiFactorUserHostApi.setUp(resolvedMessenger, null) + MultiFactoResolverHostApi.setUp(resolvedMessenger, null) + MultiFactorTotpHostApi.setUp(resolvedMessenger, null) + MultiFactorTotpSecretHostApi.setUp(resolvedMessenger, null) + + channel = null + messenger = null + removeEventListeners() + } + + override fun onAttachedToActivity(activityPluginBinding: ActivityPluginBinding) { + activity = activityPluginBinding.activity + firebaseAuthUser.setActivity(activity) + } + + override fun onDetachedFromActivityForConfigChanges() { + activity = null + firebaseAuthUser.setActivity(null) + } + + override fun onReattachedToActivityForConfigChanges( + activityPluginBinding: ActivityPluginBinding + ) { + activity = activityPluginBinding.activity + firebaseAuthUser.setActivity(activity) + } + + override fun onDetachedFromActivity() { + activity = null + firebaseAuthUser.setActivity(null) + } + + private fun getActivity(): Activity? { + return activity + } + + override fun registerIdTokenListener( + app: AuthPigeonFirebaseApp, + callback: (Result) -> Unit + ) { + try { + val auth = getAuthFromPigeon(app) + val handler = IdTokenChannelStreamHandler(auth) + val name = "$METHOD_CHANNEL_NAME/id-token/${auth.app.name}" + val eventChannel = EventChannel(messenger, name) + eventChannel.setStreamHandler(handler) + streamHandlers[eventChannel] = handler + callback(Result.success(name)) + } catch (e: Exception) { + callback(Result.failure(e)) + } + } + + override fun registerAuthStateListener( + app: AuthPigeonFirebaseApp, + callback: (Result) -> Unit + ) { + try { + val auth = getAuthFromPigeon(app) + val handler = AuthStateChannelStreamHandler(auth) + val name = "$METHOD_CHANNEL_NAME/auth-state/${auth.app.name}" + val eventChannel = EventChannel(messenger, name) + eventChannel.setStreamHandler(handler) + streamHandlers[eventChannel] = handler + callback(Result.success(name)) + } catch (e: Exception) { + callback(Result.failure(e)) + } + } + + override fun useEmulator( + app: AuthPigeonFirebaseApp, + host: String, + port: Long, + callback: (Result) -> Unit + ) { + try { + getAuthFromPigeon(app).useEmulator(host, port.toInt()) + callback(Result.success(Unit)) + } catch (e: Exception) { + callback(Result.failure(e)) + } + } + + override fun applyActionCode( + app: AuthPigeonFirebaseApp, + code: String, + callback: (Result) -> Unit + ) { + getAuthFromPigeon(app).applyActionCode(code).addOnCompleteListener { task -> + completeVoid(task, callback) + } + } + + override fun checkActionCode( + app: AuthPigeonFirebaseApp, + code: String, + callback: (Result) -> Unit + ) { + getAuthFromPigeon(app).checkActionCode(code).addOnCompleteListener { task -> + if (task.isSuccessful) { + callback(Result.success(PigeonParser.parseActionCodeResult(task.result))) + } else { + callback( + Result.failure( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter(task.exception))) + } + } + } + + override fun confirmPasswordReset( + app: AuthPigeonFirebaseApp, + code: String, + newPassword: String, + callback: (Result) -> Unit + ) { + getAuthFromPigeon(app).confirmPasswordReset(code, newPassword).addOnCompleteListener { task -> + completeVoid(task, callback) + } + } + + override fun createUserWithEmailAndPassword( + app: AuthPigeonFirebaseApp, + email: String, + password: String, + callback: (Result) -> Unit + ) { + getAuthFromPigeon(app).createUserWithEmailAndPassword(email, password).addOnCompleteListener { + task -> + completeAuthResult(task, callback) + } + } + + override fun signInAnonymously( + app: AuthPigeonFirebaseApp, + callback: (Result) -> Unit + ) { + getAuthFromPigeon(app).signInAnonymously().addOnCompleteListener { task -> + completeAuthResult(task, callback) + } + } + + override fun signInWithCredential( + app: AuthPigeonFirebaseApp, + input: Map, + callback: (Result) -> Unit + ) { + val credential = PigeonParser.getCredential(input) + if (credential == null) { + callback(Result.failure(FlutterFirebaseAuthPluginException.invalidCredential())) + return + } + getAuthFromPigeon(app).signInWithCredential(credential).addOnCompleteListener { task -> + completeAuthResult(task, callback) + } + } + + override fun signInWithCustomToken( + app: AuthPigeonFirebaseApp, + token: String, + callback: (Result) -> Unit + ) { + getAuthFromPigeon(app).signInWithCustomToken(token).addOnCompleteListener { task -> + completeAuthResult(task, callback) + } + } + + override fun signInWithEmailAndPassword( + app: AuthPigeonFirebaseApp, + email: String, + password: String, + callback: (Result) -> Unit + ) { + getAuthFromPigeon(app).signInWithEmailAndPassword(email, password).addOnCompleteListener { task + -> + completeAuthResult(task, callback) + } + } + + override fun signInWithEmailLink( + app: AuthPigeonFirebaseApp, + email: String, + emailLink: String, + callback: (Result) -> Unit + ) { + getAuthFromPigeon(app).signInWithEmailLink(email, emailLink).addOnCompleteListener { task -> + completeAuthResult(task, callback) + } + } + + override fun signInWithProvider( + app: AuthPigeonFirebaseApp, + signInProvider: InternalSignInProvider, + callback: (Result) -> Unit + ) { + val firebaseAuth = getAuthFromPigeon(app) + val provider = OAuthProvider.newBuilder(signInProvider.providerId, firebaseAuth) + signInProvider.scopes?.filterNotNull()?.let { provider.setScopes(it) } + signInProvider.customParameters?.let { params -> + val converted = HashMap() + for ((key, value) in params) { + if (key != null && value != null) { + converted[key] = value + } + } + provider.addCustomParameters(converted) + } + + firebaseAuth + .startActivityForSignInWithProvider(checkNotNull(getActivity()), provider.build()) + .addOnCompleteListener { task -> completeAuthResult(task, callback) } + } + + override fun signOut(app: AuthPigeonFirebaseApp, callback: (Result) -> Unit) { + try { + val firebaseAuth = getAuthFromPigeon(app) + if (firebaseAuth.currentUser != null) { + FlutterFirebaseMultiFactor.multiFactorUserMap[app.appName]?.remove( + firebaseAuth.currentUser!!.uid) + } + firebaseAuth.signOut() + callback(Result.success(Unit)) + } catch (e: Exception) { + callback(Result.failure(e)) + } + } + + override fun fetchSignInMethodsForEmail( + app: AuthPigeonFirebaseApp, + email: String, + callback: (Result>) -> Unit + ) { + getAuthFromPigeon(app).fetchSignInMethodsForEmail(email).addOnCompleteListener { task -> + if (task.isSuccessful) { + callback(Result.success(task.result.signInMethods?.filterNotNull() ?: emptyList())) + } else { + callback( + Result.failure( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter(task.exception))) + } + } + } + + override fun sendPasswordResetEmail( + app: AuthPigeonFirebaseApp, + email: String, + actionCodeSettings: InternalActionCodeSettings?, + callback: (Result) -> Unit + ) { + val firebaseAuth = getAuthFromPigeon(app) + val task = + if (actionCodeSettings == null) { + firebaseAuth.sendPasswordResetEmail(email) + } else { + firebaseAuth.sendPasswordResetEmail( + email, PigeonParser.getActionCodeSettings(actionCodeSettings)) + } + task.addOnCompleteListener { completed -> completeVoid(completed, callback) } + } + + override fun sendSignInLinkToEmail( + app: AuthPigeonFirebaseApp, + email: String, + actionCodeSettings: InternalActionCodeSettings, + callback: (Result) -> Unit + ) { + getAuthFromPigeon(app) + .sendSignInLinkToEmail(email, PigeonParser.getActionCodeSettings(actionCodeSettings)) + .addOnCompleteListener { task -> completeVoid(task, callback) } + } + + override fun setLanguageCode( + app: AuthPigeonFirebaseApp, + languageCode: String?, + callback: (Result) -> Unit + ) { + try { + val firebaseAuth = getAuthFromPigeon(app) + if (languageCode == null) { + firebaseAuth.useAppLanguage() + } else { + firebaseAuth.setLanguageCode(languageCode) + } + callback(Result.success(firebaseAuth.languageCode ?: "")) + } catch (e: Exception) { + callback(Result.failure(e)) + } + } + + override fun setSettings( + app: AuthPigeonFirebaseApp, + settings: InternalFirebaseAuthSettings, + callback: (Result) -> Unit + ) { + try { + val firebaseAuth = getAuthFromPigeon(app) + firebaseAuth.firebaseAuthSettings.setAppVerificationDisabledForTesting( + settings.appVerificationDisabledForTesting) + + if (settings.forceRecaptchaFlow != null) { + firebaseAuth.firebaseAuthSettings.forceRecaptchaFlowForTesting( + settings.forceRecaptchaFlow!!) + } + + if (settings.phoneNumber != null && settings.smsCode != null) { + firebaseAuth.firebaseAuthSettings.setAutoRetrievedSmsCodeForPhoneNumber( + settings.phoneNumber, settings.smsCode) + } + + callback(Result.success(Unit)) + } catch (e: Exception) { + callback(Result.failure(e)) + } + } + + override fun verifyPasswordResetCode( + app: AuthPigeonFirebaseApp, + code: String, + callback: (Result) -> Unit + ) { + getAuthFromPigeon(app).verifyPasswordResetCode(code).addOnCompleteListener { task -> + if (task.isSuccessful) { + callback(Result.success(task.result ?: "")) + } else { + callback( + Result.failure( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter(task.exception))) + } + } + } + + override fun verifyPhoneNumber( + app: AuthPigeonFirebaseApp, + request: InternalVerifyPhoneNumberRequest, + callback: (Result) -> Unit + ) { + try { + val eventChannelName = "$METHOD_CHANNEL_NAME/phone/${UUID.randomUUID()}" + val eventChannel = EventChannel(messenger, eventChannelName) + + var multiFactorSession: com.google.firebase.auth.MultiFactorSession? = null + if (request.multiFactorSessionId != null) { + multiFactorSession = + FlutterFirebaseMultiFactor.multiFactorSessionMap[request.multiFactorSessionId] + } + + val multiFactorInfoId = request.multiFactorInfoId + var multiFactorInfo: PhoneMultiFactorInfo? = null + if (multiFactorInfoId != null) { + for (resolver in FlutterFirebaseMultiFactor.multiFactorResolverMap.values) { + for (info in resolver.hints) { + if (info.uid == multiFactorInfoId && info is PhoneMultiFactorInfo) { + multiFactorInfo = info + break + } + } + } + } + + val handler = + PhoneNumberVerificationStreamHandler( + getActivity(), app, request, multiFactorSession, multiFactorInfo) { credential -> + authCredentials[credential.hashCode()] = credential + } + + eventChannel.setStreamHandler(handler) + streamHandlers[eventChannel] = handler + callback(Result.success(eventChannelName)) + } catch (e: Exception) { + callback(Result.failure(e)) + } + } + + override fun revokeTokenWithAuthorizationCode( + app: AuthPigeonFirebaseApp, + authorizationCode: String, + callback: (Result) -> Unit + ) { + callback(Result.success(Unit)) + } + + override fun revokeAccessToken( + app: AuthPigeonFirebaseApp, + accessToken: String, + callback: (Result) -> Unit + ) { + getAuthFromPigeon(app).revokeAccessToken(accessToken).addOnCompleteListener { task -> + completeVoid(task, callback) + } + } + + override fun initializeRecaptchaConfig( + app: AuthPigeonFirebaseApp, + callback: (Result) -> Unit + ) { + getAuthFromPigeon(app).initializeRecaptchaConfig().addOnCompleteListener { task -> + completeVoid(task, callback) + } + } + + override fun getPluginConstantsForFirebaseApp( + firebaseApp: FirebaseApp? + ): Task> { + val taskCompletionSource = TaskCompletionSource>() + + cachedThreadPool.execute { + try { + val constants = HashMap() + val firebaseAuth = FirebaseAuth.getInstance(firebaseApp!!) + val firebaseUser = firebaseAuth.currentUser + val languageCode = firebaseAuth.languageCode + val user = PigeonParser.parseFirebaseUser(firebaseUser) + + if (languageCode != null) { + constants["APP_LANGUAGE_CODE"] = languageCode + } + if (user != null) { + constants["APP_CURRENT_USER"] = PigeonParser.manuallyToList(user) + } + + taskCompletionSource.setResult(constants) + } catch (e: Exception) { + taskCompletionSource.setException(e) + } + } + + return taskCompletionSource.task + } + + override fun didReinitializeFirebaseCore(): Task { + val taskCompletionSource = TaskCompletionSource() + + cachedThreadPool.execute { + try { + removeEventListeners() + authCredentials.clear() + taskCompletionSource.setResult(null) + } catch (e: Exception) { + taskCompletionSource.setException(e) + } + } + + return taskCompletionSource.task + } + + private fun removeEventListeners() { + for ((eventChannel, streamHandler) in streamHandlers) { + streamHandler.onCancel(null) + eventChannel.setStreamHandler(null) + } + streamHandlers.clear() + } + + private fun completeVoid(task: Task<*>, callback: (Result) -> Unit) { + if (task.isSuccessful) { + callback(Result.success(Unit)) + } else { + callback( + Result.failure( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter(task.exception))) + } + } + + private fun completeAuthResult( + task: Task, + callback: (Result) -> Unit + ) { + if (task.isSuccessful) { + callback(Result.success(PigeonParser.parseAuthResult(task.result))) + } else { + callback( + Result.failure( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter(task.exception))) + } + } + + companion object { + private const val METHOD_CHANNEL_NAME = "plugins.flutter.io/firebase_auth" + val authCredentials: HashMap = HashMap() + + fun getAuthFromPigeon(pigeonApp: AuthPigeonFirebaseApp): FirebaseAuth { + val app = FirebaseApp.getInstance(pigeonApp.appName) + val auth = FirebaseAuth.getInstance(app) + pigeonApp.tenantId?.let { auth.setTenantId(it) } + val customDomain = FlutterFirebasePlugin.customAuthDomain[pigeonApp.appName] + if (customDomain != null) { + auth.setCustomAuthDomain(customDomain) + } + pigeonApp.customAuthDomain?.let { auth.setCustomAuthDomain(it) } + return auth + } + } +} diff --git a/packages/firebase_auth/firebase_auth/android/src/main/kotlin/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthPluginException.kt b/packages/firebase_auth/firebase_auth/android/src/main/kotlin/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthPluginException.kt new file mode 100644 index 000000000000..6692a7f6f767 --- /dev/null +++ b/packages/firebase_auth/firebase_auth/android/src/main/kotlin/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthPluginException.kt @@ -0,0 +1,125 @@ +/* + * Copyright 2022, the Chromium project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ +package io.flutter.plugins.firebase.auth + +import com.google.firebase.FirebaseApiNotAvailableException +import com.google.firebase.FirebaseNetworkException +import com.google.firebase.FirebaseTooManyRequestsException +import com.google.firebase.auth.FirebaseAuthException +import com.google.firebase.auth.FirebaseAuthMultiFactorException +import com.google.firebase.auth.FirebaseAuthUserCollisionException +import com.google.firebase.auth.FirebaseAuthWeakPasswordException +import java.util.UUID + +object FlutterFirebaseAuthPluginException { + fun parserExceptionToFlutter(nativeException: Exception?): FlutterError { + if (nativeException == null) { + return FlutterError("UNKNOWN", null, null) + } + var code = "UNKNOWN" + var message = nativeException.message + val additionalData = HashMap() + + if (nativeException is FirebaseAuthMultiFactorException) { + val output = HashMap() + val multiFactorResolver = nativeException.resolver + val hints = multiFactorResolver.hints + val session = multiFactorResolver.session + val sessionId = UUID.randomUUID().toString() + FlutterFirebaseMultiFactor.multiFactorSessionMap[sessionId] = session + + val resolverId = UUID.randomUUID().toString() + FlutterFirebaseMultiFactor.multiFactorResolverMap[resolverId] = multiFactorResolver + + val pigeonHints = PigeonParser.multiFactorInfoToMap(hints) + + output[Constants.APP_NAME] = nativeException.resolver.firebaseAuth.app.name + output[Constants.MULTI_FACTOR_HINTS] = pigeonHints + output[Constants.MULTI_FACTOR_SESSION_ID] = sessionId + output[Constants.MULTI_FACTOR_RESOLVER_ID] = resolverId + + return FlutterError(nativeException.errorCode, nativeException.localizedMessage, output) + } + + if (nativeException is FirebaseNetworkException || + nativeException.cause is FirebaseNetworkException) { + return FlutterError( + "network-request-failed", + "A network error (such as timeout, interrupted connection or unreachable host) has occurred.", + null) + } + + if (nativeException is FirebaseApiNotAvailableException || + nativeException.cause is FirebaseApiNotAvailableException) { + return FlutterError("api-not-available", "The requested API is not available.", null) + } + + if (nativeException is FirebaseTooManyRequestsException || + nativeException.cause is FirebaseTooManyRequestsException) { + return FlutterError( + "too-many-requests", + "We have blocked all requests from this device due to unusual activity. Try again later.", + null) + } + + if (nativeException.message != null && + nativeException.message!!.startsWith( + "Cannot create PhoneAuthCredential without either verificationProof")) { + return FlutterError( + "invalid-verification-code", + "The verification ID used to create the phone auth credential is invalid.", + null) + } + + if (message != null && + message.contains("User has already been linked to the given provider.")) { + return alreadyLinkedProvider() + } + + if (nativeException is FirebaseAuthException) { + code = nativeException.errorCode + } + + if (nativeException is FirebaseAuthWeakPasswordException) { + message = nativeException.reason + } + + if (nativeException is FirebaseAuthUserCollisionException) { + val email = nativeException.email + if (email != null) { + additionalData["email"] = email + } + + val authCredential = nativeException.updatedCredential + if (authCredential != null) { + additionalData["authCredential"] = PigeonParser.parseAuthCredential(authCredential) + } + } + + return FlutterError(code, message, additionalData) + } + + fun noUser(): FlutterError { + return FlutterError("NO_CURRENT_USER", "No user currently signed in.", null) + } + + fun invalidCredential(): FlutterError { + return FlutterError( + "INVALID_CREDENTIAL", + "The supplied auth credential is malformed, has expired or is not currently supported.", + null) + } + + fun noSuchProvider(): FlutterError { + return FlutterError( + "NO_SUCH_PROVIDER", "User was not linked to an account with the given provider.", null) + } + + fun alreadyLinkedProvider(): FlutterError { + return FlutterError( + "PROVIDER_ALREADY_LINKED", "User has already been linked to the given provider.", null) + } +} diff --git a/packages/firebase_auth/firebase_auth/android/src/main/kotlin/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthRegistrar.kt b/packages/firebase_auth/firebase_auth/android/src/main/kotlin/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthRegistrar.kt new file mode 100644 index 000000000000..005f2be3430e --- /dev/null +++ b/packages/firebase_auth/firebase_auth/android/src/main/kotlin/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthRegistrar.kt @@ -0,0 +1,17 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +package io.flutter.plugins.firebase.auth + +import androidx.annotation.Keep +import com.google.firebase.components.Component +import com.google.firebase.components.ComponentRegistrar +import com.google.firebase.platforminfo.LibraryVersionComponent + +@Keep +class FlutterFirebaseAuthRegistrar : ComponentRegistrar { + override fun getComponents(): List> { + return listOf( + LibraryVersionComponent.create(BuildConfig.LIBRARY_NAME, BuildConfig.LIBRARY_VERSION)) + } +} diff --git a/packages/firebase_auth/firebase_auth/android/src/main/kotlin/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthUser.kt b/packages/firebase_auth/firebase_auth/android/src/main/kotlin/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthUser.kt new file mode 100644 index 000000000000..f4e2680b38e0 --- /dev/null +++ b/packages/firebase_auth/firebase_auth/android/src/main/kotlin/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthUser.kt @@ -0,0 +1,385 @@ +/* + * Copyright 2023, the Chromium project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ +package io.flutter.plugins.firebase.auth + +import android.app.Activity +import android.net.Uri +import com.google.android.gms.tasks.Tasks +import com.google.firebase.FirebaseApp +import com.google.firebase.auth.FirebaseAuth +import com.google.firebase.auth.FirebaseUser +import com.google.firebase.auth.OAuthProvider +import com.google.firebase.auth.PhoneAuthCredential +import com.google.firebase.auth.UserProfileChangeRequest +import io.flutter.plugins.firebase.core.FlutterFirebasePlugin.cachedThreadPool + +class FlutterFirebaseAuthUser : FirebaseAuthUserHostApi { + private var activity: Activity? = null + + fun setActivity(activity: Activity?) { + this.activity = activity + } + + override fun delete(app: AuthPigeonFirebaseApp, callback: (Result) -> Unit) { + val firebaseUser = getCurrentUserFromPigeon(app) + if (firebaseUser == null) { + callback(Result.failure(FlutterFirebaseAuthPluginException.noUser())) + return + } + + firebaseUser.delete().addOnCompleteListener { task -> + if (task.isSuccessful) { + callback(Result.success(Unit)) + } else { + callback( + Result.failure( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter(task.exception))) + } + } + } + + override fun getIdToken( + app: AuthPigeonFirebaseApp, + forceRefresh: Boolean, + callback: (Result) -> Unit + ) { + cachedThreadPool.execute { + val firebaseUser = getCurrentUserFromPigeon(app) + if (firebaseUser == null) { + callback(Result.failure(FlutterFirebaseAuthPluginException.noUser())) + return@execute + } + try { + val response = Tasks.await(firebaseUser.getIdToken(forceRefresh)) + callback(Result.success(PigeonParser.parseTokenResult(response))) + } catch (exception: Exception) { + callback( + Result.failure(FlutterFirebaseAuthPluginException.parserExceptionToFlutter(exception))) + } + } + } + + override fun linkWithCredential( + app: AuthPigeonFirebaseApp, + input: Map, + callback: (Result) -> Unit + ) { + val firebaseUser = getCurrentUserFromPigeon(app) + val credential = PigeonParser.getCredential(input) + + if (firebaseUser == null) { + callback(Result.failure(FlutterFirebaseAuthPluginException.noUser())) + return + } + + if (credential == null) { + callback(Result.failure(FlutterFirebaseAuthPluginException.invalidCredential())) + return + } + + firebaseUser.linkWithCredential(credential).addOnCompleteListener { task -> + if (task.isSuccessful) { + callback(Result.success(PigeonParser.parseAuthResult(task.result))) + } else { + callback( + Result.failure( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter(task.exception))) + } + } + } + + override fun linkWithProvider( + app: AuthPigeonFirebaseApp, + signInProvider: InternalSignInProvider, + callback: (Result) -> Unit + ) { + val firebaseUser = getCurrentUserFromPigeon(app) + val provider = buildOAuthProvider(signInProvider) + + firebaseUser!! + .startActivityForLinkWithProvider(checkNotNull(activity), provider) + .addOnCompleteListener { task -> + if (task.isSuccessful) { + callback(Result.success(PigeonParser.parseAuthResult(task.result))) + } else { + callback( + Result.failure( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter(task.exception))) + } + } + } + + override fun reauthenticateWithCredential( + app: AuthPigeonFirebaseApp, + input: Map, + callback: (Result) -> Unit + ) { + val firebaseUser = getCurrentUserFromPigeon(app) + val credential = PigeonParser.getCredential(input) + + if (firebaseUser == null) { + callback(Result.failure(FlutterFirebaseAuthPluginException.noUser())) + return + } + + if (credential == null) { + callback(Result.failure(FlutterFirebaseAuthPluginException.invalidCredential())) + return + } + + firebaseUser.reauthenticateAndRetrieveData(credential).addOnCompleteListener { task -> + if (task.isSuccessful) { + callback(Result.success(PigeonParser.parseAuthResult(task.result))) + } else { + callback( + Result.failure( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter(task.exception))) + } + } + } + + override fun reauthenticateWithProvider( + app: AuthPigeonFirebaseApp, + signInProvider: InternalSignInProvider, + callback: (Result) -> Unit + ) { + val firebaseUser = getCurrentUserFromPigeon(app) + val provider = buildOAuthProvider(signInProvider) + + firebaseUser!! + .startActivityForReauthenticateWithProvider(checkNotNull(activity), provider) + .addOnCompleteListener { task -> + if (task.isSuccessful) { + callback(Result.success(PigeonParser.parseAuthResult(task.result))) + } else { + callback( + Result.failure( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter(task.exception))) + } + } + } + + override fun reload(app: AuthPigeonFirebaseApp, callback: (Result) -> Unit) { + val firebaseUser = getCurrentUserFromPigeon(app) + if (firebaseUser == null) { + callback(Result.failure(FlutterFirebaseAuthPluginException.noUser())) + return + } + + firebaseUser.reload().addOnCompleteListener { task -> + if (task.isSuccessful) { + callback(Result.success(PigeonParser.parseFirebaseUser(firebaseUser)!!)) + } else { + callback( + Result.failure( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter(task.exception))) + } + } + } + + override fun sendEmailVerification( + app: AuthPigeonFirebaseApp, + actionCodeSettings: InternalActionCodeSettings?, + callback: (Result) -> Unit + ) { + val firebaseUser = getCurrentUserFromPigeon(app) + if (firebaseUser == null) { + callback(Result.failure(FlutterFirebaseAuthPluginException.noUser())) + return + } + + val task = + if (actionCodeSettings == null) { + firebaseUser.sendEmailVerification() + } else { + firebaseUser.sendEmailVerification(PigeonParser.getActionCodeSettings(actionCodeSettings)) + } + + task.addOnCompleteListener { completed -> + if (completed.isSuccessful) { + callback(Result.success(Unit)) + } else { + callback( + Result.failure( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter(completed.exception))) + } + } + } + + override fun unlink( + app: AuthPigeonFirebaseApp, + providerId: String, + callback: (Result) -> Unit + ) { + val firebaseUser = getCurrentUserFromPigeon(app) + if (firebaseUser == null) { + callback(Result.failure(FlutterFirebaseAuthPluginException.noUser())) + return + } + + firebaseUser.unlink(providerId).addOnCompleteListener { task -> + if (task.isSuccessful) { + callback(Result.success(PigeonParser.parseAuthResult(task.result))) + } else { + val exception = task.exception + if (exception + ?.message + ?.contains("User was not linked to an account with the given provider.") == true) { + callback(Result.failure(FlutterFirebaseAuthPluginException.noSuchProvider())) + } else { + callback( + Result.failure( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter(exception))) + } + } + } + } + + override fun updateEmail( + app: AuthPigeonFirebaseApp, + newEmail: String, + callback: (Result) -> Unit + ) { + reloadAfterUserUpdate(getCurrentUserFromPigeon(app), callback) { it.updateEmail(newEmail) } + } + + override fun updatePassword( + app: AuthPigeonFirebaseApp, + newPassword: String, + callback: (Result) -> Unit + ) { + reloadAfterUserUpdate(getCurrentUserFromPigeon(app), callback) { + it.updatePassword(newPassword) + } + } + + override fun updatePhoneNumber( + app: AuthPigeonFirebaseApp, + input: Map, + callback: (Result) -> Unit + ) { + val firebaseUser = getCurrentUserFromPigeon(app) + if (firebaseUser == null) { + callback(Result.failure(FlutterFirebaseAuthPluginException.noUser())) + return + } + + val phoneAuthCredential = PigeonParser.getCredential(input) as? PhoneAuthCredential + if (phoneAuthCredential == null) { + callback(Result.failure(FlutterFirebaseAuthPluginException.invalidCredential())) + return + } + + reloadAfterUserUpdate(firebaseUser, callback) { it.updatePhoneNumber(phoneAuthCredential) } + } + + override fun updateProfile( + app: AuthPigeonFirebaseApp, + profile: InternalUserProfile, + callback: (Result) -> Unit + ) { + val firebaseUser = getCurrentUserFromPigeon(app) + if (firebaseUser == null) { + callback(Result.failure(FlutterFirebaseAuthPluginException.noUser())) + return + } + + val builder = UserProfileChangeRequest.Builder() + if (profile.displayNameChanged) { + builder.setDisplayName(profile.displayName) + } + if (profile.photoUrlChanged) { + builder.setPhotoUri(profile.photoUrl?.let { Uri.parse(it) }) + } + + reloadAfterUserUpdate(firebaseUser, callback) { it.updateProfile(builder.build()) } + } + + override fun verifyBeforeUpdateEmail( + app: AuthPigeonFirebaseApp, + newEmail: String, + actionCodeSettings: InternalActionCodeSettings?, + callback: (Result) -> Unit + ) { + val firebaseUser = getCurrentUserFromPigeon(app) + if (firebaseUser == null) { + callback(Result.failure(FlutterFirebaseAuthPluginException.noUser())) + return + } + + val task = + if (actionCodeSettings == null) { + firebaseUser.verifyBeforeUpdateEmail(newEmail) + } else { + firebaseUser.verifyBeforeUpdateEmail( + newEmail, PigeonParser.getActionCodeSettings(actionCodeSettings)) + } + + task.addOnCompleteListener { completed -> + if (completed.isSuccessful) { + callback(Result.success(Unit)) + } else { + callback( + Result.failure( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter(completed.exception))) + } + } + } + + private fun reloadAfterUserUpdate( + firebaseUser: FirebaseUser?, + callback: (Result) -> Unit, + update: (FirebaseUser) -> com.google.android.gms.tasks.Task + ) { + if (firebaseUser == null) { + callback(Result.failure(FlutterFirebaseAuthPluginException.noUser())) + return + } + + update(firebaseUser).addOnCompleteListener { task -> + if (task.isSuccessful) { + firebaseUser.reload().addOnCompleteListener { reloadTask -> + if (reloadTask.isSuccessful) { + callback(Result.success(PigeonParser.parseFirebaseUser(firebaseUser)!!)) + } else { + callback( + Result.failure( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + reloadTask.exception))) + } + } + } else { + callback( + Result.failure( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter(task.exception))) + } + } + } + + companion object { + fun getCurrentUserFromPigeon(pigeonApp: AuthPigeonFirebaseApp): FirebaseUser? { + val app = FirebaseApp.getInstance(pigeonApp.appName) + val auth = FirebaseAuth.getInstance(app) + pigeonApp.tenantId?.let { auth.setTenantId(it) } + return auth.currentUser + } + + fun buildOAuthProvider(signInProvider: InternalSignInProvider): OAuthProvider { + val provider = OAuthProvider.newBuilder(signInProvider.providerId) + signInProvider.scopes?.filterNotNull()?.let { provider.setScopes(it) } + signInProvider.customParameters?.let { params -> + val converted = HashMap() + for ((key, value) in params) { + if (key != null && value != null) { + converted[key] = value + } + } + provider.addCustomParameters(converted) + } + return provider.build() + } + } +} diff --git a/packages/firebase_auth/firebase_auth/android/src/main/kotlin/io/flutter/plugins/firebase/auth/FlutterFirebaseMultiFactor.kt b/packages/firebase_auth/firebase_auth/android/src/main/kotlin/io/flutter/plugins/firebase/auth/FlutterFirebaseMultiFactor.kt new file mode 100644 index 000000000000..da12c0ad6c17 --- /dev/null +++ b/packages/firebase_auth/firebase_auth/android/src/main/kotlin/io/flutter/plugins/firebase/auth/FlutterFirebaseMultiFactor.kt @@ -0,0 +1,189 @@ +/* + * Copyright 2023, the Chromium project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ +package io.flutter.plugins.firebase.auth + +import com.google.firebase.auth.MultiFactor +import com.google.firebase.auth.MultiFactorAssertion +import com.google.firebase.auth.MultiFactorResolver +import com.google.firebase.auth.MultiFactorSession +import com.google.firebase.auth.PhoneAuthProvider +import com.google.firebase.auth.PhoneMultiFactorGenerator +import com.google.firebase.internal.api.FirebaseNoSignedInUserException +import java.util.UUID + +class FlutterFirebaseMultiFactor : MultiFactorUserHostApi, MultiFactoResolverHostApi { + @Throws(FirebaseNoSignedInUserException::class) + fun getAppMultiFactor(app: AuthPigeonFirebaseApp): MultiFactor { + val currentUser = + FlutterFirebaseAuthUser.getCurrentUserFromPigeon(app) + ?: throw FirebaseNoSignedInUserException("No user is signed in") + val appMultiFactorUser = multiFactorUserMap.getOrPut(app.appName) { HashMap() } + return appMultiFactorUser.getOrPut(currentUser.uid) { currentUser.multiFactor } + } + + override fun enrollPhone( + app: AuthPigeonFirebaseApp, + assertion: InternalPhoneMultiFactorAssertion, + displayName: String?, + callback: (Result) -> Unit + ) { + val multiFactor: MultiFactor + try { + multiFactor = getAppMultiFactor(app) + } catch (e: FirebaseNoSignedInUserException) { + callback(Result.failure(e)) + return + } + + val credential = + PhoneAuthProvider.getCredential(assertion.verificationId, assertion.verificationCode) + val multiFactorAssertion = PhoneMultiFactorGenerator.getAssertion(credential) + + multiFactor.enroll(multiFactorAssertion, displayName).addOnCompleteListener { task -> + if (task.isSuccessful) { + callback(Result.success(Unit)) + } else { + callback( + Result.failure( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter(task.exception))) + } + } + } + + override fun enrollTotp( + app: AuthPigeonFirebaseApp, + assertionId: String, + displayName: String?, + callback: (Result) -> Unit + ) { + val multiFactor: MultiFactor + try { + multiFactor = getAppMultiFactor(app) + } catch (e: FirebaseNoSignedInUserException) { + callback(Result.failure(e)) + return + } + + val multiFactorAssertion = multiFactorAssertionMap[assertionId] + checkNotNull(multiFactorAssertion) + multiFactor.enroll(multiFactorAssertion, displayName).addOnCompleteListener { task -> + if (task.isSuccessful) { + callback(Result.success(Unit)) + } else { + callback( + Result.failure( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter(task.exception))) + } + } + } + + override fun getSession( + app: AuthPigeonFirebaseApp, + callback: (Result) -> Unit + ) { + val multiFactor: MultiFactor + try { + multiFactor = getAppMultiFactor(app) + } catch (e: FirebaseNoSignedInUserException) { + callback(Result.failure(e)) + return + } + + multiFactor.session.addOnCompleteListener { task -> + if (task.isSuccessful) { + val sessionResult = task.result + val id = UUID.randomUUID().toString() + multiFactorSessionMap[id] = sessionResult + callback(Result.success(InternalMultiFactorSession(id))) + } else { + callback( + Result.failure( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter(task.exception))) + } + } + } + + override fun unenroll( + app: AuthPigeonFirebaseApp, + factorUid: String, + callback: (Result) -> Unit + ) { + val multiFactor: MultiFactor + try { + multiFactor = getAppMultiFactor(app) + } catch (e: FirebaseNoSignedInUserException) { + callback(Result.failure(FlutterFirebaseAuthPluginException.parserExceptionToFlutter(e))) + return + } + + multiFactor.unenroll(factorUid).addOnCompleteListener { task -> + if (task.isSuccessful) { + callback(Result.success(Unit)) + } else { + callback( + Result.failure( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter(task.exception))) + } + } + } + + override fun getEnrolledFactors( + app: AuthPigeonFirebaseApp, + callback: (Result>) -> Unit + ) { + val multiFactor: MultiFactor + try { + multiFactor = getAppMultiFactor(app) + } catch (e: FirebaseNoSignedInUserException) { + callback(Result.failure(e)) + return + } + + callback(Result.success(PigeonParser.multiFactorInfoToPigeon(multiFactor.enrolledFactors))) + } + + override fun resolveSignIn( + resolverId: String, + assertion: InternalPhoneMultiFactorAssertion?, + totpAssertionId: String?, + callback: (Result) -> Unit + ) { + val resolver = multiFactorResolverMap[resolverId] + if (resolver == null) { + callback( + Result.failure( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + Exception("Resolver not found")))) + return + } + + val multiFactorAssertion = + if (assertion != null) { + val credential = + PhoneAuthProvider.getCredential(assertion.verificationId, assertion.verificationCode) + PhoneMultiFactorGenerator.getAssertion(credential) + } else { + multiFactorAssertionMap[totpAssertionId] + } + + resolver.resolveSignIn(multiFactorAssertion!!).addOnCompleteListener { task -> + if (task.isSuccessful) { + callback(Result.success(PigeonParser.parseAuthResult(task.result))) + } else { + callback( + Result.failure( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter(task.exception))) + } + } + } + + companion object { + val multiFactorUserMap: MutableMap> = HashMap() + val multiFactorSessionMap: MutableMap = HashMap() + val multiFactorResolverMap: MutableMap = HashMap() + val multiFactorAssertionMap: MutableMap = HashMap() + } +} diff --git a/packages/firebase_auth/firebase_auth/android/src/main/kotlin/io/flutter/plugins/firebase/auth/FlutterFirebaseTotpMultiFactor.kt b/packages/firebase_auth/firebase_auth/android/src/main/kotlin/io/flutter/plugins/firebase/auth/FlutterFirebaseTotpMultiFactor.kt new file mode 100644 index 000000000000..0ce25fc89641 --- /dev/null +++ b/packages/firebase_auth/firebase_auth/android/src/main/kotlin/io/flutter/plugins/firebase/auth/FlutterFirebaseTotpMultiFactor.kt @@ -0,0 +1,63 @@ +/* + * Copyright 2023, the Chromium project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ +package io.flutter.plugins.firebase.auth + +import com.google.firebase.auth.TotpMultiFactorGenerator +import com.google.firebase.auth.TotpSecret +import java.util.UUID + +class FlutterFirebaseTotpMultiFactor : MultiFactorTotpHostApi { + override fun generateSecret(sessionId: String, callback: (Result) -> Unit) { + val multiFactorSession = FlutterFirebaseMultiFactor.multiFactorSessionMap[sessionId] + checkNotNull(multiFactorSession) + TotpMultiFactorGenerator.generateSecret(multiFactorSession).addOnCompleteListener { task -> + if (task.isSuccessful) { + val secret = task.result + multiFactorSecret[secret.sharedSecretKey] = secret + callback( + Result.success( + InternalTotpSecret( + codeIntervalSeconds = secret.codeIntervalSeconds.toLong(), + codeLength = secret.codeLength.toLong(), + secretKey = secret.sharedSecretKey, + hashingAlgorithm = secret.hashAlgorithm, + enrollmentCompletionDeadline = secret.enrollmentCompletionDeadline))) + } else { + callback( + Result.failure( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter(task.exception))) + } + } + } + + override fun getAssertionForEnrollment( + secretKey: String, + oneTimePassword: String, + callback: (Result) -> Unit + ) { + val secret = multiFactorSecret[secretKey] + checkNotNull(secret) + val assertion = TotpMultiFactorGenerator.getAssertionForEnrollment(secret, oneTimePassword) + val assertionId = UUID.randomUUID().toString() + FlutterFirebaseMultiFactor.multiFactorAssertionMap[assertionId] = assertion + callback(Result.success(assertionId)) + } + + override fun getAssertionForSignIn( + enrollmentId: String, + oneTimePassword: String, + callback: (Result) -> Unit + ) { + val assertion = TotpMultiFactorGenerator.getAssertionForSignIn(enrollmentId, oneTimePassword) + val assertionId = UUID.randomUUID().toString() + FlutterFirebaseMultiFactor.multiFactorAssertionMap[assertionId] = assertion + callback(Result.success(assertionId)) + } + + companion object { + val multiFactorSecret: MutableMap = HashMap() + } +} diff --git a/packages/firebase_auth/firebase_auth/android/src/main/kotlin/io/flutter/plugins/firebase/auth/FlutterFirebaseTotpSecret.kt b/packages/firebase_auth/firebase_auth/android/src/main/kotlin/io/flutter/plugins/firebase/auth/FlutterFirebaseTotpSecret.kt new file mode 100644 index 000000000000..aa52d2f769a4 --- /dev/null +++ b/packages/firebase_auth/firebase_auth/android/src/main/kotlin/io/flutter/plugins/firebase/auth/FlutterFirebaseTotpSecret.kt @@ -0,0 +1,36 @@ +/* + * Copyright 2023, the Chromium project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ +package io.flutter.plugins.firebase.auth + +import com.google.firebase.auth.TotpSecret + +class FlutterFirebaseTotpSecret : MultiFactorTotpSecretHostApi { + override fun generateQrCodeUrl( + secretKey: String, + accountName: String?, + issuer: String?, + callback: (Result) -> Unit + ) { + val secret: TotpSecret? = FlutterFirebaseTotpMultiFactor.multiFactorSecret[secretKey] + checkNotNull(secret) + if (accountName == null || issuer == null) { + callback(Result.success(secret.generateQrCodeUrl())) + return + } + callback(Result.success(secret.generateQrCodeUrl(accountName, issuer))) + } + + override fun openInOtpApp( + secretKey: String, + qrCodeUrl: String, + callback: (Result) -> Unit + ) { + val secret: TotpSecret? = FlutterFirebaseTotpMultiFactor.multiFactorSecret[secretKey] + checkNotNull(secret) + secret.openInOtpApp(qrCodeUrl) + callback(Result.success(Unit)) + } +} diff --git a/packages/firebase_auth/firebase_auth/android/src/main/kotlin/io/flutter/plugins/firebase/auth/GeneratedAndroidFirebaseAuth.g.kt b/packages/firebase_auth/firebase_auth/android/src/main/kotlin/io/flutter/plugins/firebase/auth/GeneratedAndroidFirebaseAuth.g.kt new file mode 100644 index 000000000000..b116357a8a66 --- /dev/null +++ b/packages/firebase_auth/firebase_auth/android/src/main/kotlin/io/flutter/plugins/firebase/auth/GeneratedAndroidFirebaseAuth.g.kt @@ -0,0 +1,3101 @@ +// Copyright 2023, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Autogenerated from Pigeon (v26.3.4), do not edit directly. +// See also: https://pub.dev/packages/pigeon +@file:Suppress("UNCHECKED_CAST", "ArrayInDataClass") + +package io.flutter.plugins.firebase.auth + +import android.util.Log +import io.flutter.plugin.common.BasicMessageChannel +import io.flutter.plugin.common.BinaryMessenger +import io.flutter.plugin.common.MessageCodec +import io.flutter.plugin.common.StandardMessageCodec +import java.io.ByteArrayOutputStream +import java.nio.ByteBuffer + +private object GeneratedAndroidFirebaseAuthPigeonUtils { + + fun wrapResult(result: Any?): List { + return listOf(result) + } + + fun wrapError(exception: Throwable): List { + return if (exception is FlutterError) { + listOf(exception.code, exception.message, exception.details) + } else { + listOf( + exception.javaClass.simpleName, + exception.toString(), + "Cause: " + exception.cause + ", Stacktrace: " + Log.getStackTraceString(exception)) + } + } + + fun doubleEquals(a: Double, b: Double): Boolean { + // Normalize -0.0 to 0.0 and handle NaN equality. + return (if (a == 0.0) 0.0 else a) == (if (b == 0.0) 0.0 else b) || (a.isNaN() && b.isNaN()) + } + + fun floatEquals(a: Float, b: Float): Boolean { + // Normalize -0.0 to 0.0 and handle NaN equality. + return (if (a == 0.0f) 0.0f else a) == (if (b == 0.0f) 0.0f else b) || (a.isNaN() && b.isNaN()) + } + + fun doubleHash(d: Double): Int { + // Normalize -0.0 to 0.0 and handle NaN to ensure consistent hash codes. + val normalized = if (d == 0.0) 0.0 else d + val bits = java.lang.Double.doubleToLongBits(normalized) + return (bits xor (bits ushr 32)).toInt() + } + + fun floatHash(f: Float): Int { + // Normalize -0.0 to 0.0 and handle NaN to ensure consistent hash codes. + val normalized = if (f == 0.0f) 0.0f else f + return java.lang.Float.floatToIntBits(normalized) + } + + fun deepEquals(a: Any?, b: Any?): Boolean { + if (a === b) { + return true + } + if (a == null || b == null) { + return false + } + if (a is ByteArray && b is ByteArray) { + return a.contentEquals(b) + } + if (a is IntArray && b is IntArray) { + return a.contentEquals(b) + } + if (a is LongArray && b is LongArray) { + return a.contentEquals(b) + } + if (a is DoubleArray && b is DoubleArray) { + if (a.size != b.size) return false + for (i in a.indices) { + if (!doubleEquals(a[i], b[i])) return false + } + return true + } + if (a is FloatArray && b is FloatArray) { + if (a.size != b.size) return false + for (i in a.indices) { + if (!floatEquals(a[i], b[i])) return false + } + return true + } + if (a is Array<*> && b is Array<*>) { + if (a.size != b.size) return false + for (i in a.indices) { + if (!deepEquals(a[i], b[i])) return false + } + return true + } + if (a is List<*> && b is List<*>) { + if (a.size != b.size) return false + val iterA = a.iterator() + val iterB = b.iterator() + while (iterA.hasNext() && iterB.hasNext()) { + if (!deepEquals(iterA.next(), iterB.next())) return false + } + return true + } + if (a is Map<*, *> && b is Map<*, *>) { + if (a.size != b.size) return false + for (entry in a) { + val key = entry.key + var found = false + for (bEntry in b) { + if (deepEquals(key, bEntry.key)) { + if (deepEquals(entry.value, bEntry.value)) { + found = true + break + } else { + return false + } + } + } + if (!found) return false + } + return true + } + if (a is Double && b is Double) { + return doubleEquals(a, b) + } + if (a is Float && b is Float) { + return floatEquals(a, b) + } + return a == b + } + + fun deepHash(value: Any?): Int { + return when (value) { + null -> 0 + is ByteArray -> value.contentHashCode() + is IntArray -> value.contentHashCode() + is LongArray -> value.contentHashCode() + is DoubleArray -> { + var result = 1 + for (item in value) { + result = 31 * result + doubleHash(item) + } + result + } + is FloatArray -> { + var result = 1 + for (item in value) { + result = 31 * result + floatHash(item) + } + result + } + is Array<*> -> { + var result = 1 + for (item in value) { + result = 31 * result + deepHash(item) + } + result + } + is List<*> -> { + var result = 1 + for (item in value) { + result = 31 * result + deepHash(item) + } + result + } + is Map<*, *> -> { + var result = 0 + for (entry in value) { + result += ((deepHash(entry.key) * 31) xor deepHash(entry.value)) + } + result + } + is Double -> doubleHash(value) + is Float -> floatHash(value) + else -> value.hashCode() + } + } +} + +/** + * Error class for passing custom error details to Flutter via a thrown PlatformException. + * + * @property code The error code. + * @property message The error message. + * @property details The error details. Must be a datatype supported by the api codec. + */ +class FlutterError( + val code: String, + override val message: String? = null, + val details: Any? = null +) : RuntimeException() + +/** The type of operation that generated the action code from calling [checkActionCode]. */ +enum class ActionCodeInfoOperation(val raw: Int) { + /** Unknown operation. */ + UNKNOWN(0), + /** Password reset code generated via [sendPasswordResetEmail]. */ + PASSWORD_RESET(1), + /** Email verification code generated via [User.sendEmailVerification]. */ + VERIFY_EMAIL(2), + /** Email change revocation code generated via [User.updateEmail]. */ + RECOVER_EMAIL(3), + /** Email sign in code generated via [sendSignInLinkToEmail]. */ + EMAIL_SIGN_IN(4), + /** Verify and change email code generated via [User.verifyBeforeUpdateEmail]. */ + VERIFY_AND_CHANGE_EMAIL(5), + /** Action code for reverting second factor addition. */ + REVERT_SECOND_FACTOR_ADDITION(6); + + companion object { + fun ofRaw(raw: Int): ActionCodeInfoOperation? { + return values().firstOrNull { it.raw == raw } + } + } +} + +/** Generated class from Pigeon that represents data sent in messages. */ +data class InternalMultiFactorSession(val id: String) { + companion object { + fun fromList(pigeonVar_list: List): InternalMultiFactorSession { + val id = pigeonVar_list[0] as String + return InternalMultiFactorSession(id) + } + } + + fun toList(): List { + return listOf( + id, + ) + } + + override fun equals(other: Any?): Boolean { + if (other == null || other.javaClass != javaClass) { + return false + } + if (this === other) { + return true + } + val other = other as InternalMultiFactorSession + return GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals(this.id, other.id) + } + + override fun hashCode(): Int { + var result = javaClass.hashCode() + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.id) + return result + } +} + +/** Generated class from Pigeon that represents data sent in messages. */ +data class InternalPhoneMultiFactorAssertion( + val verificationId: String, + val verificationCode: String +) { + companion object { + fun fromList(pigeonVar_list: List): InternalPhoneMultiFactorAssertion { + val verificationId = pigeonVar_list[0] as String + val verificationCode = pigeonVar_list[1] as String + return InternalPhoneMultiFactorAssertion(verificationId, verificationCode) + } + } + + fun toList(): List { + return listOf( + verificationId, + verificationCode, + ) + } + + override fun equals(other: Any?): Boolean { + if (other == null || other.javaClass != javaClass) { + return false + } + if (this === other) { + return true + } + val other = other as InternalPhoneMultiFactorAssertion + return GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals( + this.verificationId, other.verificationId) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals( + this.verificationCode, other.verificationCode) + } + + override fun hashCode(): Int { + var result = javaClass.hashCode() + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.verificationId) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.verificationCode) + return result + } +} + +/** Generated class from Pigeon that represents data sent in messages. */ +data class InternalMultiFactorInfo( + val displayName: String? = null, + val enrollmentTimestamp: Double, + val factorId: String? = null, + val uid: String, + val phoneNumber: String? = null +) { + companion object { + fun fromList(pigeonVar_list: List): InternalMultiFactorInfo { + val displayName = pigeonVar_list[0] as String? + val enrollmentTimestamp = pigeonVar_list[1] as Double + val factorId = pigeonVar_list[2] as String? + val uid = pigeonVar_list[3] as String + val phoneNumber = pigeonVar_list[4] as String? + return InternalMultiFactorInfo(displayName, enrollmentTimestamp, factorId, uid, phoneNumber) + } + } + + fun toList(): List { + return listOf( + displayName, + enrollmentTimestamp, + factorId, + uid, + phoneNumber, + ) + } + + override fun equals(other: Any?): Boolean { + if (other == null || other.javaClass != javaClass) { + return false + } + if (this === other) { + return true + } + val other = other as InternalMultiFactorInfo + return GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals( + this.displayName, other.displayName) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals( + this.enrollmentTimestamp, other.enrollmentTimestamp) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals(this.factorId, other.factorId) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals(this.uid, other.uid) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals(this.phoneNumber, other.phoneNumber) + } + + override fun hashCode(): Int { + var result = javaClass.hashCode() + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.displayName) + result = + 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.enrollmentTimestamp) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.factorId) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.uid) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.phoneNumber) + return result + } +} + +/** Generated class from Pigeon that represents data sent in messages. */ +data class AuthPigeonFirebaseApp( + val appName: String, + val tenantId: String? = null, + val customAuthDomain: String? = null +) { + companion object { + fun fromList(pigeonVar_list: List): AuthPigeonFirebaseApp { + val appName = pigeonVar_list[0] as String + val tenantId = pigeonVar_list[1] as String? + val customAuthDomain = pigeonVar_list[2] as String? + return AuthPigeonFirebaseApp(appName, tenantId, customAuthDomain) + } + } + + fun toList(): List { + return listOf( + appName, + tenantId, + customAuthDomain, + ) + } + + override fun equals(other: Any?): Boolean { + if (other == null || other.javaClass != javaClass) { + return false + } + if (this === other) { + return true + } + val other = other as AuthPigeonFirebaseApp + return GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals(this.appName, other.appName) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals(this.tenantId, other.tenantId) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals( + this.customAuthDomain, other.customAuthDomain) + } + + override fun hashCode(): Int { + var result = javaClass.hashCode() + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.appName) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.tenantId) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.customAuthDomain) + return result + } +} + +/** Generated class from Pigeon that represents data sent in messages. */ +data class InternalActionCodeInfoData( + val email: String? = null, + val previousEmail: String? = null +) { + companion object { + fun fromList(pigeonVar_list: List): InternalActionCodeInfoData { + val email = pigeonVar_list[0] as String? + val previousEmail = pigeonVar_list[1] as String? + return InternalActionCodeInfoData(email, previousEmail) + } + } + + fun toList(): List { + return listOf( + email, + previousEmail, + ) + } + + override fun equals(other: Any?): Boolean { + if (other == null || other.javaClass != javaClass) { + return false + } + if (this === other) { + return true + } + val other = other as InternalActionCodeInfoData + return GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals(this.email, other.email) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals(this.previousEmail, other.previousEmail) + } + + override fun hashCode(): Int { + var result = javaClass.hashCode() + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.email) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.previousEmail) + return result + } +} + +/** Generated class from Pigeon that represents data sent in messages. */ +data class InternalActionCodeInfo( + val operation: ActionCodeInfoOperation, + val data: InternalActionCodeInfoData +) { + companion object { + fun fromList(pigeonVar_list: List): InternalActionCodeInfo { + val operation = pigeonVar_list[0] as ActionCodeInfoOperation + val data = pigeonVar_list[1] as InternalActionCodeInfoData + return InternalActionCodeInfo(operation, data) + } + } + + fun toList(): List { + return listOf( + operation, + data, + ) + } + + override fun equals(other: Any?): Boolean { + if (other == null || other.javaClass != javaClass) { + return false + } + if (this === other) { + return true + } + val other = other as InternalActionCodeInfo + return GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals(this.operation, other.operation) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals(this.data, other.data) + } + + override fun hashCode(): Int { + var result = javaClass.hashCode() + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.operation) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.data) + return result + } +} + +/** Generated class from Pigeon that represents data sent in messages. */ +data class InternalAdditionalUserInfo( + val isNewUser: Boolean, + val providerId: String? = null, + val username: String? = null, + val authorizationCode: String? = null, + val profile: Map? = null +) { + companion object { + fun fromList(pigeonVar_list: List): InternalAdditionalUserInfo { + val isNewUser = pigeonVar_list[0] as Boolean + val providerId = pigeonVar_list[1] as String? + val username = pigeonVar_list[2] as String? + val authorizationCode = pigeonVar_list[3] as String? + val profile = pigeonVar_list[4] as Map? + return InternalAdditionalUserInfo(isNewUser, providerId, username, authorizationCode, profile) + } + } + + fun toList(): List { + return listOf( + isNewUser, + providerId, + username, + authorizationCode, + profile, + ) + } + + override fun equals(other: Any?): Boolean { + if (other == null || other.javaClass != javaClass) { + return false + } + if (this === other) { + return true + } + val other = other as InternalAdditionalUserInfo + return GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals(this.isNewUser, other.isNewUser) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals(this.providerId, other.providerId) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals(this.username, other.username) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals( + this.authorizationCode, other.authorizationCode) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals(this.profile, other.profile) + } + + override fun hashCode(): Int { + var result = javaClass.hashCode() + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.isNewUser) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.providerId) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.username) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.authorizationCode) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.profile) + return result + } +} + +/** Generated class from Pigeon that represents data sent in messages. */ +data class InternalAuthCredential( + val providerId: String, + val signInMethod: String, + val nativeId: Long, + val accessToken: String? = null +) { + companion object { + fun fromList(pigeonVar_list: List): InternalAuthCredential { + val providerId = pigeonVar_list[0] as String + val signInMethod = pigeonVar_list[1] as String + val nativeId = pigeonVar_list[2] as Long + val accessToken = pigeonVar_list[3] as String? + return InternalAuthCredential(providerId, signInMethod, nativeId, accessToken) + } + } + + fun toList(): List { + return listOf( + providerId, + signInMethod, + nativeId, + accessToken, + ) + } + + override fun equals(other: Any?): Boolean { + if (other == null || other.javaClass != javaClass) { + return false + } + if (this === other) { + return true + } + val other = other as InternalAuthCredential + return GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals(this.providerId, other.providerId) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals(this.signInMethod, other.signInMethod) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals(this.nativeId, other.nativeId) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals(this.accessToken, other.accessToken) + } + + override fun hashCode(): Int { + var result = javaClass.hashCode() + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.providerId) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.signInMethod) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.nativeId) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.accessToken) + return result + } +} + +/** Generated class from Pigeon that represents data sent in messages. */ +data class InternalUserInfo( + val uid: String, + val email: String? = null, + val displayName: String? = null, + val photoUrl: String? = null, + val phoneNumber: String? = null, + val isAnonymous: Boolean, + val isEmailVerified: Boolean, + val providerId: String? = null, + val tenantId: String? = null, + val refreshToken: String? = null, + val creationTimestamp: Long? = null, + val lastSignInTimestamp: Long? = null +) { + companion object { + fun fromList(pigeonVar_list: List): InternalUserInfo { + val uid = pigeonVar_list[0] as String + val email = pigeonVar_list[1] as String? + val displayName = pigeonVar_list[2] as String? + val photoUrl = pigeonVar_list[3] as String? + val phoneNumber = pigeonVar_list[4] as String? + val isAnonymous = pigeonVar_list[5] as Boolean + val isEmailVerified = pigeonVar_list[6] as Boolean + val providerId = pigeonVar_list[7] as String? + val tenantId = pigeonVar_list[8] as String? + val refreshToken = pigeonVar_list[9] as String? + val creationTimestamp = pigeonVar_list[10] as Long? + val lastSignInTimestamp = pigeonVar_list[11] as Long? + return InternalUserInfo( + uid, + email, + displayName, + photoUrl, + phoneNumber, + isAnonymous, + isEmailVerified, + providerId, + tenantId, + refreshToken, + creationTimestamp, + lastSignInTimestamp) + } + } + + fun toList(): List { + return listOf( + uid, + email, + displayName, + photoUrl, + phoneNumber, + isAnonymous, + isEmailVerified, + providerId, + tenantId, + refreshToken, + creationTimestamp, + lastSignInTimestamp, + ) + } + + override fun equals(other: Any?): Boolean { + if (other == null || other.javaClass != javaClass) { + return false + } + if (this === other) { + return true + } + val other = other as InternalUserInfo + return GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals(this.uid, other.uid) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals(this.email, other.email) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals(this.displayName, other.displayName) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals(this.photoUrl, other.photoUrl) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals(this.phoneNumber, other.phoneNumber) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals(this.isAnonymous, other.isAnonymous) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals( + this.isEmailVerified, other.isEmailVerified) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals(this.providerId, other.providerId) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals(this.tenantId, other.tenantId) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals(this.refreshToken, other.refreshToken) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals( + this.creationTimestamp, other.creationTimestamp) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals( + this.lastSignInTimestamp, other.lastSignInTimestamp) + } + + override fun hashCode(): Int { + var result = javaClass.hashCode() + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.uid) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.email) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.displayName) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.photoUrl) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.phoneNumber) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.isAnonymous) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.isEmailVerified) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.providerId) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.tenantId) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.refreshToken) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.creationTimestamp) + result = + 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.lastSignInTimestamp) + return result + } +} + +/** Generated class from Pigeon that represents data sent in messages. */ +data class InternalUserDetails( + val userInfo: InternalUserInfo, + val providerData: List?> +) { + companion object { + fun fromList(pigeonVar_list: List): InternalUserDetails { + val userInfo = pigeonVar_list[0] as InternalUserInfo + val providerData = pigeonVar_list[1] as List?> + return InternalUserDetails(userInfo, providerData) + } + } + + fun toList(): List { + return listOf( + userInfo, + providerData, + ) + } + + override fun equals(other: Any?): Boolean { + if (other == null || other.javaClass != javaClass) { + return false + } + if (this === other) { + return true + } + val other = other as InternalUserDetails + return GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals(this.userInfo, other.userInfo) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals(this.providerData, other.providerData) + } + + override fun hashCode(): Int { + var result = javaClass.hashCode() + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.userInfo) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.providerData) + return result + } +} + +/** Generated class from Pigeon that represents data sent in messages. */ +data class InternalUserCredential( + val user: InternalUserDetails? = null, + val additionalUserInfo: InternalAdditionalUserInfo? = null, + val credential: InternalAuthCredential? = null +) { + companion object { + fun fromList(pigeonVar_list: List): InternalUserCredential { + val user = pigeonVar_list[0] as InternalUserDetails? + val additionalUserInfo = pigeonVar_list[1] as InternalAdditionalUserInfo? + val credential = pigeonVar_list[2] as InternalAuthCredential? + return InternalUserCredential(user, additionalUserInfo, credential) + } + } + + fun toList(): List { + return listOf( + user, + additionalUserInfo, + credential, + ) + } + + override fun equals(other: Any?): Boolean { + if (other == null || other.javaClass != javaClass) { + return false + } + if (this === other) { + return true + } + val other = other as InternalUserCredential + return GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals(this.user, other.user) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals( + this.additionalUserInfo, other.additionalUserInfo) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals(this.credential, other.credential) + } + + override fun hashCode(): Int { + var result = javaClass.hashCode() + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.user) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.additionalUserInfo) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.credential) + return result + } +} + +/** Generated class from Pigeon that represents data sent in messages. */ +data class InternalAuthCredentialInput( + val providerId: String, + val signInMethod: String, + val token: String? = null, + val accessToken: String? = null +) { + companion object { + fun fromList(pigeonVar_list: List): InternalAuthCredentialInput { + val providerId = pigeonVar_list[0] as String + val signInMethod = pigeonVar_list[1] as String + val token = pigeonVar_list[2] as String? + val accessToken = pigeonVar_list[3] as String? + return InternalAuthCredentialInput(providerId, signInMethod, token, accessToken) + } + } + + fun toList(): List { + return listOf( + providerId, + signInMethod, + token, + accessToken, + ) + } + + override fun equals(other: Any?): Boolean { + if (other == null || other.javaClass != javaClass) { + return false + } + if (this === other) { + return true + } + val other = other as InternalAuthCredentialInput + return GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals(this.providerId, other.providerId) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals(this.signInMethod, other.signInMethod) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals(this.token, other.token) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals(this.accessToken, other.accessToken) + } + + override fun hashCode(): Int { + var result = javaClass.hashCode() + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.providerId) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.signInMethod) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.token) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.accessToken) + return result + } +} + +/** Generated class from Pigeon that represents data sent in messages. */ +data class InternalActionCodeSettings( + val url: String, + val dynamicLinkDomain: String? = null, + val handleCodeInApp: Boolean, + val iOSBundleId: String? = null, + val androidPackageName: String? = null, + val androidInstallApp: Boolean, + val androidMinimumVersion: String? = null, + val linkDomain: String? = null +) { + companion object { + fun fromList(pigeonVar_list: List): InternalActionCodeSettings { + val url = pigeonVar_list[0] as String + val dynamicLinkDomain = pigeonVar_list[1] as String? + val handleCodeInApp = pigeonVar_list[2] as Boolean + val iOSBundleId = pigeonVar_list[3] as String? + val androidPackageName = pigeonVar_list[4] as String? + val androidInstallApp = pigeonVar_list[5] as Boolean + val androidMinimumVersion = pigeonVar_list[6] as String? + val linkDomain = pigeonVar_list[7] as String? + return InternalActionCodeSettings( + url, + dynamicLinkDomain, + handleCodeInApp, + iOSBundleId, + androidPackageName, + androidInstallApp, + androidMinimumVersion, + linkDomain) + } + } + + fun toList(): List { + return listOf( + url, + dynamicLinkDomain, + handleCodeInApp, + iOSBundleId, + androidPackageName, + androidInstallApp, + androidMinimumVersion, + linkDomain, + ) + } + + override fun equals(other: Any?): Boolean { + if (other == null || other.javaClass != javaClass) { + return false + } + if (this === other) { + return true + } + val other = other as InternalActionCodeSettings + return GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals(this.url, other.url) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals( + this.dynamicLinkDomain, other.dynamicLinkDomain) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals( + this.handleCodeInApp, other.handleCodeInApp) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals(this.iOSBundleId, other.iOSBundleId) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals( + this.androidPackageName, other.androidPackageName) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals( + this.androidInstallApp, other.androidInstallApp) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals( + this.androidMinimumVersion, other.androidMinimumVersion) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals(this.linkDomain, other.linkDomain) + } + + override fun hashCode(): Int { + var result = javaClass.hashCode() + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.url) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.dynamicLinkDomain) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.handleCodeInApp) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.iOSBundleId) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.androidPackageName) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.androidInstallApp) + result = + 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.androidMinimumVersion) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.linkDomain) + return result + } +} + +/** Generated class from Pigeon that represents data sent in messages. */ +data class InternalFirebaseAuthSettings( + val appVerificationDisabledForTesting: Boolean, + val userAccessGroup: String? = null, + val phoneNumber: String? = null, + val smsCode: String? = null, + val forceRecaptchaFlow: Boolean? = null +) { + companion object { + fun fromList(pigeonVar_list: List): InternalFirebaseAuthSettings { + val appVerificationDisabledForTesting = pigeonVar_list[0] as Boolean + val userAccessGroup = pigeonVar_list[1] as String? + val phoneNumber = pigeonVar_list[2] as String? + val smsCode = pigeonVar_list[3] as String? + val forceRecaptchaFlow = pigeonVar_list[4] as Boolean? + return InternalFirebaseAuthSettings( + appVerificationDisabledForTesting, + userAccessGroup, + phoneNumber, + smsCode, + forceRecaptchaFlow) + } + } + + fun toList(): List { + return listOf( + appVerificationDisabledForTesting, + userAccessGroup, + phoneNumber, + smsCode, + forceRecaptchaFlow, + ) + } + + override fun equals(other: Any?): Boolean { + if (other == null || other.javaClass != javaClass) { + return false + } + if (this === other) { + return true + } + val other = other as InternalFirebaseAuthSettings + return GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals( + this.appVerificationDisabledForTesting, other.appVerificationDisabledForTesting) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals( + this.userAccessGroup, other.userAccessGroup) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals(this.phoneNumber, other.phoneNumber) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals(this.smsCode, other.smsCode) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals( + this.forceRecaptchaFlow, other.forceRecaptchaFlow) + } + + override fun hashCode(): Int { + var result = javaClass.hashCode() + result = + 31 * result + + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.appVerificationDisabledForTesting) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.userAccessGroup) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.phoneNumber) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.smsCode) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.forceRecaptchaFlow) + return result + } +} + +/** Generated class from Pigeon that represents data sent in messages. */ +data class InternalSignInProvider( + val providerId: String, + val scopes: List? = null, + val customParameters: Map? = null +) { + companion object { + fun fromList(pigeonVar_list: List): InternalSignInProvider { + val providerId = pigeonVar_list[0] as String + val scopes = pigeonVar_list[1] as List? + val customParameters = pigeonVar_list[2] as Map? + return InternalSignInProvider(providerId, scopes, customParameters) + } + } + + fun toList(): List { + return listOf( + providerId, + scopes, + customParameters, + ) + } + + override fun equals(other: Any?): Boolean { + if (other == null || other.javaClass != javaClass) { + return false + } + if (this === other) { + return true + } + val other = other as InternalSignInProvider + return GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals(this.providerId, other.providerId) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals(this.scopes, other.scopes) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals( + this.customParameters, other.customParameters) + } + + override fun hashCode(): Int { + var result = javaClass.hashCode() + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.providerId) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.scopes) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.customParameters) + return result + } +} + +/** Generated class from Pigeon that represents data sent in messages. */ +data class InternalVerifyPhoneNumberRequest( + val phoneNumber: String? = null, + val timeout: Long, + val forceResendingToken: Long? = null, + val autoRetrievedSmsCodeForTesting: String? = null, + val multiFactorInfoId: String? = null, + val multiFactorSessionId: String? = null +) { + companion object { + fun fromList(pigeonVar_list: List): InternalVerifyPhoneNumberRequest { + val phoneNumber = pigeonVar_list[0] as String? + val timeout = pigeonVar_list[1] as Long + val forceResendingToken = pigeonVar_list[2] as Long? + val autoRetrievedSmsCodeForTesting = pigeonVar_list[3] as String? + val multiFactorInfoId = pigeonVar_list[4] as String? + val multiFactorSessionId = pigeonVar_list[5] as String? + return InternalVerifyPhoneNumberRequest( + phoneNumber, + timeout, + forceResendingToken, + autoRetrievedSmsCodeForTesting, + multiFactorInfoId, + multiFactorSessionId) + } + } + + fun toList(): List { + return listOf( + phoneNumber, + timeout, + forceResendingToken, + autoRetrievedSmsCodeForTesting, + multiFactorInfoId, + multiFactorSessionId, + ) + } + + override fun equals(other: Any?): Boolean { + if (other == null || other.javaClass != javaClass) { + return false + } + if (this === other) { + return true + } + val other = other as InternalVerifyPhoneNumberRequest + return GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals( + this.phoneNumber, other.phoneNumber) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals(this.timeout, other.timeout) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals( + this.forceResendingToken, other.forceResendingToken) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals( + this.autoRetrievedSmsCodeForTesting, other.autoRetrievedSmsCodeForTesting) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals( + this.multiFactorInfoId, other.multiFactorInfoId) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals( + this.multiFactorSessionId, other.multiFactorSessionId) + } + + override fun hashCode(): Int { + var result = javaClass.hashCode() + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.phoneNumber) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.timeout) + result = + 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.forceResendingToken) + result = + 31 * result + + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.autoRetrievedSmsCodeForTesting) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.multiFactorInfoId) + result = + 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.multiFactorSessionId) + return result + } +} + +/** Generated class from Pigeon that represents data sent in messages. */ +data class InternalIdTokenResult( + val token: String? = null, + val expirationTimestamp: Long? = null, + val authTimestamp: Long? = null, + val issuedAtTimestamp: Long? = null, + val signInProvider: String? = null, + val claims: Map? = null, + val signInSecondFactor: String? = null +) { + companion object { + fun fromList(pigeonVar_list: List): InternalIdTokenResult { + val token = pigeonVar_list[0] as String? + val expirationTimestamp = pigeonVar_list[1] as Long? + val authTimestamp = pigeonVar_list[2] as Long? + val issuedAtTimestamp = pigeonVar_list[3] as Long? + val signInProvider = pigeonVar_list[4] as String? + val claims = pigeonVar_list[5] as Map? + val signInSecondFactor = pigeonVar_list[6] as String? + return InternalIdTokenResult( + token, + expirationTimestamp, + authTimestamp, + issuedAtTimestamp, + signInProvider, + claims, + signInSecondFactor) + } + } + + fun toList(): List { + return listOf( + token, + expirationTimestamp, + authTimestamp, + issuedAtTimestamp, + signInProvider, + claims, + signInSecondFactor, + ) + } + + override fun equals(other: Any?): Boolean { + if (other == null || other.javaClass != javaClass) { + return false + } + if (this === other) { + return true + } + val other = other as InternalIdTokenResult + return GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals(this.token, other.token) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals( + this.expirationTimestamp, other.expirationTimestamp) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals( + this.authTimestamp, other.authTimestamp) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals( + this.issuedAtTimestamp, other.issuedAtTimestamp) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals( + this.signInProvider, other.signInProvider) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals(this.claims, other.claims) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals( + this.signInSecondFactor, other.signInSecondFactor) + } + + override fun hashCode(): Int { + var result = javaClass.hashCode() + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.token) + result = + 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.expirationTimestamp) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.authTimestamp) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.issuedAtTimestamp) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.signInProvider) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.claims) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.signInSecondFactor) + return result + } +} + +/** Generated class from Pigeon that represents data sent in messages. */ +data class InternalUserProfile( + val displayName: String? = null, + val photoUrl: String? = null, + val displayNameChanged: Boolean, + val photoUrlChanged: Boolean +) { + companion object { + fun fromList(pigeonVar_list: List): InternalUserProfile { + val displayName = pigeonVar_list[0] as String? + val photoUrl = pigeonVar_list[1] as String? + val displayNameChanged = pigeonVar_list[2] as Boolean + val photoUrlChanged = pigeonVar_list[3] as Boolean + return InternalUserProfile(displayName, photoUrl, displayNameChanged, photoUrlChanged) + } + } + + fun toList(): List { + return listOf( + displayName, + photoUrl, + displayNameChanged, + photoUrlChanged, + ) + } + + override fun equals(other: Any?): Boolean { + if (other == null || other.javaClass != javaClass) { + return false + } + if (this === other) { + return true + } + val other = other as InternalUserProfile + return GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals( + this.displayName, other.displayName) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals(this.photoUrl, other.photoUrl) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals( + this.displayNameChanged, other.displayNameChanged) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals( + this.photoUrlChanged, other.photoUrlChanged) + } + + override fun hashCode(): Int { + var result = javaClass.hashCode() + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.displayName) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.photoUrl) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.displayNameChanged) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.photoUrlChanged) + return result + } +} + +/** Generated class from Pigeon that represents data sent in messages. */ +data class InternalTotpSecret( + val codeIntervalSeconds: Long? = null, + val codeLength: Long? = null, + val enrollmentCompletionDeadline: Long? = null, + val hashingAlgorithm: String? = null, + val secretKey: String +) { + companion object { + fun fromList(pigeonVar_list: List): InternalTotpSecret { + val codeIntervalSeconds = pigeonVar_list[0] as Long? + val codeLength = pigeonVar_list[1] as Long? + val enrollmentCompletionDeadline = pigeonVar_list[2] as Long? + val hashingAlgorithm = pigeonVar_list[3] as String? + val secretKey = pigeonVar_list[4] as String + return InternalTotpSecret( + codeIntervalSeconds, + codeLength, + enrollmentCompletionDeadline, + hashingAlgorithm, + secretKey) + } + } + + fun toList(): List { + return listOf( + codeIntervalSeconds, + codeLength, + enrollmentCompletionDeadline, + hashingAlgorithm, + secretKey, + ) + } + + override fun equals(other: Any?): Boolean { + if (other == null || other.javaClass != javaClass) { + return false + } + if (this === other) { + return true + } + val other = other as InternalTotpSecret + return GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals( + this.codeIntervalSeconds, other.codeIntervalSeconds) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals(this.codeLength, other.codeLength) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals( + this.enrollmentCompletionDeadline, other.enrollmentCompletionDeadline) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals( + this.hashingAlgorithm, other.hashingAlgorithm) && + GeneratedAndroidFirebaseAuthPigeonUtils.deepEquals(this.secretKey, other.secretKey) + } + + override fun hashCode(): Int { + var result = javaClass.hashCode() + result = + 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.codeIntervalSeconds) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.codeLength) + result = + 31 * result + + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.enrollmentCompletionDeadline) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.hashingAlgorithm) + result = 31 * result + GeneratedAndroidFirebaseAuthPigeonUtils.deepHash(this.secretKey) + return result + } +} + +private open class GeneratedAndroidFirebaseAuthPigeonCodec : StandardMessageCodec() { + override fun readValueOfType(type: Byte, buffer: ByteBuffer): Any? { + return when (type) { + 129.toByte() -> { + return (readValue(buffer) as Long?)?.let { ActionCodeInfoOperation.ofRaw(it.toInt()) } + } + 130.toByte() -> { + return (readValue(buffer) as? List)?.let { InternalMultiFactorSession.fromList(it) } + } + 131.toByte() -> { + return (readValue(buffer) as? List)?.let { + InternalPhoneMultiFactorAssertion.fromList(it) + } + } + 132.toByte() -> { + return (readValue(buffer) as? List)?.let { InternalMultiFactorInfo.fromList(it) } + } + 133.toByte() -> { + return (readValue(buffer) as? List)?.let { AuthPigeonFirebaseApp.fromList(it) } + } + 134.toByte() -> { + return (readValue(buffer) as? List)?.let { InternalActionCodeInfoData.fromList(it) } + } + 135.toByte() -> { + return (readValue(buffer) as? List)?.let { InternalActionCodeInfo.fromList(it) } + } + 136.toByte() -> { + return (readValue(buffer) as? List)?.let { InternalAdditionalUserInfo.fromList(it) } + } + 137.toByte() -> { + return (readValue(buffer) as? List)?.let { InternalAuthCredential.fromList(it) } + } + 138.toByte() -> { + return (readValue(buffer) as? List)?.let { InternalUserInfo.fromList(it) } + } + 139.toByte() -> { + return (readValue(buffer) as? List)?.let { InternalUserDetails.fromList(it) } + } + 140.toByte() -> { + return (readValue(buffer) as? List)?.let { InternalUserCredential.fromList(it) } + } + 141.toByte() -> { + return (readValue(buffer) as? List)?.let { InternalAuthCredentialInput.fromList(it) } + } + 142.toByte() -> { + return (readValue(buffer) as? List)?.let { InternalActionCodeSettings.fromList(it) } + } + 143.toByte() -> { + return (readValue(buffer) as? List)?.let { InternalFirebaseAuthSettings.fromList(it) } + } + 144.toByte() -> { + return (readValue(buffer) as? List)?.let { InternalSignInProvider.fromList(it) } + } + 145.toByte() -> { + return (readValue(buffer) as? List)?.let { + InternalVerifyPhoneNumberRequest.fromList(it) + } + } + 146.toByte() -> { + return (readValue(buffer) as? List)?.let { InternalIdTokenResult.fromList(it) } + } + 147.toByte() -> { + return (readValue(buffer) as? List)?.let { InternalUserProfile.fromList(it) } + } + 148.toByte() -> { + return (readValue(buffer) as? List)?.let { InternalTotpSecret.fromList(it) } + } + else -> super.readValueOfType(type, buffer) + } + } + + override fun writeValue(stream: ByteArrayOutputStream, value: Any?) { + when (value) { + is ActionCodeInfoOperation -> { + stream.write(129) + writeValue(stream, value.raw.toLong()) + } + is InternalMultiFactorSession -> { + stream.write(130) + writeValue(stream, value.toList()) + } + is InternalPhoneMultiFactorAssertion -> { + stream.write(131) + writeValue(stream, value.toList()) + } + is InternalMultiFactorInfo -> { + stream.write(132) + writeValue(stream, value.toList()) + } + is AuthPigeonFirebaseApp -> { + stream.write(133) + writeValue(stream, value.toList()) + } + is InternalActionCodeInfoData -> { + stream.write(134) + writeValue(stream, value.toList()) + } + is InternalActionCodeInfo -> { + stream.write(135) + writeValue(stream, value.toList()) + } + is InternalAdditionalUserInfo -> { + stream.write(136) + writeValue(stream, value.toList()) + } + is InternalAuthCredential -> { + stream.write(137) + writeValue(stream, value.toList()) + } + is InternalUserInfo -> { + stream.write(138) + writeValue(stream, value.toList()) + } + is InternalUserDetails -> { + stream.write(139) + writeValue(stream, value.toList()) + } + is InternalUserCredential -> { + stream.write(140) + writeValue(stream, value.toList()) + } + is InternalAuthCredentialInput -> { + stream.write(141) + writeValue(stream, value.toList()) + } + is InternalActionCodeSettings -> { + stream.write(142) + writeValue(stream, value.toList()) + } + is InternalFirebaseAuthSettings -> { + stream.write(143) + writeValue(stream, value.toList()) + } + is InternalSignInProvider -> { + stream.write(144) + writeValue(stream, value.toList()) + } + is InternalVerifyPhoneNumberRequest -> { + stream.write(145) + writeValue(stream, value.toList()) + } + is InternalIdTokenResult -> { + stream.write(146) + writeValue(stream, value.toList()) + } + is InternalUserProfile -> { + stream.write(147) + writeValue(stream, value.toList()) + } + is InternalTotpSecret -> { + stream.write(148) + writeValue(stream, value.toList()) + } + else -> super.writeValue(stream, value) + } + } +} + +/** Generated interface from Pigeon that represents a handler of messages from Flutter. */ +interface FirebaseAuthHostApi { + fun registerIdTokenListener(app: AuthPigeonFirebaseApp, callback: (Result) -> Unit) + + fun registerAuthStateListener(app: AuthPigeonFirebaseApp, callback: (Result) -> Unit) + + fun useEmulator( + app: AuthPigeonFirebaseApp, + host: String, + port: Long, + callback: (Result) -> Unit + ) + + fun applyActionCode(app: AuthPigeonFirebaseApp, code: String, callback: (Result) -> Unit) + + fun checkActionCode( + app: AuthPigeonFirebaseApp, + code: String, + callback: (Result) -> Unit + ) + + fun confirmPasswordReset( + app: AuthPigeonFirebaseApp, + code: String, + newPassword: String, + callback: (Result) -> Unit + ) + + fun createUserWithEmailAndPassword( + app: AuthPigeonFirebaseApp, + email: String, + password: String, + callback: (Result) -> Unit + ) + + fun signInAnonymously( + app: AuthPigeonFirebaseApp, + callback: (Result) -> Unit + ) + + fun signInWithCredential( + app: AuthPigeonFirebaseApp, + input: Map, + callback: (Result) -> Unit + ) + + fun signInWithCustomToken( + app: AuthPigeonFirebaseApp, + token: String, + callback: (Result) -> Unit + ) + + fun signInWithEmailAndPassword( + app: AuthPigeonFirebaseApp, + email: String, + password: String, + callback: (Result) -> Unit + ) + + fun signInWithEmailLink( + app: AuthPigeonFirebaseApp, + email: String, + emailLink: String, + callback: (Result) -> Unit + ) + + fun signInWithProvider( + app: AuthPigeonFirebaseApp, + signInProvider: InternalSignInProvider, + callback: (Result) -> Unit + ) + + fun signOut(app: AuthPigeonFirebaseApp, callback: (Result) -> Unit) + + fun fetchSignInMethodsForEmail( + app: AuthPigeonFirebaseApp, + email: String, + callback: (Result>) -> Unit + ) + + fun sendPasswordResetEmail( + app: AuthPigeonFirebaseApp, + email: String, + actionCodeSettings: InternalActionCodeSettings?, + callback: (Result) -> Unit + ) + + fun sendSignInLinkToEmail( + app: AuthPigeonFirebaseApp, + email: String, + actionCodeSettings: InternalActionCodeSettings, + callback: (Result) -> Unit + ) + + fun setLanguageCode( + app: AuthPigeonFirebaseApp, + languageCode: String?, + callback: (Result) -> Unit + ) + + fun setSettings( + app: AuthPigeonFirebaseApp, + settings: InternalFirebaseAuthSettings, + callback: (Result) -> Unit + ) + + fun verifyPasswordResetCode( + app: AuthPigeonFirebaseApp, + code: String, + callback: (Result) -> Unit + ) + + fun verifyPhoneNumber( + app: AuthPigeonFirebaseApp, + request: InternalVerifyPhoneNumberRequest, + callback: (Result) -> Unit + ) + + fun revokeTokenWithAuthorizationCode( + app: AuthPigeonFirebaseApp, + authorizationCode: String, + callback: (Result) -> Unit + ) + + fun revokeAccessToken( + app: AuthPigeonFirebaseApp, + accessToken: String, + callback: (Result) -> Unit + ) + + fun initializeRecaptchaConfig(app: AuthPigeonFirebaseApp, callback: (Result) -> Unit) + + companion object { + /** The codec used by FirebaseAuthHostApi. */ + val codec: MessageCodec by lazy { GeneratedAndroidFirebaseAuthPigeonCodec() } + /** + * Sets up an instance of `FirebaseAuthHostApi` to handle messages through the + * `binaryMessenger`. + */ + @JvmOverloads + fun setUp( + binaryMessenger: BinaryMessenger, + api: FirebaseAuthHostApi?, + messageChannelSuffix: String = "" + ) { + val separatedMessageChannelSuffix = + if (messageChannelSuffix.isNotEmpty()) ".$messageChannelSuffix" else "" + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.registerIdTokenListener$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val appArg = args[0] as AuthPigeonFirebaseApp + api.registerIdTokenListener(appArg) { result: Result -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapError(error)) + } else { + val data = result.getOrNull() + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapResult(data)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.registerAuthStateListener$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val appArg = args[0] as AuthPigeonFirebaseApp + api.registerAuthStateListener(appArg) { result: Result -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapError(error)) + } else { + val data = result.getOrNull() + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapResult(data)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.useEmulator$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val appArg = args[0] as AuthPigeonFirebaseApp + val hostArg = args[1] as String + val portArg = args[2] as Long + api.useEmulator(appArg, hostArg, portArg) { result: Result -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapError(error)) + } else { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapResult(null)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.applyActionCode$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val appArg = args[0] as AuthPigeonFirebaseApp + val codeArg = args[1] as String + api.applyActionCode(appArg, codeArg) { result: Result -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapError(error)) + } else { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapResult(null)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.checkActionCode$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val appArg = args[0] as AuthPigeonFirebaseApp + val codeArg = args[1] as String + api.checkActionCode(appArg, codeArg) { result: Result -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapError(error)) + } else { + val data = result.getOrNull() + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapResult(data)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.confirmPasswordReset$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val appArg = args[0] as AuthPigeonFirebaseApp + val codeArg = args[1] as String + val newPasswordArg = args[2] as String + api.confirmPasswordReset(appArg, codeArg, newPasswordArg) { result: Result -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapError(error)) + } else { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapResult(null)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.createUserWithEmailAndPassword$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val appArg = args[0] as AuthPigeonFirebaseApp + val emailArg = args[1] as String + val passwordArg = args[2] as String + api.createUserWithEmailAndPassword(appArg, emailArg, passwordArg) { + result: Result -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapError(error)) + } else { + val data = result.getOrNull() + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapResult(data)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.signInAnonymously$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val appArg = args[0] as AuthPigeonFirebaseApp + api.signInAnonymously(appArg) { result: Result -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapError(error)) + } else { + val data = result.getOrNull() + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapResult(data)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.signInWithCredential$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val appArg = args[0] as AuthPigeonFirebaseApp + val inputArg = args[1] as Map + api.signInWithCredential(appArg, inputArg) { result: Result -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapError(error)) + } else { + val data = result.getOrNull() + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapResult(data)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.signInWithCustomToken$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val appArg = args[0] as AuthPigeonFirebaseApp + val tokenArg = args[1] as String + api.signInWithCustomToken(appArg, tokenArg) { result: Result -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapError(error)) + } else { + val data = result.getOrNull() + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapResult(data)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.signInWithEmailAndPassword$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val appArg = args[0] as AuthPigeonFirebaseApp + val emailArg = args[1] as String + val passwordArg = args[2] as String + api.signInWithEmailAndPassword(appArg, emailArg, passwordArg) { + result: Result -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapError(error)) + } else { + val data = result.getOrNull() + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapResult(data)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.signInWithEmailLink$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val appArg = args[0] as AuthPigeonFirebaseApp + val emailArg = args[1] as String + val emailLinkArg = args[2] as String + api.signInWithEmailLink(appArg, emailArg, emailLinkArg) { + result: Result -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapError(error)) + } else { + val data = result.getOrNull() + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapResult(data)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.signInWithProvider$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val appArg = args[0] as AuthPigeonFirebaseApp + val signInProviderArg = args[1] as InternalSignInProvider + api.signInWithProvider(appArg, signInProviderArg) { + result: Result -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapError(error)) + } else { + val data = result.getOrNull() + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapResult(data)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.signOut$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val appArg = args[0] as AuthPigeonFirebaseApp + api.signOut(appArg) { result: Result -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapError(error)) + } else { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapResult(null)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.fetchSignInMethodsForEmail$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val appArg = args[0] as AuthPigeonFirebaseApp + val emailArg = args[1] as String + api.fetchSignInMethodsForEmail(appArg, emailArg) { result: Result> -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapError(error)) + } else { + val data = result.getOrNull() + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapResult(data)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.sendPasswordResetEmail$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val appArg = args[0] as AuthPigeonFirebaseApp + val emailArg = args[1] as String + val actionCodeSettingsArg = args[2] as InternalActionCodeSettings? + api.sendPasswordResetEmail(appArg, emailArg, actionCodeSettingsArg) { + result: Result -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapError(error)) + } else { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapResult(null)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.sendSignInLinkToEmail$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val appArg = args[0] as AuthPigeonFirebaseApp + val emailArg = args[1] as String + val actionCodeSettingsArg = args[2] as InternalActionCodeSettings + api.sendSignInLinkToEmail(appArg, emailArg, actionCodeSettingsArg) { + result: Result -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapError(error)) + } else { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapResult(null)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.setLanguageCode$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val appArg = args[0] as AuthPigeonFirebaseApp + val languageCodeArg = args[1] as String? + api.setLanguageCode(appArg, languageCodeArg) { result: Result -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapError(error)) + } else { + val data = result.getOrNull() + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapResult(data)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.setSettings$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val appArg = args[0] as AuthPigeonFirebaseApp + val settingsArg = args[1] as InternalFirebaseAuthSettings + api.setSettings(appArg, settingsArg) { result: Result -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapError(error)) + } else { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapResult(null)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.verifyPasswordResetCode$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val appArg = args[0] as AuthPigeonFirebaseApp + val codeArg = args[1] as String + api.verifyPasswordResetCode(appArg, codeArg) { result: Result -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapError(error)) + } else { + val data = result.getOrNull() + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapResult(data)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.verifyPhoneNumber$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val appArg = args[0] as AuthPigeonFirebaseApp + val requestArg = args[1] as InternalVerifyPhoneNumberRequest + api.verifyPhoneNumber(appArg, requestArg) { result: Result -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapError(error)) + } else { + val data = result.getOrNull() + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapResult(data)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.revokeTokenWithAuthorizationCode$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val appArg = args[0] as AuthPigeonFirebaseApp + val authorizationCodeArg = args[1] as String + api.revokeTokenWithAuthorizationCode(appArg, authorizationCodeArg) { + result: Result -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapError(error)) + } else { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapResult(null)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.revokeAccessToken$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val appArg = args[0] as AuthPigeonFirebaseApp + val accessTokenArg = args[1] as String + api.revokeAccessToken(appArg, accessTokenArg) { result: Result -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapError(error)) + } else { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapResult(null)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.initializeRecaptchaConfig$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val appArg = args[0] as AuthPigeonFirebaseApp + api.initializeRecaptchaConfig(appArg) { result: Result -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapError(error)) + } else { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapResult(null)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + } + } +} +/** Generated interface from Pigeon that represents a handler of messages from Flutter. */ +interface FirebaseAuthUserHostApi { + fun delete(app: AuthPigeonFirebaseApp, callback: (Result) -> Unit) + + fun getIdToken( + app: AuthPigeonFirebaseApp, + forceRefresh: Boolean, + callback: (Result) -> Unit + ) + + fun linkWithCredential( + app: AuthPigeonFirebaseApp, + input: Map, + callback: (Result) -> Unit + ) + + fun linkWithProvider( + app: AuthPigeonFirebaseApp, + signInProvider: InternalSignInProvider, + callback: (Result) -> Unit + ) + + fun reauthenticateWithCredential( + app: AuthPigeonFirebaseApp, + input: Map, + callback: (Result) -> Unit + ) + + fun reauthenticateWithProvider( + app: AuthPigeonFirebaseApp, + signInProvider: InternalSignInProvider, + callback: (Result) -> Unit + ) + + fun reload(app: AuthPigeonFirebaseApp, callback: (Result) -> Unit) + + fun sendEmailVerification( + app: AuthPigeonFirebaseApp, + actionCodeSettings: InternalActionCodeSettings?, + callback: (Result) -> Unit + ) + + fun unlink( + app: AuthPigeonFirebaseApp, + providerId: String, + callback: (Result) -> Unit + ) + + fun updateEmail( + app: AuthPigeonFirebaseApp, + newEmail: String, + callback: (Result) -> Unit + ) + + fun updatePassword( + app: AuthPigeonFirebaseApp, + newPassword: String, + callback: (Result) -> Unit + ) + + fun updatePhoneNumber( + app: AuthPigeonFirebaseApp, + input: Map, + callback: (Result) -> Unit + ) + + fun updateProfile( + app: AuthPigeonFirebaseApp, + profile: InternalUserProfile, + callback: (Result) -> Unit + ) + + fun verifyBeforeUpdateEmail( + app: AuthPigeonFirebaseApp, + newEmail: String, + actionCodeSettings: InternalActionCodeSettings?, + callback: (Result) -> Unit + ) + + companion object { + /** The codec used by FirebaseAuthUserHostApi. */ + val codec: MessageCodec by lazy { GeneratedAndroidFirebaseAuthPigeonCodec() } + /** + * Sets up an instance of `FirebaseAuthUserHostApi` to handle messages through the + * `binaryMessenger`. + */ + @JvmOverloads + fun setUp( + binaryMessenger: BinaryMessenger, + api: FirebaseAuthUserHostApi?, + messageChannelSuffix: String = "" + ) { + val separatedMessageChannelSuffix = + if (messageChannelSuffix.isNotEmpty()) ".$messageChannelSuffix" else "" + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.delete$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val appArg = args[0] as AuthPigeonFirebaseApp + api.delete(appArg) { result: Result -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapError(error)) + } else { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapResult(null)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.getIdToken$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val appArg = args[0] as AuthPigeonFirebaseApp + val forceRefreshArg = args[1] as Boolean + api.getIdToken(appArg, forceRefreshArg) { result: Result -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapError(error)) + } else { + val data = result.getOrNull() + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapResult(data)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.linkWithCredential$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val appArg = args[0] as AuthPigeonFirebaseApp + val inputArg = args[1] as Map + api.linkWithCredential(appArg, inputArg) { result: Result -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapError(error)) + } else { + val data = result.getOrNull() + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapResult(data)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.linkWithProvider$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val appArg = args[0] as AuthPigeonFirebaseApp + val signInProviderArg = args[1] as InternalSignInProvider + api.linkWithProvider(appArg, signInProviderArg) { result: Result + -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapError(error)) + } else { + val data = result.getOrNull() + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapResult(data)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.reauthenticateWithCredential$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val appArg = args[0] as AuthPigeonFirebaseApp + val inputArg = args[1] as Map + api.reauthenticateWithCredential(appArg, inputArg) { + result: Result -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapError(error)) + } else { + val data = result.getOrNull() + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapResult(data)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.reauthenticateWithProvider$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val appArg = args[0] as AuthPigeonFirebaseApp + val signInProviderArg = args[1] as InternalSignInProvider + api.reauthenticateWithProvider(appArg, signInProviderArg) { + result: Result -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapError(error)) + } else { + val data = result.getOrNull() + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapResult(data)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.reload$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val appArg = args[0] as AuthPigeonFirebaseApp + api.reload(appArg) { result: Result -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapError(error)) + } else { + val data = result.getOrNull() + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapResult(data)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.sendEmailVerification$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val appArg = args[0] as AuthPigeonFirebaseApp + val actionCodeSettingsArg = args[1] as InternalActionCodeSettings? + api.sendEmailVerification(appArg, actionCodeSettingsArg) { result: Result -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapError(error)) + } else { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapResult(null)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.unlink$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val appArg = args[0] as AuthPigeonFirebaseApp + val providerIdArg = args[1] as String + api.unlink(appArg, providerIdArg) { result: Result -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapError(error)) + } else { + val data = result.getOrNull() + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapResult(data)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.updateEmail$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val appArg = args[0] as AuthPigeonFirebaseApp + val newEmailArg = args[1] as String + api.updateEmail(appArg, newEmailArg) { result: Result -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapError(error)) + } else { + val data = result.getOrNull() + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapResult(data)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.updatePassword$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val appArg = args[0] as AuthPigeonFirebaseApp + val newPasswordArg = args[1] as String + api.updatePassword(appArg, newPasswordArg) { result: Result -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapError(error)) + } else { + val data = result.getOrNull() + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapResult(data)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.updatePhoneNumber$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val appArg = args[0] as AuthPigeonFirebaseApp + val inputArg = args[1] as Map + api.updatePhoneNumber(appArg, inputArg) { result: Result -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapError(error)) + } else { + val data = result.getOrNull() + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapResult(data)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.updateProfile$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val appArg = args[0] as AuthPigeonFirebaseApp + val profileArg = args[1] as InternalUserProfile + api.updateProfile(appArg, profileArg) { result: Result -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapError(error)) + } else { + val data = result.getOrNull() + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapResult(data)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.verifyBeforeUpdateEmail$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val appArg = args[0] as AuthPigeonFirebaseApp + val newEmailArg = args[1] as String + val actionCodeSettingsArg = args[2] as InternalActionCodeSettings? + api.verifyBeforeUpdateEmail(appArg, newEmailArg, actionCodeSettingsArg) { + result: Result -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapError(error)) + } else { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapResult(null)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + } + } +} +/** Generated interface from Pigeon that represents a handler of messages from Flutter. */ +interface MultiFactorUserHostApi { + fun enrollPhone( + app: AuthPigeonFirebaseApp, + assertion: InternalPhoneMultiFactorAssertion, + displayName: String?, + callback: (Result) -> Unit + ) + + fun enrollTotp( + app: AuthPigeonFirebaseApp, + assertionId: String, + displayName: String?, + callback: (Result) -> Unit + ) + + fun getSession(app: AuthPigeonFirebaseApp, callback: (Result) -> Unit) + + fun unenroll(app: AuthPigeonFirebaseApp, factorUid: String, callback: (Result) -> Unit) + + fun getEnrolledFactors( + app: AuthPigeonFirebaseApp, + callback: (Result>) -> Unit + ) + + companion object { + /** The codec used by MultiFactorUserHostApi. */ + val codec: MessageCodec by lazy { GeneratedAndroidFirebaseAuthPigeonCodec() } + /** + * Sets up an instance of `MultiFactorUserHostApi` to handle messages through the + * `binaryMessenger`. + */ + @JvmOverloads + fun setUp( + binaryMessenger: BinaryMessenger, + api: MultiFactorUserHostApi?, + messageChannelSuffix: String = "" + ) { + val separatedMessageChannelSuffix = + if (messageChannelSuffix.isNotEmpty()) ".$messageChannelSuffix" else "" + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.MultiFactorUserHostApi.enrollPhone$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val appArg = args[0] as AuthPigeonFirebaseApp + val assertionArg = args[1] as InternalPhoneMultiFactorAssertion + val displayNameArg = args[2] as String? + api.enrollPhone(appArg, assertionArg, displayNameArg) { result: Result -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapError(error)) + } else { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapResult(null)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.MultiFactorUserHostApi.enrollTotp$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val appArg = args[0] as AuthPigeonFirebaseApp + val assertionIdArg = args[1] as String + val displayNameArg = args[2] as String? + api.enrollTotp(appArg, assertionIdArg, displayNameArg) { result: Result -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapError(error)) + } else { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapResult(null)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.MultiFactorUserHostApi.getSession$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val appArg = args[0] as AuthPigeonFirebaseApp + api.getSession(appArg) { result: Result -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapError(error)) + } else { + val data = result.getOrNull() + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapResult(data)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.MultiFactorUserHostApi.unenroll$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val appArg = args[0] as AuthPigeonFirebaseApp + val factorUidArg = args[1] as String + api.unenroll(appArg, factorUidArg) { result: Result -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapError(error)) + } else { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapResult(null)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.MultiFactorUserHostApi.getEnrolledFactors$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val appArg = args[0] as AuthPigeonFirebaseApp + api.getEnrolledFactors(appArg) { result: Result> -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapError(error)) + } else { + val data = result.getOrNull() + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapResult(data)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + } + } +} +/** Generated interface from Pigeon that represents a handler of messages from Flutter. */ +interface MultiFactoResolverHostApi { + fun resolveSignIn( + resolverId: String, + assertion: InternalPhoneMultiFactorAssertion?, + totpAssertionId: String?, + callback: (Result) -> Unit + ) + + companion object { + /** The codec used by MultiFactoResolverHostApi. */ + val codec: MessageCodec by lazy { GeneratedAndroidFirebaseAuthPigeonCodec() } + /** + * Sets up an instance of `MultiFactoResolverHostApi` to handle messages through the + * `binaryMessenger`. + */ + @JvmOverloads + fun setUp( + binaryMessenger: BinaryMessenger, + api: MultiFactoResolverHostApi?, + messageChannelSuffix: String = "" + ) { + val separatedMessageChannelSuffix = + if (messageChannelSuffix.isNotEmpty()) ".$messageChannelSuffix" else "" + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.MultiFactoResolverHostApi.resolveSignIn$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val resolverIdArg = args[0] as String + val assertionArg = args[1] as InternalPhoneMultiFactorAssertion? + val totpAssertionIdArg = args[2] as String? + api.resolveSignIn(resolverIdArg, assertionArg, totpAssertionIdArg) { + result: Result -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapError(error)) + } else { + val data = result.getOrNull() + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapResult(data)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + } + } +} +/** Generated interface from Pigeon that represents a handler of messages from Flutter. */ +interface MultiFactorTotpHostApi { + fun generateSecret(sessionId: String, callback: (Result) -> Unit) + + fun getAssertionForEnrollment( + secretKey: String, + oneTimePassword: String, + callback: (Result) -> Unit + ) + + fun getAssertionForSignIn( + enrollmentId: String, + oneTimePassword: String, + callback: (Result) -> Unit + ) + + companion object { + /** The codec used by MultiFactorTotpHostApi. */ + val codec: MessageCodec by lazy { GeneratedAndroidFirebaseAuthPigeonCodec() } + /** + * Sets up an instance of `MultiFactorTotpHostApi` to handle messages through the + * `binaryMessenger`. + */ + @JvmOverloads + fun setUp( + binaryMessenger: BinaryMessenger, + api: MultiFactorTotpHostApi?, + messageChannelSuffix: String = "" + ) { + val separatedMessageChannelSuffix = + if (messageChannelSuffix.isNotEmpty()) ".$messageChannelSuffix" else "" + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.MultiFactorTotpHostApi.generateSecret$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val sessionIdArg = args[0] as String + api.generateSecret(sessionIdArg) { result: Result -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapError(error)) + } else { + val data = result.getOrNull() + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapResult(data)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.MultiFactorTotpHostApi.getAssertionForEnrollment$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val secretKeyArg = args[0] as String + val oneTimePasswordArg = args[1] as String + api.getAssertionForEnrollment(secretKeyArg, oneTimePasswordArg) { result: Result + -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapError(error)) + } else { + val data = result.getOrNull() + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapResult(data)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.MultiFactorTotpHostApi.getAssertionForSignIn$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val enrollmentIdArg = args[0] as String + val oneTimePasswordArg = args[1] as String + api.getAssertionForSignIn(enrollmentIdArg, oneTimePasswordArg) { result: Result + -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapError(error)) + } else { + val data = result.getOrNull() + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapResult(data)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + } + } +} +/** Generated interface from Pigeon that represents a handler of messages from Flutter. */ +interface MultiFactorTotpSecretHostApi { + fun generateQrCodeUrl( + secretKey: String, + accountName: String?, + issuer: String?, + callback: (Result) -> Unit + ) + + fun openInOtpApp(secretKey: String, qrCodeUrl: String, callback: (Result) -> Unit) + + companion object { + /** The codec used by MultiFactorTotpSecretHostApi. */ + val codec: MessageCodec by lazy { GeneratedAndroidFirebaseAuthPigeonCodec() } + /** + * Sets up an instance of `MultiFactorTotpSecretHostApi` to handle messages through the + * `binaryMessenger`. + */ + @JvmOverloads + fun setUp( + binaryMessenger: BinaryMessenger, + api: MultiFactorTotpSecretHostApi?, + messageChannelSuffix: String = "" + ) { + val separatedMessageChannelSuffix = + if (messageChannelSuffix.isNotEmpty()) ".$messageChannelSuffix" else "" + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.MultiFactorTotpSecretHostApi.generateQrCodeUrl$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val secretKeyArg = args[0] as String + val accountNameArg = args[1] as String? + val issuerArg = args[2] as String? + api.generateQrCodeUrl(secretKeyArg, accountNameArg, issuerArg) { result: Result + -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapError(error)) + } else { + val data = result.getOrNull() + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapResult(data)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.MultiFactorTotpSecretHostApi.openInOtpApp$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val secretKeyArg = args[0] as String + val qrCodeUrlArg = args[1] as String + api.openInOtpApp(secretKeyArg, qrCodeUrlArg) { result: Result -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapError(error)) + } else { + reply.reply(GeneratedAndroidFirebaseAuthPigeonUtils.wrapResult(null)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + } + } +} +/** + * Only used to generate the object interface that are use outside of the Pigeon interface + * + * Generated interface from Pigeon that represents a handler of messages from Flutter. + */ +interface GenerateInterfaces { + fun pigeonInterface(info: InternalMultiFactorInfo) + + companion object { + /** The codec used by GenerateInterfaces. */ + val codec: MessageCodec by lazy { GeneratedAndroidFirebaseAuthPigeonCodec() } + /** + * Sets up an instance of `GenerateInterfaces` to handle messages through the `binaryMessenger`. + */ + @JvmOverloads + fun setUp( + binaryMessenger: BinaryMessenger, + api: GenerateInterfaces?, + messageChannelSuffix: String = "" + ) { + val separatedMessageChannelSuffix = + if (messageChannelSuffix.isNotEmpty()) ".$messageChannelSuffix" else "" + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.GenerateInterfaces.pigeonInterface$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val infoArg = args[0] as InternalMultiFactorInfo + val wrapped: List = + try { + api.pigeonInterface(infoArg) + listOf(null) + } catch (exception: Throwable) { + GeneratedAndroidFirebaseAuthPigeonUtils.wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + } + } +} diff --git a/packages/firebase_auth/firebase_auth/android/src/main/kotlin/io/flutter/plugins/firebase/auth/IdTokenChannelStreamHandler.kt b/packages/firebase_auth/firebase_auth/android/src/main/kotlin/io/flutter/plugins/firebase/auth/IdTokenChannelStreamHandler.kt new file mode 100644 index 000000000000..4ffddb487417 --- /dev/null +++ b/packages/firebase_auth/firebase_auth/android/src/main/kotlin/io/flutter/plugins/firebase/auth/IdTokenChannelStreamHandler.kt @@ -0,0 +1,49 @@ +/* + * Copyright 2022, the Chromium project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ +package io.flutter.plugins.firebase.auth + +import com.google.firebase.auth.FirebaseAuth +import io.flutter.plugin.common.EventChannel.EventSink +import io.flutter.plugin.common.EventChannel.StreamHandler +import java.util.concurrent.atomic.AtomicBoolean + +class IdTokenChannelStreamHandler(private val firebaseAuth: FirebaseAuth) : StreamHandler { + private var idTokenListener: FirebaseAuth.IdTokenListener? = null + + override fun onListen(arguments: Any?, events: EventSink) { + val event: MutableMap = HashMap() + event[Constants.APP_NAME] = firebaseAuth.app.name + + val initialAuthState = AtomicBoolean(true) + + idTokenListener = + FirebaseAuth.IdTokenListener { auth -> + if (initialAuthState.get()) { + initialAuthState.set(false) + return@IdTokenListener + } + + val user = auth.currentUser + if (user == null) { + event[Constants.USER] = null + } else { + event[Constants.USER] = + PigeonParser.manuallyToList(PigeonParser.parseFirebaseUser(user)!!) + } + + events.success(event) + } + + firebaseAuth.addIdTokenListener(idTokenListener!!) + } + + override fun onCancel(arguments: Any?) { + if (idTokenListener != null) { + firebaseAuth.removeIdTokenListener(idTokenListener!!) + idTokenListener = null + } + } +} diff --git a/packages/firebase_auth/firebase_auth/android/src/main/kotlin/io/flutter/plugins/firebase/auth/PhoneNumberVerificationStreamHandler.kt b/packages/firebase_auth/firebase_auth/android/src/main/kotlin/io/flutter/plugins/firebase/auth/PhoneNumberVerificationStreamHandler.kt new file mode 100644 index 000000000000..c459ef53174e --- /dev/null +++ b/packages/firebase_auth/firebase_auth/android/src/main/kotlin/io/flutter/plugins/firebase/auth/PhoneNumberVerificationStreamHandler.kt @@ -0,0 +1,143 @@ +/* + * Copyright 2022, the Chromium project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ +package io.flutter.plugins.firebase.auth + +import android.app.Activity +import com.google.firebase.FirebaseException +import com.google.firebase.auth.FirebaseAuth +import com.google.firebase.auth.MultiFactorSession +import com.google.firebase.auth.PhoneAuthCredential +import com.google.firebase.auth.PhoneAuthOptions +import com.google.firebase.auth.PhoneAuthProvider +import com.google.firebase.auth.PhoneAuthProvider.ForceResendingToken +import com.google.firebase.auth.PhoneMultiFactorInfo +import io.flutter.plugin.common.EventChannel.EventSink +import io.flutter.plugin.common.EventChannel.StreamHandler +import java.util.Locale +import java.util.concurrent.TimeUnit +import java.util.concurrent.atomic.AtomicReference + +class PhoneNumberVerificationStreamHandler( + activity: Activity?, + app: AuthPigeonFirebaseApp, + request: InternalVerifyPhoneNumberRequest, + private val multiFactorSession: MultiFactorSession?, + private val multiFactorInfo: PhoneMultiFactorInfo?, + private val onCredentialsListener: OnCredentialsListener +) : StreamHandler { + fun interface OnCredentialsListener { + fun onCredentialsReceived(credential: PhoneAuthCredential) + } + + private val activityRef = AtomicReference(null) + private val firebaseAuth: FirebaseAuth = FlutterFirebaseAuthPlugin.getAuthFromPigeon(app) + private val phoneNumber: String? = request.phoneNumber + private val timeout: Int = Math.toIntExact(request.timeout) + private var autoRetrievedSmsCodeForTesting: String? = request.autoRetrievedSmsCodeForTesting + private var forceResendingToken: Int? = request.forceResendingToken?.let { Math.toIntExact(it) } + + private var eventSink: EventSink? = null + + init { + activityRef.set(activity) + } + + override fun onListen(arguments: Any?, events: EventSink) { + eventSink = events + + val callbacks = + object : PhoneAuthProvider.OnVerificationStateChangedCallbacks() { + override fun onVerificationCompleted(phoneAuthCredential: PhoneAuthCredential) { + val phoneAuthCredentialHashCode = phoneAuthCredential.hashCode() + onCredentialsListener.onCredentialsReceived(phoneAuthCredential) + + val event: MutableMap = HashMap() + event[Constants.TOKEN] = phoneAuthCredentialHashCode + + if (phoneAuthCredential.smsCode != null) { + event[Constants.SMS_CODE] = phoneAuthCredential.smsCode + } + + event[Constants.NAME] = "Auth#phoneVerificationCompleted" + + eventSink?.success(event) + } + + override fun onVerificationFailed(e: FirebaseException) { + val event: MutableMap = HashMap() + val error: MutableMap = HashMap() + val flutterError = FlutterFirebaseAuthPluginException.parserExceptionToFlutter(e) + error["code"] = + flutterError.code.replace("ERROR_", "").lowercase(Locale.ROOT).replace("_", "-") + error["message"] = flutterError.message + error["details"] = flutterError.details + event["error"] = error + event[Constants.NAME] = "Auth#phoneVerificationFailed" + + eventSink?.success(event) + } + + override fun onCodeSent(verificationId: String, token: ForceResendingToken) { + val forceResendingTokenHashCode = token.hashCode() + forceResendingTokens[forceResendingTokenHashCode] = token + + val event: MutableMap = HashMap() + event[Constants.VERIFICATION_ID] = verificationId + event[Constants.FORCE_RESENDING_TOKEN] = forceResendingTokenHashCode + event[Constants.NAME] = "Auth#phoneCodeSent" + + eventSink?.success(event) + } + + override fun onCodeAutoRetrievalTimeOut(verificationId: String) { + val event: MutableMap = HashMap() + event[Constants.VERIFICATION_ID] = verificationId + event[Constants.NAME] = "Auth#phoneCodeAutoRetrievalTimeout" + + eventSink?.success(event) + } + } + + if (autoRetrievedSmsCodeForTesting != null) { + firebaseAuth.firebaseAuthSettings.setAutoRetrievedSmsCodeForPhoneNumber( + phoneNumber, autoRetrievedSmsCodeForTesting) + } + + val phoneAuthOptionsBuilder = PhoneAuthOptions.Builder(firebaseAuth) + activityRef.get()?.let { phoneAuthOptionsBuilder.setActivity(it) } + phoneAuthOptionsBuilder.setCallbacks(callbacks) + + if (phoneNumber != null) { + phoneAuthOptionsBuilder.setPhoneNumber(phoneNumber) + } + if (multiFactorSession != null) { + phoneAuthOptionsBuilder.setMultiFactorSession(multiFactorSession) + } + if (multiFactorInfo != null) { + phoneAuthOptionsBuilder.setMultiFactorHint(multiFactorInfo) + } + phoneAuthOptionsBuilder.setTimeout(timeout.toLong(), TimeUnit.MILLISECONDS) + + val tokenKey = forceResendingToken + if (tokenKey != null) { + val storedToken = forceResendingTokens[tokenKey] + if (storedToken != null) { + phoneAuthOptionsBuilder.setForceResendingToken(storedToken) + } + } + + PhoneAuthProvider.verifyPhoneNumber(phoneAuthOptionsBuilder.build()) + } + + override fun onCancel(arguments: Any?) { + eventSink = null + activityRef.set(null) + } + + companion object { + private val forceResendingTokens = HashMap() + } +} diff --git a/packages/firebase_auth/firebase_auth/android/src/main/kotlin/io/flutter/plugins/firebase/auth/PigeonParser.kt b/packages/firebase_auth/firebase_auth/android/src/main/kotlin/io/flutter/plugins/firebase/auth/PigeonParser.kt new file mode 100644 index 000000000000..dde91bbece22 --- /dev/null +++ b/packages/firebase_auth/firebase_auth/android/src/main/kotlin/io/flutter/plugins/firebase/auth/PigeonParser.kt @@ -0,0 +1,287 @@ +/* + * Copyright 2023, the Chromium project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ +package io.flutter.plugins.firebase.auth + +import android.net.Uri +import com.google.firebase.auth.ActionCodeEmailInfo +import com.google.firebase.auth.ActionCodeResult +import com.google.firebase.auth.ActionCodeSettings +import com.google.firebase.auth.AdditionalUserInfo +import com.google.firebase.auth.AuthCredential +import com.google.firebase.auth.AuthResult +import com.google.firebase.auth.EmailAuthProvider +import com.google.firebase.auth.FacebookAuthProvider +import com.google.firebase.auth.FirebaseAuthProvider +import com.google.firebase.auth.FirebaseUser +import com.google.firebase.auth.GetTokenResult +import com.google.firebase.auth.GithubAuthProvider +import com.google.firebase.auth.GoogleAuthProvider +import com.google.firebase.auth.MultiFactorInfo +import com.google.firebase.auth.OAuthCredential +import com.google.firebase.auth.OAuthProvider +import com.google.firebase.auth.PhoneAuthProvider +import com.google.firebase.auth.PhoneMultiFactorInfo +import com.google.firebase.auth.PlayGamesAuthProvider +import com.google.firebase.auth.TwitterAuthProvider +import com.google.firebase.auth.UserInfo + +object PigeonParser { + fun manuallyToList(pigeonUserDetails: InternalUserDetails): List { + return listOf(pigeonUserDetails.userInfo.toList(), pigeonUserDetails.providerData) + } + + fun parseAuthResult(authResult: AuthResult): InternalUserCredential { + return InternalUserCredential( + additionalUserInfo = parseAdditionalUserInfo(authResult.additionalUserInfo), + credential = parseAuthCredential(authResult.credential), + user = parseFirebaseUser(authResult.user)) + } + + private fun parseAdditionalUserInfo( + additionalUserInfo: AdditionalUserInfo? + ): InternalAdditionalUserInfo? { + if (additionalUserInfo == null) { + return null + } + + return InternalAdditionalUserInfo( + isNewUser = additionalUserInfo.isNewUser, + profile = additionalUserInfo.profile as Map?, + providerId = additionalUserInfo.providerId, + username = additionalUserInfo.username) + } + + fun parseAuthCredential(authCredential: AuthCredential?): InternalAuthCredential? { + if (authCredential == null) { + return null + } + + val authCredentialHashCode = authCredential.hashCode() + FlutterFirebaseAuthPlugin.authCredentials[authCredentialHashCode] = authCredential + + return InternalAuthCredential( + providerId = authCredential.provider, + signInMethod = authCredential.signInMethod, + nativeId = authCredentialHashCode.toLong(), + accessToken = (authCredential as? OAuthCredential)?.accessToken) + } + + fun parseFirebaseUser(firebaseUser: FirebaseUser?): InternalUserDetails? { + if (firebaseUser == null) { + return null + } + + val userMetadata = firebaseUser.metadata + val userInfo = + InternalUserInfo( + displayName = firebaseUser.displayName, + email = firebaseUser.email, + isEmailVerified = firebaseUser.isEmailVerified, + isAnonymous = firebaseUser.isAnonymous, + creationTimestamp = userMetadata?.creationTimestamp, + lastSignInTimestamp = userMetadata?.lastSignInTimestamp, + phoneNumber = firebaseUser.phoneNumber, + photoUrl = parsePhotoUrl(firebaseUser.photoUrl), + uid = firebaseUser.uid, + tenantId = firebaseUser.tenantId) + + return InternalUserDetails( + userInfo = userInfo, providerData = parseUserInfoList(firebaseUser.providerData)) + } + + private fun parseUserInfoList(userInfoList: List?): List?> { + val output = ArrayList?>() + if (userInfoList == null) { + return output + } + + for (userInfo in ArrayList(userInfoList)) { + if (userInfo == null) { + continue + } + if (FirebaseAuthProvider.PROVIDER_ID != userInfo.providerId) { + output.add(parseUserInfoToMap(userInfo)) + } + } + + return output + } + + private fun parseUserInfoToMap(userInfo: UserInfo): Map { + return mapOf( + "displayName" to userInfo.displayName, + "email" to userInfo.email, + "isEmailVerified" to userInfo.isEmailVerified, + "phoneNumber" to userInfo.phoneNumber, + "photoUrl" to parsePhotoUrl(userInfo.photoUrl), + "uid" to (userInfo.uid ?: ""), + "providerId" to userInfo.providerId, + "isAnonymous" to false) + } + + private fun parsePhotoUrl(photoUri: Uri?): String? { + if (photoUri == null) { + return null + } + + val photoUrl = photoUri.toString() + return if (photoUrl == "") null else photoUrl + } + + fun getCredential(credentialMap: Map): AuthCredential? { + if (credentialMap[Constants.TOKEN] != null) { + val token = (credentialMap[Constants.TOKEN] as Number).toInt() + return FlutterFirebaseAuthPlugin.authCredentials[token] + ?: throw FlutterFirebaseAuthPluginException.invalidCredential() + } + + val signInMethod = credentialMap[Constants.SIGN_IN_METHOD] as String + val secret = credentialMap[Constants.SECRET] as String? + val idToken = credentialMap[Constants.ID_TOKEN] as String? + val accessToken = credentialMap[Constants.ACCESS_TOKEN] as String? + val rawNonce = credentialMap[Constants.RAW_NONCE] as String? + + return when (signInMethod) { + Constants.SIGN_IN_METHOD_PASSWORD -> + EmailAuthProvider.getCredential(credentialMap[Constants.EMAIL] as String, secret!!) + Constants.SIGN_IN_METHOD_EMAIL_LINK -> + EmailAuthProvider.getCredentialWithLink( + credentialMap[Constants.EMAIL] as String, + credentialMap[Constants.EMAIL_LINK] as String) + Constants.SIGN_IN_METHOD_FACEBOOK -> FacebookAuthProvider.getCredential(accessToken!!) + Constants.SIGN_IN_METHOD_GOOGLE -> GoogleAuthProvider.getCredential(idToken, accessToken) + Constants.SIGN_IN_METHOD_TWITTER -> TwitterAuthProvider.getCredential(accessToken!!, secret!!) + Constants.SIGN_IN_METHOD_GITHUB -> GithubAuthProvider.getCredential(accessToken!!) + Constants.SIGN_IN_METHOD_PHONE -> { + val verificationId = credentialMap[Constants.VERIFICATION_ID] as String + val smsCode = credentialMap[Constants.SMS_CODE] as String + PhoneAuthProvider.getCredential(verificationId, smsCode) + } + Constants.SIGN_IN_METHOD_OAUTH -> { + val providerId = credentialMap[Constants.PROVIDER_ID] as String + val builder = OAuthProvider.newCredentialBuilder(providerId) + if (accessToken != null) { + builder.setAccessToken(accessToken) + } + if (rawNonce == null) { + builder.setIdToken(idToken!!) + } else { + builder.setIdTokenWithRawNonce(idToken!!, rawNonce) + } + builder.build() + } + Constants.SIGN_IN_METHOD_PLAY_GAMES -> { + val serverAuthCode = credentialMap[Constants.SERVER_AUTH_CODE] as String + PlayGamesAuthProvider.getCredential(serverAuthCode) + } + else -> null + } + } + + fun getActionCodeSettings( + pigeonActionCodeSettings: InternalActionCodeSettings + ): ActionCodeSettings { + val builder = ActionCodeSettings.newBuilder() + builder.setUrl(pigeonActionCodeSettings.url) + + if (pigeonActionCodeSettings.dynamicLinkDomain != null) { + builder.setDynamicLinkDomain(pigeonActionCodeSettings.dynamicLinkDomain) + } + + if (pigeonActionCodeSettings.linkDomain != null) { + builder.setLinkDomain(pigeonActionCodeSettings.linkDomain) + } + + builder.setHandleCodeInApp(pigeonActionCodeSettings.handleCodeInApp) + + if (pigeonActionCodeSettings.androidPackageName != null) { + builder.setAndroidPackageName( + pigeonActionCodeSettings.androidPackageName, + pigeonActionCodeSettings.androidInstallApp, + pigeonActionCodeSettings.androidMinimumVersion) + } + + if (pigeonActionCodeSettings.iOSBundleId != null) { + builder.setIOSBundleId(pigeonActionCodeSettings.iOSBundleId) + } + + return builder.build() + } + + fun multiFactorInfoToPigeon(hints: List): List { + val pigeonHints = ArrayList() + for (info in hints) { + if (info is PhoneMultiFactorInfo) { + pigeonHints.add( + InternalMultiFactorInfo( + phoneNumber = info.phoneNumber, + displayName = info.displayName, + enrollmentTimestamp = info.enrollmentTimestamp.toDouble(), + uid = info.uid, + factorId = info.factorId)) + } else { + pigeonHints.add( + InternalMultiFactorInfo( + displayName = info.displayName, + enrollmentTimestamp = info.enrollmentTimestamp.toDouble(), + uid = info.uid, + factorId = info.factorId)) + } + } + return pigeonHints + } + + fun multiFactorInfoToMap(hints: List): List> { + val pigeonHints = ArrayList>() + for (info in multiFactorInfoToPigeon(hints)) { + pigeonHints.add(info.toList()) + } + return pigeonHints + } + + fun parseActionCodeResult(actionCodeResult: ActionCodeResult): InternalActionCodeInfo { + val operation = + when (actionCodeResult.operation) { + ActionCodeResult.PASSWORD_RESET -> ActionCodeInfoOperation.PASSWORD_RESET + ActionCodeResult.VERIFY_EMAIL -> ActionCodeInfoOperation.VERIFY_EMAIL + ActionCodeResult.RECOVER_EMAIL -> ActionCodeInfoOperation.RECOVER_EMAIL + ActionCodeResult.SIGN_IN_WITH_EMAIL_LINK -> ActionCodeInfoOperation.EMAIL_SIGN_IN + ActionCodeResult.VERIFY_BEFORE_CHANGE_EMAIL -> + ActionCodeInfoOperation.VERIFY_AND_CHANGE_EMAIL + ActionCodeResult.REVERT_SECOND_FACTOR_ADDITION -> + ActionCodeInfoOperation.REVERT_SECOND_FACTOR_ADDITION + else -> ActionCodeInfoOperation.UNKNOWN + } + + val actionCodeInfo = actionCodeResult.info + val data = + if (actionCodeInfo != null && + (actionCodeResult.operation == ActionCodeResult.VERIFY_EMAIL || + actionCodeResult.operation == ActionCodeResult.PASSWORD_RESET)) { + InternalActionCodeInfoData(email = actionCodeInfo.email) + } else if (actionCodeResult.operation == ActionCodeResult.RECOVER_EMAIL || + actionCodeResult.operation == ActionCodeResult.VERIFY_BEFORE_CHANGE_EMAIL) { + val actionCodeEmailInfo = actionCodeInfo as ActionCodeEmailInfo + InternalActionCodeInfoData( + email = actionCodeEmailInfo.email, previousEmail = actionCodeEmailInfo.previousEmail) + } else { + InternalActionCodeInfoData() + } + + return InternalActionCodeInfo(operation = operation, data = data) + } + + fun parseTokenResult(tokenResult: GetTokenResult): InternalIdTokenResult { + return InternalIdTokenResult( + token = tokenResult.token, + signInProvider = tokenResult.signInProvider, + authTimestamp = tokenResult.authTimestamp * 1000, + expirationTimestamp = tokenResult.expirationTimestamp * 1000, + issuedAtTimestamp = tokenResult.issuedAtTimestamp * 1000, + claims = tokenResult.claims as Map?, + signInSecondFactor = tokenResult.signInSecondFactor) + } +} diff --git a/packages/firebase_auth/firebase_auth/example/android/settings.gradle b/packages/firebase_auth/firebase_auth/example/android/settings.gradle index 812272422a40..ff739370b7e4 100644 --- a/packages/firebase_auth/firebase_auth/example/android/settings.gradle +++ b/packages/firebase_auth/firebase_auth/example/android/settings.gradle @@ -22,7 +22,7 @@ plugins { // START: FlutterFire Configuration id "com.google.gms.google-services" version "4.3.15" apply false // END: FlutterFire Configuration - id "org.jetbrains.kotlin.android" version "2.1.0" apply false + id "org.jetbrains.kotlin.android" version "2.3.0" apply false } include ":app" diff --git a/packages/firebase_auth/firebase_auth_platform_interface/pigeons/messages.dart b/packages/firebase_auth/firebase_auth_platform_interface/pigeons/messages.dart index 9c6cfd4a3c0b..e8db36967ff0 100644 --- a/packages/firebase_auth/firebase_auth_platform_interface/pigeons/messages.dart +++ b/packages/firebase_auth/firebase_auth_platform_interface/pigeons/messages.dart @@ -11,11 +11,10 @@ import 'package:pigeon/pigeon.dart'; dartOut: 'lib/src/pigeon/messages.pigeon.dart', // We export in the lib folder to expose the class to other packages. dartTestOut: 'test/pigeon/test_api.dart', - javaOut: - '../firebase_auth/android/src/main/java/io/flutter/plugins/firebase/auth/GeneratedAndroidFirebaseAuth.java', - javaOptions: JavaOptions( + kotlinOut: + '../firebase_auth/android/src/main/kotlin/io/flutter/plugins/firebase/auth/GeneratedAndroidFirebaseAuth.g.kt', + kotlinOptions: KotlinOptions( package: 'io.flutter.plugins.firebase.auth', - className: 'GeneratedAndroidFirebaseAuth', ), swiftOut: '../firebase_auth/ios/firebase_auth/Sources/firebase_auth/FirebaseAuthMessages.g.swift',