2022-12-04 01:13:35 +01:00
|
|
|
//
|
|
|
|
// MakeAuthorizationHeaderUseCase.swift
|
|
|
|
// APIService
|
|
|
|
//
|
|
|
|
// Created by Javier Cicchelli on 04/12/2022.
|
|
|
|
// Copyright © 2022 Röck+Cöde. All rights reserved.
|
|
|
|
//
|
|
|
|
|
|
|
|
import Foundation
|
|
|
|
|
|
|
|
struct MakeAuthorizationHeaderUseCase {
|
|
|
|
func callAsFunction(
|
|
|
|
username: String,
|
|
|
|
password: String
|
|
|
|
) throws -> [String: String] {
|
|
|
|
guard !username.isEmpty else { throw MakeAuthorizationHeaderError.usernameIsEmpty }
|
|
|
|
guard !password.isEmpty else { throw MakeAuthorizationHeaderError.passwordIsEmpty }
|
|
|
|
|
|
|
|
let loginString = String(format: .Formats.usernameAndPassword, username, password)
|
|
|
|
|
|
|
|
guard let loginData = loginString.data(using: .utf8) else {
|
|
|
|
throw MakeAuthorizationHeaderError.loginDataNotCreated
|
|
|
|
}
|
|
|
|
|
|
|
|
let loginBase64 = loginData.base64EncodedString()
|
|
|
|
|
|
|
|
return [.Header.Keys.authorization: String(format: .Formats.authorizationValue, loginBase64)]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// MARK: - Errors
|
|
|
|
|
|
|
|
enum MakeAuthorizationHeaderError: Error {
|
|
|
|
case usernameIsEmpty
|
|
|
|
case passwordIsEmpty
|
|
|
|
case loginDataNotCreated
|
|
|
|
}
|
|
|
|
|
|
|
|
// MARK: - String+Formats
|
|
|
|
|
2022-12-04 02:29:46 +01:00
|
|
|
private extension String.Formats {
|
|
|
|
static let usernameAndPassword = "%@:%@"
|
|
|
|
static let authorizationValue = "Basic %@"
|
2022-12-04 01:13:35 +01:00
|
|
|
}
|