mobile-ios/CovidSafe/API/InitiateUploadAPI.swift

100 lines
3.3 KiB
Swift
Raw Permalink Normal View History

2020-05-08 07:49:14 +00:00
//
// InitiateUploadAPI.swift
// CovidSafe
//
// Copyright © 2020 Australian Government. All rights reserved.
//
import Foundation
import Alamofire
class InitiateUploadAPI {
static func requestUploadOTP(session: String, completion: @escaping (Bool, APIError?) -> Void) {
guard let apiHost = PlistHelper.getvalueFromInfoPlist(withKey: "API_Host", plistName: "CovidSafe-config") else {
return
}
let headers: HTTPHeaders = [
"Authorization": "Bearer \(session)"
]
2021-03-18 03:16:35 +00:00
CovidNetworking.shared.session.request("\(apiHost)/requestUploadOtp",
method: .get,
headers: headers,
interceptor: CovidRequestRetrier(retries: 3)
).validate().responseString { (response) in
2020-05-08 07:49:14 +00:00
switch response.result {
case .success:
if response.value != nil {
completion(true, nil)
} else {
completion(false, .ServerError)
}
case .failure(_):
if (response.response?.statusCode == 403) {
completion(false, .ExpireSession)
} else {
completion(false, .ServerError)
}
}
}
}
2021-02-02 00:04:43 +00:00
static func initiateUploadAPI(session: String, pin: String?, completion: @escaping (UploadResponse?, APIError?, String?) -> Void) {
2020-05-08 07:49:14 +00:00
guard let apiHost = PlistHelper.getvalueFromInfoPlist(withKey: "API_Host", plistName: "CovidSafe-config") else {
return
}
var headers: HTTPHeaders = [
"Authorization": "Bearer \(session)"
]
if let uploadPin = pin {
headers.add(name: "pin", value: uploadPin)
}
guard pin != nil else {
2021-02-02 00:04:43 +00:00
completion(nil, .ServerError, nil)
2020-05-08 07:49:14 +00:00
return
}
CovidNetworking.shared.session.request("\(apiHost)/initiateDataUpload", method: .get, headers: headers, interceptor: CovidRequestRetrier(retries: 3)).validate().responseData { (response) in
guard let respData = response.data else {
2021-02-02 00:04:43 +00:00
completion(nil, .ServerError, "[100] API")
2020-05-08 07:49:14 +00:00
return
}
2021-02-02 00:04:43 +00:00
2020-05-08 07:49:14 +00:00
switch response.result {
case .success:
do {
let uploadResponse = try JSONDecoder().decode(UploadResponse.self, from: respData)
2021-02-02 00:04:43 +00:00
completion(uploadResponse, nil, nil)
2020-05-08 07:49:14 +00:00
} catch {
2021-02-02 00:04:43 +00:00
completion(nil, .ServerError, "[101] API")
2020-05-08 07:49:14 +00:00
}
case .failure(_):
2021-02-02 00:04:43 +00:00
do {
let uploadResponse = try JSONDecoder().decode(ErrorResponse.self, from: respData)
completion(nil, .ServerError, "[\(response.response?.statusCode ?? 000)] \(uploadResponse.message)")
} catch {
completion(nil, .ServerError, "[\(response.response?.statusCode ?? 000)] API")
2020-05-08 07:49:14 +00:00
}
}
}
}
}
struct ErrorResponse: Decodable {
let message: String
}
struct UploadResponse: Decodable {
let UploadLink: String
let UploadPrefix: String
let ExpiresIn: Int
enum CodingKeys: String, CodingKey {
case UploadLink
case UploadPrefix
case ExpiresIn
}
}