mobile-ios/CovidSafe/API/CovidNetworking.swift

48 lines
1.4 KiB
Swift
Raw Normal View History

2020-05-08 07:49:14 +00:00
//
// CovidNetworking.swift
// CovidSafe
//
// Copyright © 2020 Australian Government. All rights reserved.
//
import Foundation
import Alamofire
final class CovidServerTrustManager: ServerTrustManager {
override func serverTrustEvaluator(forHost host: String) throws -> ServerTrustEvaluating? {
guard let evaluator = evaluators[host] else {
for key in evaluators.keys {
if (host.hasSuffix(key)) {
return evaluators[key]
}
}
if allHostsMustBeEvaluated {
throw AFError.serverTrustEvaluationFailed(reason: .noRequiredEvaluator(host: host))
}
return nil
}
return evaluator
}
}
class CovidNetworking {
static private let validCerts = [CovidCertificates.AmazonRootCA1, CovidCertificates.AmazonRootCA2, CovidCertificates.AmazonRootCA3, CovidCertificates.AmazonRootCA4, CovidCertificates.SFSRootCA]
private let evaluators = [
"covidsafe.gov.au": PinnedCertificatesTrustEvaluator(certificates: CovidNetworking.validCerts)
]
static let shared = CovidNetworking()
public let session: Session
2020-05-26 07:13:26 +00:00
init() {
2020-05-08 07:49:14 +00:00
let serverTrustPolicy = CovidServerTrustManager(evaluators: evaluators)
session = Session(serverTrustManager:serverTrustPolicy)
}
}
enum APIError: Error {
case ExpireSession
case ServerError
}