Skip to content

Commit

Permalink
refactor(GiniBankAPILibrary): Clean up code
Browse files Browse the repository at this point in the history
- rename properties
- indent code
- remove `expirationDate` from `KeychainKey` enum

BSDK-27
  • Loading branch information
ValentinaIancu-Gini committed Jan 22, 2024
1 parent ba9356f commit 2b86cf5
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 41 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ public enum GiniError: Error, GiniErrorProtocol, Equatable {
.parseError(_, let response, _),
.tooManyRequests(let response, _),
.unauthorized(let response, _),
.unknown(let response, _):
.unknown(let response, _):
return response
default:
return nil
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,19 @@ enum KeychainService: String {
}

enum KeychainKey: String {
case clientAccessToken
case clientDomain
case clientId
case clientSecret
case expirationDate
case userAccessToken
case userEmail
case userPassword

/* `userAccessToken` and `clientAccessToken` should be kept here since in all previous SDK versions
were stored in Keychain, and in this current one we need to check if exist and remove them

`userAccessToken` and `clientAccessToken` should be safely removed from Token object in the next SDK version
*/
case userAccessToken
case clientAccessToken
}

struct KeychainManagerItem {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ final class SessionManager: NSObject {
enum TaskType {
case data, download, upload(Data)
}

init(keyStore: KeyStore = KeychainStore(),
alternativeTokenSource: AlternativeTokenSource? = nil,
urlSession: URLSession = .init(configuration: .default),
Expand All @@ -80,7 +80,7 @@ final class SessionManager: NSObject {
// MARK: - SessionProtocol

extension SessionManager: SessionProtocol {

func data<T: Resource >(resource: T,
cancellationToken: CancellationToken?,
completion: @escaping CompletionResult<T.ResponseType>) {
Expand Down Expand Up @@ -122,32 +122,31 @@ public final class CancellationToken {
// MARK: - Private

private extension SessionManager {

func load<T: Resource>(resource: T,
taskType: TaskType,
cancellationToken: CancellationToken?,
completion: @escaping CompletionResult<T.ResponseType>) {
if let authServiceType = resource.authServiceType {
var value: String?
var accessToken: String?
var authType: AuthType?
switch authServiceType {
case .apiService:
value = keyStore.fetch(service: .auth, key: .userAccessToken)
authType = .bearer
case .userService(let type):
if case .basic = type {
value = AuthHelper.encoded(client)
} else if case .bearer = type {
value = keyStore.fetch(service: .auth, key: .clientAccessToken)
}
authType = type
case .apiService:
accessToken = self.userAccessToken
authType = .bearer
case .userService(let type):
if case .basic = type {
accessToken = AuthHelper.encoded(client)
} else if case .bearer = type {
accessToken = self.clientAccessToken
}
authType = type
}
if let value = value, let header = authType {

if let accessToken = accessToken, let header = authType {
var request = resource.request
let authHeader = AuthHelper.authorizationHeader(for: value, headerType: header)
let authHeader = AuthHelper.authorizationHeader(for: accessToken, headerType: header)
request.addValue(authHeader.value, forHTTPHeaderField: authHeader.key)

dataTask(for: resource,
finalRequest: request,
type: taskType,
Expand Down Expand Up @@ -218,8 +217,13 @@ private extension SessionManager {
return { [weak self] data, response, error in
guard let self = self else { return }
guard let response = response else {
completion(.failure(.noResponse)); return }
guard !(cancellationToken?.isCancelled ?? false) else { completion(.failure(.requestCancelled)); return }
completion(.failure(.noResponse))
return
}
guard !(cancellationToken?.isCancelled ?? false) else {
completion(.failure(.requestCancelled))
return
}

if let response = response as? HTTPURLResponse {
switch response.statusCode {
Expand All @@ -240,6 +244,7 @@ private extension SessionManager {
} else {
completion(.failure(.unknown(response: response, data: nil)))
}

case 400..<500:
Log("""
Failure: \(request.httpMethod!) - \(request.url!) - \(response.statusCode)
Expand Down Expand Up @@ -297,7 +302,6 @@ private extension SessionManager {
completion: completion)(Data(url: url), response, error)
}
}


private func handleError<T: Resource>(resource: T,
statusCode: Int,
Expand All @@ -308,16 +312,17 @@ private extension SessionManager {
completion: @escaping CompletionResult<T.ResponseType>) {
switch statusCode {
case 400:
guard let responseData = data else {
completion(.failure(.badRequest(response: response, data: nil)))
return
}
let errorInfo = try! JSONDecoder().decode([String: String].self, from: responseData)
guard errorInfo["error"] == "invalid_grant" else {
completion(.failure(.badRequest(response: response, data: data)))
return
}
completion(.failure(.unauthorized(response: response, data: data)))
guard let responseData = data else {
completion(.failure(.badRequest(response: response, data: nil)))
return
}

guard let errorInfo = try? JSONDecoder().decode([String: String].self, from: responseData),
errorInfo["error"] == "invalid_grant" else {
completion(.failure(.badRequest(response: response, data: data)))
return
}
completion(.failure(.unauthorized(response: response, data: data)))
case 401:
completion(.failure(.unauthorized(response: response, data: data)))
case 404:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,12 +37,12 @@ extension GiniBank {
userApi: UserDomain = .default,
trackingDelegate: GiniCaptureTrackingDelegate? = nil) -> UIViewController {
let screenCoordinator = GiniBankNetworkingScreenApiCoordinator(client: client,
resultsDelegate: resultsDelegate,
configuration: configuration,
documentMetadata: documentMetadata,
api: api,
userApi: userApi,
trackingDelegate: trackingDelegate)
resultsDelegate: resultsDelegate,
configuration: configuration,
documentMetadata: documentMetadata,
api: api,
userApi: userApi,
trackingDelegate: trackingDelegate)
return screenCoordinator.start(withDocuments: importedDocuments)
}

Expand Down

0 comments on commit 2b86cf5

Please sign in to comment.