Skip to content

Commit

Permalink
fix session errors
Browse files Browse the repository at this point in the history
  • Loading branch information
harsh62 committed Aug 22, 2024
1 parent eb7e2b3 commit c44d4ea
Showing 1 changed file with 23 additions and 67 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import Foundation
import Amplify

class FetchAuthSessionOperationHelper: DefaultLogger {
class FetchAuthSessionOperationHelper {

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

Expand Down Expand Up @@ -108,85 +108,41 @@ class FetchAuthSessionOperationHelper: DefaultLogger {
"Auth plugin is in an invalid state")
}

func sessionResultWithError(_ error: AuthorizationError,
authenticationState: AuthenticationState)
throws -> AuthSession {
log.verbose("Received error - \(error)")
func sessionResultWithError(
_ error: AuthorizationError,
authenticationState: AuthenticationState
) throws -> AuthSession {
log.verbose("Received fetch auth session error - \(error)")

var isSignedIn = false
if case .signedIn = authenticationState {
isSignedIn = true
}
switch error {
case .sessionError(let fetchError, let credentials):
return try sessionResultWithFetchError(fetchError,
authenticationState: authenticationState,
existingCredentials: credentials)
case .sessionExpired(let error):
let session = AuthCognitoSignedInSessionHelper.makeExpiredSignedInSession(
underlyingError: error)
return session
default:
let message = "Unknown error occurred"
let error = AuthError.unknown(message)
let session = AWSAuthCognitoSession(isSignedIn: isSignedIn,
identityIdResult: .failure(error),
awsCredentialsResult: .failure(error),
cognitoTokensResult: .failure(error))
return session
}
}

func sessionResultWithFetchError(_ error: FetchSessionError,
authenticationState: AuthenticationState,
existingCredentials: AmplifyCredentials)
throws -> AuthSession {
var authError: AuthError = error.authError

var isSignedIn = false
if case .signedIn = authenticationState {
isSignedIn = true
}

switch error {

case .notAuthorized, .noCredentialsToRefresh:
if !isSignedIn {
case .sessionError(let fetchError, _):
if (fetchError == .notAuthorized || fetchError == .noCredentialsToRefresh) && !isSignedIn {
return AuthCognitoSignedOutSessionHelper.makeSessionWithNoGuestAccess()
}

case .service(let error):
var authError: AuthError
if let convertedAuthError = (error as? AuthErrorConvertible)?.authError {
authError = convertedAuthError
} else {
authError = AuthError.service(
"Unknown service error occurred",
"See the attached error for more details",
error)
authError = fetchError.authError
}
let session = AWSAuthCognitoSession(
isSignedIn: isSignedIn,
identityIdResult: .failure(authError),
awsCredentialsResult: .failure(authError),
cognitoTokensResult: .failure(authError))
case .sessionExpired(let error):
let session = AuthCognitoSignedInSessionHelper.makeExpiredSignedInSession(
underlyingError: error)
return session
default: break

default:
break
}
let message = "Unknown error occurred"
let error = AuthError.unknown(message)
let session = AWSAuthCognitoSession(isSignedIn: isSignedIn,
identityIdResult: .failure(error),
awsCredentialsResult: .failure(error),
cognitoTokensResult: .failure(error))
return session
}

public static var log: Logger {
Amplify.Logging.logger(forCategory: CategoryType.auth.displayName, forNamespace: String(describing: self))
}

public var log: Logger {
Self.log
let session = AWSAuthCognitoSession(
isSignedIn: isSignedIn,
identityIdResult: .failure(authError),
awsCredentialsResult: .failure(authError),
cognitoTokensResult: .failure(authError))
return session
}
}

extension FetchAuthSessionOperationHelper: DefaultLogger { }

0 comments on commit c44d4ea

Please sign in to comment.