-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Add support for R-GCIP tenant configuration #14979
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point in your pull request via creating an issue comment (i.e. comment on the pull request page) using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist is currently in preview and may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments to provide feedback. |
Generated by 🚫 Danger |
@@ -140,6 +140,22 @@ extension Auth: AuthInterop { | |||
} | |||
} | |||
|
|||
/// Holds configuration for a Regional Google Cloud Identity Platform (R-GCIP) tenant. | |||
public struct TenantConfig: Sendable { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Because this type is defined within class Auth { ... }
, clients outside the module would access it like:
let tenant = Auth.TenantConfig(...)
I was thinking this should be moved into the top-level scope of the module, WDYT?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
+1
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Refactored
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The latest refactoring doesn't move it outside of the Auth scope. I'll make a suggestion below that demonstrates.
@@ -140,6 +140,22 @@ extension Auth: AuthInterop { | |||
} | |||
} | |||
|
|||
/// Holds configuration for a Regional Google Cloud Identity Platform (R-GCIP) tenant. | |||
public struct TenantConfig: Sendable { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
+1
/// The Regional Google Cloud Identity Platform (R-GCIP) location. | ||
/// This is set when the `Auth` instance is initialized with a `TenantConfig`. | ||
var location: String? | ||
|
||
/// The Regional Google Cloud Identity Platform (R-GCIP) tenant ID. | ||
/// This is set when the `Auth` instance is initialized with a `TenantConfig`. | ||
var tenantId: String? | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can we not have this as TenantConfig
type instead of splitting them separately? Any reason to keep it separate? Ideally these should not be separately set by themselves, so IMO we should not keep it separate.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sure Pavan, addressed this change in recent commit
… tenant properties
/// Regionalized auth | ||
@available(iOS 13, tvOS 13, macOS 10.15, macCatalyst 13, watchOS 7, *) | ||
public extension Auth { | ||
/// Gets the Auth object for a `FirebaseApp` configured for a specific Regional Google Cloud | ||
/// Identity Platform (R-GCIP) tenant. | ||
/// | ||
/// Use this method to create an `Auth` instance that interacts with a regionalized | ||
/// authentication backend instead of the default endpoint. | ||
/// | ||
/// - Parameters: | ||
/// - app: The Firebase app instance. | ||
/// - tenantConfig: The configuration for the R-GCIP tenant, specifying the tenant ID and its | ||
/// location. | ||
/// - Returns: The `Auth` instance associated with the given app and tenant config. | ||
static func auth(app: FirebaseApp, tenantConfig: TenantConfig) -> Auth { | ||
return Auth(app: app, tenantConfig: tenantConfig) | ||
} | ||
|
||
/// Holds configuration for a Regional Google Cloud Identity Platform (R-GCIP) tenant. | ||
struct TenantConfig: Sendable { | ||
public let tenantId: String | ||
public let location: String | ||
|
||
/// Initializes a `TenantConfig` instance. | ||
/// | ||
/// - Parameters: | ||
/// - tenantId: The ID of the tenant. | ||
/// - location: The location of the tenant. Defaults to "prod-global". | ||
public init(tenantId: String, location: String = "prod-global") { | ||
self.location = location | ||
self.tenantId = tenantId | ||
} | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
/// Regionalized auth | |
@available(iOS 13, tvOS 13, macOS 10.15, macCatalyst 13, watchOS 7, *) | |
public extension Auth { | |
/// Gets the Auth object for a `FirebaseApp` configured for a specific Regional Google Cloud | |
/// Identity Platform (R-GCIP) tenant. | |
/// | |
/// Use this method to create an `Auth` instance that interacts with a regionalized | |
/// authentication backend instead of the default endpoint. | |
/// | |
/// - Parameters: | |
/// - app: The Firebase app instance. | |
/// - tenantConfig: The configuration for the R-GCIP tenant, specifying the tenant ID and its | |
/// location. | |
/// - Returns: The `Auth` instance associated with the given app and tenant config. | |
static func auth(app: FirebaseApp, tenantConfig: TenantConfig) -> Auth { | |
return Auth(app: app, tenantConfig: tenantConfig) | |
} | |
/// Holds configuration for a Regional Google Cloud Identity Platform (R-GCIP) tenant. | |
struct TenantConfig: Sendable { | |
public let tenantId: String | |
public let location: String | |
/// Initializes a `TenantConfig` instance. | |
/// | |
/// - Parameters: | |
/// - tenantId: The ID of the tenant. | |
/// - location: The location of the tenant. Defaults to "prod-global". | |
public init(tenantId: String, location: String = "prod-global") { | |
self.location = location | |
self.tenantId = tenantId | |
} | |
} | |
} | |
// MARK: - Regionalized Auth | |
/// Holds configuration for a Regional Google Cloud Identity Platform (R-GCIP) tenant. | |
public struct TenantConfig: Sendable { | |
public let tenantId: String | |
public let location: String | |
/// Initializes a `TenantConfig` instance. | |
/// | |
/// - Parameters: | |
/// - tenantId: The ID of the tenant. | |
/// - location: The location of the tenant. Defaults to "prod-global". | |
public init(tenantId: String, location: String = "prod-global") { | |
self.location = location | |
self.tenantId = tenantId | |
} | |
} | |
/// Regionalized auth | |
@available(iOS 13, tvOS 13, macOS 10.15, macCatalyst 13, watchOS 7, *) | |
public extension Auth { | |
/// Gets the Auth object for a `FirebaseApp` configured for a specific Regional Google Cloud | |
/// Identity Platform (R-GCIP) tenant. | |
/// | |
/// Use this method to create an `Auth` instance that interacts with a regionalized | |
/// authentication backend instead of the default endpoint. | |
/// | |
/// - Parameters: | |
/// - app: The Firebase app instance. | |
/// - tenantConfig: The configuration for the R-GCIP tenant, specifying the tenant ID and its | |
/// location. | |
/// - Returns: The `Auth` instance associated with the given app and tenant config. | |
static func auth(app: FirebaseApp, tenantConfig: TenantConfig) -> Auth { | |
return Auth(app: app, tenantConfig: tenantConfig) | |
} | |
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@srushtisv Can we do this change as suggested by Nick?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sure Pavan, commiting suggestion. Thankyou Nick.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM with the one code suggestion above.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM, apart from one comment.
/// Regionalized auth | ||
@available(iOS 13, tvOS 13, macOS 10.15, macCatalyst 13, watchOS 7, *) | ||
public extension Auth { | ||
/// Gets the Auth object for a `FirebaseApp` configured for a specific Regional Google Cloud | ||
/// Identity Platform (R-GCIP) tenant. | ||
/// | ||
/// Use this method to create an `Auth` instance that interacts with a regionalized | ||
/// authentication backend instead of the default endpoint. | ||
/// | ||
/// - Parameters: | ||
/// - app: The Firebase app instance. | ||
/// - tenantConfig: The configuration for the R-GCIP tenant, specifying the tenant ID and its | ||
/// location. | ||
/// - Returns: The `Auth` instance associated with the given app and tenant config. | ||
static func auth(app: FirebaseApp, tenantConfig: TenantConfig) -> Auth { | ||
return Auth(app: app, tenantConfig: tenantConfig) | ||
} | ||
|
||
/// Holds configuration for a Regional Google Cloud Identity Platform (R-GCIP) tenant. | ||
struct TenantConfig: Sendable { | ||
public let tenantId: String | ||
public let location: String | ||
|
||
/// Initializes a `TenantConfig` instance. | ||
/// | ||
/// - Parameters: | ||
/// - tenantId: The ID of the tenant. | ||
/// - location: The location of the tenant. Defaults to "prod-global". | ||
public init(tenantId: String, location: String = "prod-global") { | ||
self.location = location | ||
self.tenantId = tenantId | ||
} | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@srushtisv Can we do this change as suggested by Nick?
Description
This PR introduces support for Regional GCIP (R-GCIP) within the Firebase Auth iOS SDK. Developers can now initialize an
Auth
instance tied to a specific tenant ID and location.The key changes are:
TenantConfig
Struct: ASendable
structTenantConfig
has been added to hold thetenantId
andlocation
(defaulting to "prod-global").Auth
Factory Method: A new static methodAuth.auth(app: FirebaseApp, tenantConfig: TenantConfig)
allows initialization with R-GCIP parameters.AuthRequestConfiguration
: The internalAuthRequestConfiguration
class now includeslocation
andtenantId
properties, populated during initialization if aTenantConfig
is provided.These changes enable applications to work with regionalized Firebase Authentication backends.
Changelog
TenantConfig
and a newAuth
initializer to specify tenant ID and location.