blob: 200c632f249df3e5528da9dca679f317e7b58ee7 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
//
// RESTAuthorization.swift
// MullvadREST
//
// Created by pronebird on 16/04/2022.
// Copyright © 2022 Mullvad VPN AB. All rights reserved.
//
import Foundation
import MullvadTypes
import Operations
protocol RESTAuthorizationProvider {
typealias Completion = OperationCompletion<REST.Authorization, REST.Error>
func getAuthorization(completion: @escaping (Completion) -> Void) -> Cancellable
}
extension REST {
enum Authorization {
case accountNumber(String)
case accessToken(String)
}
struct AccessTokenProvider: RESTAuthorizationProvider {
private let accessTokenManager: AccessTokenManager
private let accountNumber: String
private let retryStrategy: REST.RetryStrategy
init(
accessTokenManager: AccessTokenManager,
accountNumber: String,
retryStrategy: REST.RetryStrategy
) {
self.accessTokenManager = accessTokenManager
self.accountNumber = accountNumber
self.retryStrategy = retryStrategy
}
func getAuthorization(completion: @escaping (Completion) -> Void) -> Cancellable {
return accessTokenManager.getAccessToken(
accountNumber: accountNumber,
retryStrategy: retryStrategy
) { operationCompletion in
completion(operationCompletion.map { tokenData in
return .accessToken(tokenData.accessToken)
})
}
}
}
}
extension REST.Proxy where ConfigurationType == REST.AuthProxyConfiguration {
func createAuthorizationProvider(
accountNumber: String,
retryStrategy: REST.RetryStrategy
) -> RESTAuthorizationProvider {
return REST.AccessTokenProvider(
accessTokenManager: configuration.accessTokenManager,
accountNumber: accountNumber,
retryStrategy: retryStrategy
)
}
}
|