From b581c233677c0bed94875eb42fae368ce3856253 Mon Sep 17 00:00:00 2001 From: Brianna Birman Date: Thu, 23 Oct 2025 11:15:26 -0700 Subject: [PATCH 1/3] Add welcome discovery flag instead of having hardcoded consumer keys --- .../Classes/Common/SalesforceSDKManager.h | 4 ++++ .../Classes/Common/SalesforceSDKManager.m | 1 + .../OAuth/DomainDiscoveryCoordinator.swift | 19 +++++-------------- 3 files changed, 10 insertions(+), 14 deletions(-) diff --git a/libs/SalesforceSDKCore/SalesforceSDKCore/Classes/Common/SalesforceSDKManager.h b/libs/SalesforceSDKCore/SalesforceSDKCore/Classes/Common/SalesforceSDKManager.h index 5a9bfa2a47..2e5c0449b6 100644 --- a/libs/SalesforceSDKCore/SalesforceSDKCore/Classes/Common/SalesforceSDKManager.h +++ b/libs/SalesforceSDKCore/SalesforceSDKCore/Classes/Common/SalesforceSDKManager.h @@ -237,6 +237,10 @@ NS_SWIFT_NAME(SalesforceManager) */ @property (nonatomic, assign) BOOL useWebServerAuthentication; +/** Whether or not the app should use welcome discovery. This should only be enabled if the connected app is supported. + */ +@property (nonatomic, assign) BOOL useWelcomeDiscovery; + /** Whether hybrid authentication flow should be used. Defaults to YES. */ @property (nonatomic, assign) BOOL useHybridAuthentication; diff --git a/libs/SalesforceSDKCore/SalesforceSDKCore/Classes/Common/SalesforceSDKManager.m b/libs/SalesforceSDKCore/SalesforceSDKCore/Classes/Common/SalesforceSDKManager.m index 6ae420a28e..3e389a318c 100644 --- a/libs/SalesforceSDKCore/SalesforceSDKCore/Classes/Common/SalesforceSDKManager.m +++ b/libs/SalesforceSDKCore/SalesforceSDKCore/Classes/Common/SalesforceSDKManager.m @@ -304,6 +304,7 @@ - (instancetype)init { self.useWebServerAuthentication = YES; self.blockSalesforceIntegrationUser = NO; self.useHybridAuthentication = YES; + self.useWelcomeDiscovery = NO; [self setupServiceConfiguration]; _snapshotViewControllers = [SFSDKSafeMutableDictionary new]; _nativeLoginViewControllers = [SFSDKSafeMutableDictionary new]; diff --git a/libs/SalesforceSDKCore/SalesforceSDKCore/Classes/OAuth/DomainDiscoveryCoordinator.swift b/libs/SalesforceSDKCore/SalesforceSDKCore/Classes/OAuth/DomainDiscoveryCoordinator.swift index a0d27a3225..8f520a9339 100644 --- a/libs/SalesforceSDKCore/SalesforceSDKCore/Classes/OAuth/DomainDiscoveryCoordinator.swift +++ b/libs/SalesforceSDKCore/SalesforceSDKCore/Classes/OAuth/DomainDiscoveryCoordinator.swift @@ -15,15 +15,6 @@ enum DomainDiscovery: String { case callbackURL = "callback_url" } } - - /* TODO: Keep this list of client ids up to date with those - * supported by Salesforce Welcome Discovery or remove it - * when no longer required. - */ - static let supportedClientIds: Set = [ - "SfdcMobileChatterAndroid", - "SfdcMobileChatteriOS" - ] } /// Represents the result of a domain discovery operation. @@ -88,13 +79,13 @@ public class DomainDiscoveryCoordinator: NSObject { @objc public func isDiscoveryDomain(_ domain: String?, clientId: String?) -> Bool { - guard let domain = domain, let clientId = clientId else { return false } + guard let domain = domain else { return false } let isDiscovery = domain.lowercased().contains(DomainDiscovery.URLComponent.path.rawValue) - let isSupportedClient = DomainDiscovery.supportedClientIds.contains(clientId) - if isDiscovery && !isSupportedClient { - SFSDKCoreLogger.e(classForCoder, message: "\(domain) is a discovery domain, but client ID '\(clientId)' is not supported.") + let discoveryEnabled = SalesforceManager.shared.useWelcomeDiscovery + if isDiscovery && !discoveryEnabled { + SFSDKCoreLogger.w(classForCoder, message: "\(domain) is a discovery domain, but welcome discovery isn't enabled.") } - return isDiscovery && isSupportedClient + return isDiscovery && discoveryEnabled } } From f852cf4a89440e84adaa6e1869527bb8c506b389 Mon Sep 17 00:00:00 2001 From: Brianna Birman Date: Thu, 23 Oct 2025 11:35:27 -0700 Subject: [PATCH 2/3] Add test --- .../Classes/OAuth/DomainDiscoveryCoordinator.swift | 6 ++++++ .../Classes/OAuth/SFOAuthCoordinator.m | 4 ++-- .../DomainDiscoveryCoordinatorTests.swift | 13 ++++++++++++- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/libs/SalesforceSDKCore/SalesforceSDKCore/Classes/OAuth/DomainDiscoveryCoordinator.swift b/libs/SalesforceSDKCore/SalesforceSDKCore/Classes/OAuth/DomainDiscoveryCoordinator.swift index 8f520a9339..09afa38b12 100644 --- a/libs/SalesforceSDKCore/SalesforceSDKCore/Classes/OAuth/DomainDiscoveryCoordinator.swift +++ b/libs/SalesforceSDKCore/SalesforceSDKCore/Classes/OAuth/DomainDiscoveryCoordinator.swift @@ -78,7 +78,13 @@ public class DomainDiscoveryCoordinator: NSObject { } @objc + @available(*, deprecated, renamed: "isDiscoveryDomain(domain:)") public func isDiscoveryDomain(_ domain: String?, clientId: String?) -> Bool { + return isDiscoveryDomain(domain) + } + + @objc + public func isDiscoveryDomain(_ domain: String?) -> Bool { guard let domain = domain else { return false } let isDiscovery = domain.lowercased().contains(DomainDiscovery.URLComponent.path.rawValue) let discoveryEnabled = SalesforceManager.shared.useWelcomeDiscovery diff --git a/libs/SalesforceSDKCore/SalesforceSDKCore/Classes/OAuth/SFOAuthCoordinator.m b/libs/SalesforceSDKCore/SalesforceSDKCore/Classes/OAuth/SFOAuthCoordinator.m index 414bf87152..06f363650a 100644 --- a/libs/SalesforceSDKCore/SalesforceSDKCore/Classes/OAuth/SFOAuthCoordinator.m +++ b/libs/SalesforceSDKCore/SalesforceSDKCore/Classes/OAuth/SFOAuthCoordinator.m @@ -49,6 +49,7 @@ #import "SFSDKIDPConstants.h" #import "SFSDKAuthSession.h" #import "SFSDKAuthRequest.h" +#import #import #import #import @@ -214,8 +215,7 @@ - (void)authenticate { - (void)authenticateWithCredentials:(SFOAuthCredentials *)credentials { self.credentials = credentials; - if ([self.domainDiscoveryCoordinator isDiscoveryDomain:self.credentials.domain - clientId:self.credentials.clientId]) { + if ([self.domainDiscoveryCoordinator isDiscoveryDomain:self.credentials.domain]) { [self runMyDomainDiscoveryAndAuthenticate]; return; } diff --git a/libs/SalesforceSDKCore/SalesforceSDKCoreTests/DomainDiscoveryCoordinatorTests.swift b/libs/SalesforceSDKCore/SalesforceSDKCoreTests/DomainDiscoveryCoordinatorTests.swift index d93a3ea407..299b5b4760 100644 --- a/libs/SalesforceSDKCore/SalesforceSDKCoreTests/DomainDiscoveryCoordinatorTests.swift +++ b/libs/SalesforceSDKCore/SalesforceSDKCoreTests/DomainDiscoveryCoordinatorTests.swift @@ -155,4 +155,15 @@ final class DomainDiscoveryCoordinatorTests: XCTestCase { XCTAssertEqual(results?.myDomain, expectedDomain) XCTAssertEqual(results?.loginHint, expectedLoginHint) } -} + + func testDiscoveryFlag() throws { + let coordinator = DomainDiscoveryCoordinator() + let domain = "welcome.salesforce.com/discovery" + + SalesforceManager.shared.useWelcomeDiscovery = false + XCTAssertFalse(coordinator.isDiscoveryDomain(domain)) + + SalesforceManager.shared.useWelcomeDiscovery = true + XCTAssertTrue(coordinator.isDiscoveryDomain(domain)) + } +} From 66922e239132255aee071d7377de4be2303c62d3 Mon Sep 17 00:00:00 2001 From: Brianna Birman Date: Thu, 23 Oct 2025 11:48:06 -0700 Subject: [PATCH 3/3] Better name for property --- .../SalesforceSDKCore/Classes/Common/SalesforceSDKManager.h | 4 ++-- .../SalesforceSDKCore/Classes/Common/SalesforceSDKManager.m | 2 +- .../Classes/OAuth/DomainDiscoveryCoordinator.swift | 2 +- .../DomainDiscoveryCoordinatorTests.swift | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/libs/SalesforceSDKCore/SalesforceSDKCore/Classes/Common/SalesforceSDKManager.h b/libs/SalesforceSDKCore/SalesforceSDKCore/Classes/Common/SalesforceSDKManager.h index 2e5c0449b6..0b215b4232 100644 --- a/libs/SalesforceSDKCore/SalesforceSDKCore/Classes/Common/SalesforceSDKManager.h +++ b/libs/SalesforceSDKCore/SalesforceSDKCore/Classes/Common/SalesforceSDKManager.h @@ -237,9 +237,9 @@ NS_SWIFT_NAME(SalesforceManager) */ @property (nonatomic, assign) BOOL useWebServerAuthentication; -/** Whether or not the app should use welcome discovery. This should only be enabled if the connected app is supported. +/** Whether or not the app supports welcome discovery, this should only be enabled if the connected app is supported. */ -@property (nonatomic, assign) BOOL useWelcomeDiscovery; +@property (nonatomic, assign) BOOL supportsWelcomeDiscovery; /** Whether hybrid authentication flow should be used. Defaults to YES. */ diff --git a/libs/SalesforceSDKCore/SalesforceSDKCore/Classes/Common/SalesforceSDKManager.m b/libs/SalesforceSDKCore/SalesforceSDKCore/Classes/Common/SalesforceSDKManager.m index 3e389a318c..664c873bc7 100644 --- a/libs/SalesforceSDKCore/SalesforceSDKCore/Classes/Common/SalesforceSDKManager.m +++ b/libs/SalesforceSDKCore/SalesforceSDKCore/Classes/Common/SalesforceSDKManager.m @@ -304,7 +304,7 @@ - (instancetype)init { self.useWebServerAuthentication = YES; self.blockSalesforceIntegrationUser = NO; self.useHybridAuthentication = YES; - self.useWelcomeDiscovery = NO; + self.supportsWelcomeDiscovery = NO; [self setupServiceConfiguration]; _snapshotViewControllers = [SFSDKSafeMutableDictionary new]; _nativeLoginViewControllers = [SFSDKSafeMutableDictionary new]; diff --git a/libs/SalesforceSDKCore/SalesforceSDKCore/Classes/OAuth/DomainDiscoveryCoordinator.swift b/libs/SalesforceSDKCore/SalesforceSDKCore/Classes/OAuth/DomainDiscoveryCoordinator.swift index 09afa38b12..4e37b0ae07 100644 --- a/libs/SalesforceSDKCore/SalesforceSDKCore/Classes/OAuth/DomainDiscoveryCoordinator.swift +++ b/libs/SalesforceSDKCore/SalesforceSDKCore/Classes/OAuth/DomainDiscoveryCoordinator.swift @@ -87,7 +87,7 @@ public class DomainDiscoveryCoordinator: NSObject { public func isDiscoveryDomain(_ domain: String?) -> Bool { guard let domain = domain else { return false } let isDiscovery = domain.lowercased().contains(DomainDiscovery.URLComponent.path.rawValue) - let discoveryEnabled = SalesforceManager.shared.useWelcomeDiscovery + let discoveryEnabled = SalesforceManager.shared.supportsWelcomeDiscovery if isDiscovery && !discoveryEnabled { SFSDKCoreLogger.w(classForCoder, message: "\(domain) is a discovery domain, but welcome discovery isn't enabled.") } diff --git a/libs/SalesforceSDKCore/SalesforceSDKCoreTests/DomainDiscoveryCoordinatorTests.swift b/libs/SalesforceSDKCore/SalesforceSDKCoreTests/DomainDiscoveryCoordinatorTests.swift index 299b5b4760..c941fe16ce 100644 --- a/libs/SalesforceSDKCore/SalesforceSDKCoreTests/DomainDiscoveryCoordinatorTests.swift +++ b/libs/SalesforceSDKCore/SalesforceSDKCoreTests/DomainDiscoveryCoordinatorTests.swift @@ -160,10 +160,10 @@ final class DomainDiscoveryCoordinatorTests: XCTestCase { let coordinator = DomainDiscoveryCoordinator() let domain = "welcome.salesforce.com/discovery" - SalesforceManager.shared.useWelcomeDiscovery = false + SalesforceManager.shared.supportsWelcomeDiscovery = false XCTAssertFalse(coordinator.isDiscoveryDomain(domain)) - SalesforceManager.shared.useWelcomeDiscovery = true + SalesforceManager.shared.supportsWelcomeDiscovery = true XCTAssertTrue(coordinator.isDiscoveryDomain(domain)) } }