Skip to content

Commit c8a80b5

Browse files
authored
chore(auth): Cleanup on FetchAuthSessionOperationhelper (#2714)
1 parent 2c14703 commit c8a80b5

File tree

3 files changed

+57
-57
lines changed

3 files changed

+57
-57
lines changed

AmplifyPlugins/Auth/Sources/AWSCognitoAuthPlugin/Actions/RefreshAuthorizationSession/InitializeRefreshSession.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ struct InitializeRefreshSession: Action {
4444
region: config.region,
4545
poolId: config.poolId)
4646
if isForceRefresh ||
47-
tokens.doesExpire(in: FetchAuthSessionOperationHelper.expiryBufferInSeconds) {
47+
tokens.doesExpire(in: AmplifyCredentials.expiryBufferInSeconds) {
4848
event = .init(eventType: .refreshCognitoUserPoolWithIdentityId(signedInData, identityID))
4949
} else {
5050
event = .init(eventType: .refreshAWSCredentialsWithUserPool(identityID,

AmplifyPlugins/Auth/Sources/AWSCognitoAuthPlugin/CredentialStorage/AmplifyCredentials+CognitoSession.swift

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import Foundation
99
import Amplify
1010

1111
extension AmplifyCredentials {
12-
12+
static let expiryBufferInSeconds = TimeInterval.seconds(2 * 60)
1313
var cognitoSession: AWSAuthCognitoSession {
1414

1515
switch self {
@@ -48,4 +48,36 @@ extension AmplifyCredentials {
4848
return AuthCognitoSignedOutSessionHelper.makeSessionWithNoGuestAccess()
4949
}
5050
}
51+
52+
func areValid() -> Bool {
53+
return self != .noCredentials &&
54+
!doesExpire(in: Self.expiryBufferInSeconds)
55+
}
56+
57+
private func doesExpire(in expiryBuffer: TimeInterval) -> Bool {
58+
var doesExpire = false
59+
switch self {
60+
61+
case .userPoolOnly(signedInData: let data):
62+
doesExpire = data.cognitoUserPoolTokens.doesExpire(in: expiryBuffer)
63+
64+
case .identityPoolOnly(identityID: _, credentials: let awsCredentials):
65+
doesExpire = awsCredentials.doesExpire(in: expiryBuffer)
66+
67+
case .userPoolAndIdentityPool(signedInData: let data,
68+
identityID: _,
69+
credentials: let awsCredentials):
70+
doesExpire = (
71+
data.cognitoUserPoolTokens.doesExpire(in: expiryBuffer) ||
72+
awsCredentials.doesExpire(in: expiryBuffer)
73+
)
74+
75+
case .identityPoolWithFederation(_, _, let awsCredentials):
76+
doesExpire = awsCredentials.doesExpire(in: expiryBuffer)
77+
78+
case .noCredentials:
79+
doesExpire = true
80+
}
81+
return doesExpire
82+
}
5183
}

AmplifyPlugins/Auth/Sources/AWSCognitoAuthPlugin/Operations/Helpers/FetchAuthSessionOperationHelper.swift

Lines changed: 23 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import Amplify
1010

1111
class FetchAuthSessionOperationHelper: DefaultLogger {
1212

13-
static let expiryBufferInSeconds = TimeInterval.seconds(2 * 60)
13+
1414

1515
typealias FetchAuthSessionCompletion = (Result<AuthSession, AuthError>) -> Void
1616

@@ -35,8 +35,8 @@ class FetchAuthSessionOperationHelper: DefaultLogger {
3535

3636
case .sessionEstablished(let credentials):
3737
log.verbose("Session exists, checking validity")
38-
return try await postAuthSessionEvent(
39-
forCredential: credentials,
38+
return try await refreshIfRequired(
39+
existingCredentials: credentials,
4040
authStateMachine: authStateMachine,
4141
forceRefresh: forceRefresh)
4242

@@ -46,8 +46,8 @@ class FetchAuthSessionOperationHelper: DefaultLogger {
4646
let session = AuthCognitoSignedInSessionHelper.makeExpiredSignedInSession()
4747
return session
4848
} else if case .sessionError(_, let credentials) = error {
49-
return try await postAuthSessionEvent(
50-
forCredential: credentials,
49+
return try await refreshIfRequired(
50+
existingCredentials: credentials,
5151
authStateMachine: authStateMachine,
5252
forceRefresh: forceRefresh)
5353
} else {
@@ -62,60 +62,28 @@ class FetchAuthSessionOperationHelper: DefaultLogger {
6262
}
6363
}
6464

65-
func postAuthSessionEvent(
66-
forCredential credentials: AmplifyCredentials,
65+
func refreshIfRequired(
66+
existingCredentials credentials: AmplifyCredentials,
6767
authStateMachine: AuthStateMachine,
6868
forceRefresh: Bool) async throws -> AuthSession {
69-
switch credentials {
70-
71-
case .userPoolOnly(signedInData: let data):
72-
if data.cognitoUserPoolTokens.doesExpire(in: Self.expiryBufferInSeconds) ||
73-
forceRefresh {
74-
let event = AuthorizationEvent(eventType: .refreshSession(forceRefresh))
75-
await authStateMachine.send(event)
76-
return try await listenForSession(authStateMachine: authStateMachine)
77-
} else {
78-
return credentials.cognitoSession
79-
}
80-
81-
case .identityPoolOnly(identityID: _, credentials: let awsCredentials):
82-
if awsCredentials.doesExpire(in: Self.expiryBufferInSeconds) ||
83-
forceRefresh {
84-
let event = AuthorizationEvent(eventType: .refreshSession(forceRefresh))
85-
await authStateMachine.send(event)
86-
return try await listenForSession(authStateMachine: authStateMachine)
87-
} else {
88-
return credentials.cognitoSession
89-
}
9069

91-
case .userPoolAndIdentityPool(signedInData: let data,
92-
identityID: _,
93-
credentials: let awsCredentials):
94-
if data.cognitoUserPoolTokens.doesExpire(in: Self.expiryBufferInSeconds) ||
95-
awsCredentials.doesExpire(in: Self.expiryBufferInSeconds) ||
96-
forceRefresh {
97-
let event = AuthorizationEvent(eventType: .refreshSession(forceRefresh))
98-
await authStateMachine.send(event)
99-
return try await listenForSession(authStateMachine: authStateMachine)
70+
var event: AuthorizationEvent
71+
if forceRefresh || !credentials.areValid() {
72+
if case .identityPoolWithFederation(
73+
let federatedToken,
74+
let identityId,
75+
_
76+
) = credentials {
77+
event = AuthorizationEvent(
78+
eventType: .startFederationToIdentityPool(federatedToken, identityId)
79+
)
10080
} else {
101-
return credentials.cognitoSession
81+
event = AuthorizationEvent(eventType: .refreshSession(forceRefresh))
10282
}
103-
104-
case .identityPoolWithFederation(let federatedToken, let identityId, let awsCredentials):
105-
if awsCredentials.doesExpire() || forceRefresh {
106-
let event = AuthorizationEvent.init(
107-
eventType: .startFederationToIdentityPool(federatedToken, identityId))
108-
await authStateMachine.send(event)
109-
return try await listenForSession(authStateMachine: authStateMachine)
110-
} else {
111-
return credentials.cognitoSession
112-
}
113-
114-
case .noCredentials:
115-
let event = AuthorizationEvent(eventType: .refreshSession(forceRefresh))
11683
await authStateMachine.send(event)
11784
return try await listenForSession(authStateMachine: authStateMachine)
11885
}
86+
return credentials.cognitoSession
11987
}
12088

12189
func listenForSession(authStateMachine: AuthStateMachine) async throws -> AuthSession {
@@ -155,8 +123,8 @@ class FetchAuthSessionOperationHelper: DefaultLogger {
155123
switch error {
156124
case .sessionError(let fetchError, let credentials):
157125
return try sessionResultWithFetchError(fetchError,
158-
authenticationState: authenticationState,
159-
existingCredentials: credentials)
126+
authenticationState: authenticationState,
127+
existingCredentials: credentials)
160128
case .sessionExpired:
161129
let session = AuthCognitoSignedInSessionHelper.makeExpiredSignedInSession()
162130
return session
@@ -172,8 +140,8 @@ class FetchAuthSessionOperationHelper: DefaultLogger {
172140
}
173141

174142
func sessionResultWithFetchError(_ error: FetchSessionError,
175-
authenticationState: AuthenticationState,
176-
existingCredentials: AmplifyCredentials)
143+
authenticationState: AuthenticationState,
144+
existingCredentials: AmplifyCredentials)
177145
throws -> AuthSession {
178146

179147
var isSignedIn = false

0 commit comments

Comments
 (0)