summaryrefslogtreecommitdiffhomepage
path: root/ios/MullvadREST/ApiHandlers/RESTAuthorization.swift
blob: 221935178b48788ad7c40b96085ab7ef885913e1 (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
//
//  RESTAuthorization.swift
//  MullvadREST
//
//  Created by pronebird on 16/04/2022.
//  Copyright © 2025 Mullvad VPN AB. All rights reserved.
//

import Foundation
import MullvadTypes
import Operations

protocol RESTAuthorizationProvider {
    func getAuthorization(completion: @escaping @Sendable (Result<REST.Authorization, Swift.Error>) -> Void)
        -> Cancellable
}

extension REST {
    typealias Authorization = String

    struct AccessTokenProvider: RESTAuthorizationProvider {
        private let accessTokenManager: RESTAccessTokenManagement
        private let accountNumber: String

        init(accessTokenManager: RESTAccessTokenManagement, accountNumber: String) {
            self.accessTokenManager = accessTokenManager
            self.accountNumber = accountNumber
        }

        func getAuthorization(
            completion:
                @escaping @Sendable (Result<REST.Authorization, Swift.Error>)
                -> Void
        ) -> Cancellable {
            accessTokenManager.getAccessToken(accountNumber: accountNumber) { result in
                completion(
                    result.map { tokenData in
                        tokenData.accessToken
                    })
            }
        }
    }
}

extension REST.Proxy where ConfigurationType == REST.AuthProxyConfiguration {
    func createAuthorizationProvider(accountNumber: String) -> RESTAuthorizationProvider {
        REST.AccessTokenProvider(
            accessTokenManager: configuration.accessTokenManager,
            accountNumber: accountNumber
        )
    }
}