Skip to content

Commit

Permalink
feat(auth): add support for custom domains on mobile (#11925)
Browse files Browse the repository at this point in the history
* feat(auth): add support for custom domains on mobile

* feat(auth): add support for custom domains on mobile
  • Loading branch information
Lyokone committed Nov 24, 2023
1 parent 4e6a071 commit 552119c
Show file tree
Hide file tree
Showing 5 changed files with 30 additions and 0 deletions.
Expand Up @@ -29,6 +29,7 @@
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.FlutterFirebaseCorePlugin;
import io.flutter.plugins.firebase.core.FlutterFirebasePlugin;
import java.util.HashMap;
import java.util.List;
Expand Down Expand Up @@ -134,6 +135,11 @@ static FirebaseAuth getAuthFromPigeon(
if (pigeonApp.getTenantId() != null) {
auth.setTenantId(pigeonApp.getTenantId());
}
String customDomain = FlutterFirebaseCorePlugin.customAuthDomain.get(pigeonApp.getAppName());
if (customDomain != null) {
auth.setCustomAuthDomain(customDomain);
}

return auth;
}

Expand Down
Expand Up @@ -15,6 +15,7 @@
#import "Public/FLTFirebaseAuthPlugin.h"
@import CommonCrypto;
#import <AuthenticationServices/AuthenticationServices.h>
#import <firebase_core/FLTFirebaseCorePlugin.h>

NSString *const kFLTFirebaseAuthChannelName = @"plugins.flutter.io/firebase_auth";

Expand Down Expand Up @@ -632,6 +633,7 @@ - (FIRAuth *_Nullable)getFIRAuthFromAppNameFromPigeon:(AuthPigeonFirebaseApp *)p
FIRAuth *auth = [FIRAuth authWithApp:app];

auth.tenantID = pigeonApp.tenantId;
auth.customAuthDomain = [FLTFirebaseCorePlugin getCustomDomain:app.name];

return auth;
}
Expand Down
Expand Up @@ -15,7 +15,9 @@
import com.google.firebase.FirebaseOptions;
import io.flutter.embedding.engine.plugins.FlutterPlugin;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
* Flutter plugin implementation controlling the entrypoint for the Firebase SDK.
Expand All @@ -29,6 +31,8 @@ public class FlutterFirebaseCorePlugin
private Context applicationContext;
private boolean coreInitialized = false;

public static Map<String, String> customAuthDomain = new HashMap<>();

@Override
public void onAttachedToEngine(FlutterPluginBinding binding) {
GeneratedAndroidFirebaseCore.FirebaseCoreHostApi.setup(binding.getBinaryMessenger(), this);
Expand Down Expand Up @@ -138,6 +142,11 @@ public void initializeApp(
} catch (Exception e) {
// do nothing
}

if (initializeAppRequest.getAuthDomain() != null) {
customAuthDomain.put(appName, initializeAppRequest.getAuthDomain());
}

FirebaseApp firebaseApp =
FirebaseApp.initializeApp(applicationContext, options, appName);
taskCompletionSource.setResult(Tasks.await(firebaseAppToMap(firebaseApp)));
Expand Down
Expand Up @@ -14,4 +14,7 @@

@interface FLTFirebaseCorePlugin
: FLTFirebasePlugin <FlutterPlugin, FLTFirebasePlugin, FirebaseCoreHostApi, FirebaseAppHostApi>

+ (NSString *)getCustomDomain:(NSString *)appName;

@end
Expand Up @@ -51,6 +51,12 @@ + (instancetype)sharedInstance {
return instance;
}

static NSMutableDictionary<NSString *, NSString *> *customAuthDomains;

+ (NSString *)getCustomDomain:(NSString *)appName {
return customAuthDomains[appName];
}

#pragma mark - Helpers

- (PigeonFirebaseOptions *)optionsFromFIROptions:(FIROptions *)options {
Expand Down Expand Up @@ -155,6 +161,10 @@ - (void)initializeAppAppName:(nonnull NSString *)appName
options.appGroupID = initializeAppRequest.appGroupId;
}

if (initializeAppRequest.authDomain != nil) {
customAuthDomains[appNameIos] = initializeAppRequest.authDomain;
}

[FIRApp configureWithName:appNameIos options:options];

completion([self initializeResponseFromFIRApp:[FIRApp appNamed:appNameIos]], nil);
Expand Down

0 comments on commit 552119c

Please sign in to comment.