mirror of
https://github.com/AU-COVIDSafe/mobile-ios.git
synced 2025-04-19 13:05:21 +00:00
COVIDSafe code from version 1.8 (#15)
This commit is contained in:
parent
6f92ff8fb8
commit
2257c542ed
45 changed files with 3547 additions and 839 deletions
102
CovidSafe/API/MessageAPI.swift
Normal file
102
CovidSafe/API/MessageAPI.swift
Normal file
|
@ -0,0 +1,102 @@
|
|||
//
|
||||
// MessageAPI.swift
|
||||
// CovidSafe
|
||||
//
|
||||
// Copyright © 2020 Australian Government. All rights reserved.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import Alamofire
|
||||
import KeychainSwift
|
||||
|
||||
class MessageAPI {
|
||||
|
||||
static let keyLastApiUpdate = "keyLastApiUpdate"
|
||||
|
||||
|
||||
static func getMessagesIfNeeded(completion: @escaping (MessageResponse?, Swift.Error?) -> Void) {
|
||||
if shouldGetMessages() {
|
||||
guard let token = UserDefaults.standard.string(forKey: "deviceTokenForAPN") else {
|
||||
return
|
||||
}
|
||||
// Make API call to get messages
|
||||
let messageRequest = MessageRequest(remotePushToken: token)
|
||||
getMessages(msgRequest: messageRequest, completion: completion)
|
||||
}
|
||||
}
|
||||
|
||||
private static func shouldGetMessages() -> Bool {
|
||||
let lastChecked = UserDefaults.standard.double(forKey: keyLastApiUpdate)
|
||||
var shouldGetMessages = true
|
||||
|
||||
let calendar = NSCalendar.current
|
||||
let currentDate = calendar.startOfDay(for: Date())
|
||||
|
||||
if lastChecked > 0 {
|
||||
let lastCheckedDate = Date(timeIntervalSince1970: lastChecked)
|
||||
let components = calendar.dateComponents([.day], from: lastCheckedDate, to: currentDate)
|
||||
|
||||
if let numDays = components.day {
|
||||
shouldGetMessages = numDays > 0
|
||||
}
|
||||
}
|
||||
|
||||
return shouldGetMessages
|
||||
}
|
||||
|
||||
static func getMessages(msgRequest: MessageRequest,
|
||||
completion: @escaping (MessageResponse?, Swift.Error?) -> Void) {
|
||||
let keychain = KeychainSwift()
|
||||
guard let apiHost = PlistHelper.getvalueFromInfoPlist(withKey: "API_Host", plistName: "CovidCare-config") else {
|
||||
return
|
||||
}
|
||||
|
||||
guard let token = keychain.get("JWT_TOKEN") else {
|
||||
completion(nil, nil)
|
||||
return
|
||||
}
|
||||
let headers: HTTPHeaders = [
|
||||
"Authorization": "Bearer \(token)"
|
||||
]
|
||||
|
||||
var params = [
|
||||
"os" : "ios-\(UIDevice.current.systemVersion)"
|
||||
]
|
||||
|
||||
if let buildString = Bundle.main.version {
|
||||
params["appversion"] = "\(buildString)"
|
||||
}
|
||||
if let remoteToken = msgRequest.remotePushToken {
|
||||
params["token"] = remoteToken
|
||||
}
|
||||
CovidNetworking.shared.session.request("\(apiHost)/messages",
|
||||
method: .get,
|
||||
parameters: params,
|
||||
headers: headers
|
||||
).validate().responseDecodable(of: MessageResponse.self) { (response) in
|
||||
switch response.result {
|
||||
case .success:
|
||||
guard let messageResponse = response.value else { return }
|
||||
|
||||
// save successful timestamp
|
||||
let calendar = NSCalendar.current
|
||||
let currentDate = calendar.startOfDay(for: Date())
|
||||
UserDefaults.standard.set(currentDate.timeIntervalSince1970, forKey: keyLastApiUpdate)
|
||||
|
||||
completion(messageResponse, nil)
|
||||
case let .failure(error):
|
||||
completion(nil, error)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct MessageRequest {
|
||||
var remotePushToken: String?
|
||||
}
|
||||
|
||||
struct MessageResponse: Decodable {
|
||||
let message: String
|
||||
let forceappupgrade: Bool
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue