my-files-sample/Libraries/Sources/APIService/Use Cases/MakeAuthorizationHeaderUseCase.swift

45 lines
1.2 KiB
Swift
Raw Normal View History

//
// 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
private extension String.Formats {
static let usernameAndPassword = "%@:%@"
static let authorizationValue = "Basic %@"
}