Skip to content

Commit 7c5a8b1

Browse files
chore: perform token exchange when needed during setup
1 parent eae83e4 commit 7c5a8b1

File tree

4 files changed

+32
-4
lines changed

4 files changed

+32
-4
lines changed

PACECloudSDK/IDKit/IDKit.swift

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,12 +45,20 @@ public class IDKit {
4545

4646
guard let session = SessionCache.loadSession(for: PACECloudSDK.shared.environment) else { return }
4747
self.session = session
48-
49-
handleUpdatedAccessToken(with: session.lastTokenResponse?.accessToken, exchangeToken: nil)
5048
}
5149

5250
private static func setup(with configuration: OIDConfiguration, userAgentType: UserAgentType) {
5351
sharedInstance = IDKit(with: configuration, userAgentType: userAgentType)
52+
sharedInstance?.setInitialToken()
53+
}
54+
55+
func setInitialToken() {
56+
let token = self.session?.lastTokenResponse?.accessToken ?? ""
57+
var exchangeToken: String?
58+
if let tokenExhangeConfig = configuration.tokenExchangeConfig {
59+
exchangeToken = SessionCache.loadExchangeToken(for: PACECloudSDK.shared.environment)
60+
}
61+
handleUpdatedAccessToken(with: token, exchangeToken: exchangeToken)
5462
}
5563

5664
static func determineOIDConfiguration(with customOIDConfig: OIDConfiguration?, userAgentType: UserAgentType) {

PACECloudSDK/IDKit/Session/IDKit+TokenHandling.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,7 @@ extension IDKit {
159159
var returnToken: String?
160160
if let data = data, let jsonString = data.prettyPrintedJSONString, let exchangeToken = jsonString["access_token"] as? String {
161161
returnToken = exchangeToken
162+
SessionCache.persistExchangeToken(exchangeToken, for: PACECloudSDK.shared.environment)
162163
IDKitLogger.i("[TokenExchange] Token exchange successful")
163164
} else {
164165
IDKitLogger.e("[TokenExchange] Error while token exchange \(String(describing: error))")
@@ -237,7 +238,6 @@ extension IDKit {
237238
}
238239
self.handleUpdatedAccessToken(with: accessToken, exchangeToken: newApiToken)
239240
IDKitLogger.i("[TokenRefresh] Refresh successful")
240-
241241
// Update persisted session
242242
SessionCache.persistSession(session, for: PACECloudSDK.shared.environment)
243243
return

PACECloudSDK/IDKit/Utils/IDKitConstants.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,6 @@ struct IDKitConstants {
1212

1313
struct UserDefaults {
1414
static let sessionCache = "sessionCache"
15+
static let exchangeTokenCache = "exchangeTokenCache"
1516
}
1617
}

PACECloudSDK/IDKit/Utils/SessionCache.swift

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,27 @@ class SessionCache {
5050
SDKUserDefaults.set(nil, for: $0, isUserSensitiveData: false)
5151
}
5252
}
53-
53+
5454
private static func sessionCacheKey(for environment: PACECloudSDK.Environment) -> String {
5555
"\(IDKitConstants.UserDefaults.sessionCache)_\(environment.rawValue)"
5656
}
5757
}
58+
59+
extension SessionCache {
60+
static func loadExchangeToken(for environment: PACECloudSDK.Environment) -> String? {
61+
IDKitLogger.d("Attempting to load previous exchange token...")
62+
63+
let token = SDKUserDefaults.string(for: exchangeTokenCacheKey(for: environment), isUserSensitiveData: false)
64+
return token
65+
}
66+
67+
static func persistExchangeToken(_ token: String, for environment: PACECloudSDK.Environment) {
68+
IDKitLogger.d("Persisting exchange token")
69+
70+
SDKUserDefaults.set(token, for: exchangeTokenCacheKey(for: environment), isUserSensitiveData: false)
71+
}
72+
73+
private static func exchangeTokenCacheKey(for environment: PACECloudSDK.Environment) -> String {
74+
"\(IDKitConstants.UserDefaults.exchangeTokenCache)_\(environment.rawValue)"
75+
}
76+
}

0 commit comments

Comments
 (0)