diff --git a/libs/SalesforceSDKCore/SalesforceSDKCore/Classes/Common/SalesforceSDKManager.h b/libs/SalesforceSDKCore/SalesforceSDKCore/Classes/Common/SalesforceSDKManager.h index 5a9bfa2a47..0b215b4232 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 supports welcome discovery, this should only be enabled if the connected app is supported. + */ +@property (nonatomic, assign) BOOL supportsWelcomeDiscovery; + /** 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 b855bd9e50..68fd61ed24 100644 --- a/libs/SalesforceSDKCore/SalesforceSDKCore/Classes/Common/SalesforceSDKManager.m +++ b/libs/SalesforceSDKCore/SalesforceSDKCore/Classes/Common/SalesforceSDKManager.m @@ -315,6 +315,7 @@ - (instancetype)init { self.useWebServerAuthentication = YES; self.blockSalesforceIntegrationUser = NO; self.useHybridAuthentication = YES; + 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 a0d27a3225..4e37b0ae07 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. @@ -87,14 +78,20 @@ public class DomainDiscoveryCoordinator: NSObject { } @objc + @available(*, deprecated, renamed: "isDiscoveryDomain(domain:)") public func isDiscoveryDomain(_ domain: String?, clientId: String?) -> Bool { - guard let domain = domain, let clientId = clientId else { return false } + 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 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.supportsWelcomeDiscovery + if isDiscovery && !discoveryEnabled { + SFSDKCoreLogger.w(classForCoder, message: "\(domain) is a discovery domain, but welcome discovery isn't enabled.") } - return isDiscovery && isSupportedClient + return isDiscovery && discoveryEnabled } } diff --git a/libs/SalesforceSDKCore/SalesforceSDKCore/Classes/OAuth/SFOAuthCoordinator.m b/libs/SalesforceSDKCore/SalesforceSDKCore/Classes/OAuth/SFOAuthCoordinator.m index f5cb7e9d35..81a7479e40 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 @@ -213,8 +214,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..c941fe16ce 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.supportsWelcomeDiscovery = false + XCTAssertFalse(coordinator.isDiscoveryDomain(domain)) + + SalesforceManager.shared.supportsWelcomeDiscovery = true + XCTAssertTrue(coordinator.isDiscoveryDomain(domain)) + } +}