mobile-ios/CovidSafe/API/GetTempIdAPI.swift

69 lines
2.2 KiB
Swift
Raw Normal View History

2020-05-08 07:49:14 +00:00
//
// PhoneValidationAPI.swift
// CovidSafe
//
// Copyright © 2020 Australian Government. All rights reserved.
//
import Foundation
import Alamofire
2020-11-10 00:51:00 +00:00
class GetTempIdAPI: CovidSafeAuthenticatedAPI {
2020-05-08 07:49:14 +00:00
2020-08-03 06:01:39 +00:00
private static let apiVersion = 2
2020-11-10 00:51:00 +00:00
static func getTempId(completion: @escaping (String?, Int?, Swift.Error?, CovidSafeAPIError?) -> Void) {
2021-03-18 03:16:35 +00:00
guard isBusy == false else {
completion(nil ,nil ,nil, .UnknownError)
return
}
2020-05-08 07:49:14 +00:00
guard let apiHost = PlistHelper.getvalueFromInfoPlist(withKey: "API_Host", plistName: "CovidSafe-config") else {
return
}
2020-08-03 06:01:39 +00:00
let params = [
"version" : apiVersion
]
2021-03-18 03:16:35 +00:00
2021-05-13 00:39:38 +00:00
guard let authHeaders = try? authenticatedHeaders(), authHeaders.count > 0 else {
2021-03-18 03:16:35 +00:00
completion(nil, nil, nil, .TokenExpiredError)
return
}
2020-05-08 07:49:14 +00:00
CovidNetworking.shared.session.request("\(apiHost)/getTempId",
method: .get,
2020-08-03 06:01:39 +00:00
parameters: params,
2021-05-13 00:39:38 +00:00
headers: authHeaders,
2020-05-08 07:49:14 +00:00
interceptor: CovidRequestRetrier(retries: 3)).validate().responseDecodable(of: TempIdResponse.self) { (response) in
switch response.result {
case .success:
guard let tempIdResponse = response.value else { return }
2020-11-10 00:51:00 +00:00
completion(tempIdResponse.tempId, tempIdResponse.expiryTime, nil, nil)
2020-05-08 07:49:14 +00:00
case let .failure(error):
2020-11-10 00:51:00 +00:00
guard let statusCode = response.response?.statusCode else {
completion(nil, nil, error, .UnknownError)
return
}
if statusCode == 401, let respData = response.data {
completion(nil, nil, error, processUnauthorizedError(respData))
return
}
completion(nil, nil, error, .ServerError)
2020-05-08 07:49:14 +00:00
}
}
}
}
struct TempIdResponse: Decodable {
let tempId: String
let expiryTime: Int
let refreshTime: Int
enum CodingKeys: String, CodingKey {
case tempId
case expiryTime
case refreshTime
}
}