COVIDSafe code from version 1.4 (updates) (#4)

This commit is contained in:
COVIDSafe Support 2020-05-27 16:22:34 +10:00 committed by GitHub
parent b2e0c5b34c
commit 6b262be150
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
15 changed files with 140 additions and 144 deletions

View file

@ -79,3 +79,5 @@ extension Encounter {
}
}

View file

@ -10,15 +10,63 @@ import CoreData
extension EncounterRecord {
func saveToCoreData() {
func saveRemoteCentralToCoreData() throws {
// remote blob will be modelC rssi txPower msg if v1. If v2 then remoteBlob will just be msg
// localblob will be modelP
var localBlob = EncounterBlob()
localBlob.modelP = self.modelP
var remoteBlob = EncounterBlob()
remoteBlob.modelC = self.modelC
remoteBlob.rssi = self.rssi
remoteBlob.txPower = self.txPower
remoteBlob.msg = self.msg
var encryptedLocalBlob: String
var encryptedRemoteBlob: String
let localJson = try JSONEncoder().encode(localBlob)
encryptedLocalBlob = try Crypto.encrypt(dataToEncrypt: localJson)
if v == 1 {
let remoteJson = try JSONEncoder().encode(remoteBlob)
encryptedRemoteBlob = try Crypto.encrypt(dataToEncrypt: remoteJson)
} else {
encryptedRemoteBlob = self.msg!
}
saveToCoreData(remoteBlob: encryptedRemoteBlob, localBlob: encryptedLocalBlob)
}
func saveRemotePeripheralToCoreData() throws {
var remoteBlob = EncounterBlob()
remoteBlob.modelP = self.modelP
remoteBlob.msg = self.msg
var localBlob = EncounterBlob()
localBlob.modelC = self.modelC
localBlob.rssi = self.rssi
localBlob.txPower = self.txPower
var encryptedLocalBlob: String
var encryptedRemoteBlob: String
let localJson = try JSONEncoder().encode(localBlob)
encryptedLocalBlob = try Crypto.encrypt(dataToEncrypt: localJson)
if v == 1 {
let remoteJson = try JSONEncoder().encode(remoteBlob)
encryptedRemoteBlob = try Crypto.encrypt(dataToEncrypt: remoteJson)
} else {
encryptedRemoteBlob = self.msg!
}
saveToCoreData(remoteBlob: encryptedRemoteBlob, localBlob: encryptedLocalBlob)
}
private func saveToCoreData(remoteBlob: String, localBlob: String) {
DispatchQueue.main.async {
guard let persistentContainer = EncounterDB.shared.persistentContainer else {
return
}
let managedContext = appDelegate.persistentContainer.viewContext
let managedContext = persistentContainer.viewContext
let entity = NSEntityDescription.entity(forEntityName: "Encounter", in: managedContext)!
let encounter = Encounter(entity: entity, insertInto: managedContext)
encounter.set(encounterStruct: self)
encounter.set(encounterStruct: self, remoteBlob: remoteBlob, localBlob: localBlob)
do {
try managedContext.save()
} catch {

View file

@ -1,43 +0,0 @@
//
// Encounter+Event.swift
// CovidSafe
//
// Copyright © 2020 Australian Government. All rights reserved.
//
import UIKit
import CoreData
extension Encounter {
enum Event: String, CaseIterable {
case scanningStarted = "Scanning started"
case scanningStopped = "Scanning stopped"
case appStarted = "App started"
case appEnteredForeground = "App entered foreground"
case appEnteredBackground = "App entered background"
case appTerminating = "App about to terminate"
}
static func timestamp(for event: Event) {
DispatchQueue.main.async {
guard let appDelegate =
UIApplication.shared.delegate as? AppDelegate else {
return
}
let managedContext = appDelegate.persistentContainer.viewContext
let entity = NSEntityDescription.entity(forEntityName: "Encounter", in: managedContext)!
let encounter = Encounter(entity: entity, insertInto: managedContext)
encounter.msg = event.rawValue
encounter.timestamp = Date()
encounter.v = nil
do {
try managedContext.save()
} catch {
print("Could not save. \(error)")
}
}
}
}

View file

@ -1,5 +1,6 @@
// Copyright © 2020 Australian Government All rights reserved.
import UIKit
extension UIDevice {

View file

@ -49,6 +49,7 @@ public struct FeedbackSettings {
getReporterInfoAsynchronously: ((@escaping (_ usernameOrEmail: String?, _ avatarImageURL: URL?) -> Void) -> Void)? = nil
) throws {
let target = try defaultFeedbackSettings?.JIRATarget ?? JMCTarget.createTargetFromJSONOnDisk()
self.init(
JIRATarget: target,
issueType: issueType,

View file

@ -36,6 +36,7 @@
<array>
<string>bluetooth-central</string>
<string>bluetooth-peripheral</string>
<string>remote-notification</string>
</array>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>

View file

@ -244,3 +244,4 @@ class OTPViewController: UIViewController, RegistrationHandler {
}
}
}

View file

@ -9,46 +9,8 @@ import UIKit
import UserNotifications
class OnboardingStep2ViewController: UIViewController {
@IBAction func allowPermissionsBtn(_ sender: UIButton) {
requestAllPermissions()
}
@IBAction func onBackTapped(_ sender: UIButton) {
self.navigationController?.popViewController(animated: true)
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
// Show the navigation bar on other view controllers
}
func requestAllPermissions() {
UNUserNotificationCenter.current() // 1
.requestAuthorization(options: [.alert, .sound, .badge]) { // 2
granted, error in
BluetraceManager.shared.turnOn()
UserDefaults.standard.set(true, forKey: "allowedPermissions")
print("Permissions granted: \(granted)") // 3
}
}
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Get the new view controller using segue.destination.
// Pass the selected object to the new view controller.
}
*/
}

View file

@ -6,24 +6,41 @@
//
import UIKit
import SafariServices
class OnboardingStep2bViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
BluetraceManager.shared.turnOn()
UserDefaults.standard.set(true, forKey: "turnedOnBluetooth")
}
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Get the new view controller using segue.destination.
// Pass the selected object to the new view controller.
}
*/
@IBAction func learnMoreTapped(_ sender: Any) {
guard let url = URL(string: "https://www.covidsafe.gov.au/help-topics.html#bluetooth-pairing-request") else {
return
}
let safariVC = SFSafariViewController(url: url)
present(safariVC, animated: true, completion: nil)
}
@IBAction func continueBtnTapped(_ sender: UIButton) {
requestAllPermissions()
}
func requestAllPermissions() {
UNUserNotificationCenter.current() // 1
.requestAuthorization(options: [.alert, .sound, .badge]) { // 2
granted, error in
UserDefaults.standard.set(true, forKey: "allowedPermissions")
print("Permissions granted: \(granted)") // 3
DispatchQueue.main.async {
self.performSegue(withIdentifier: "showHomeSegue", sender: self)
}
}
}
}

View file

@ -1,44 +0,0 @@
//
// OnboardingStep2cViewController.swift
// CovidSafe
//
// Copyright © 2020 Australian Government. All rights reserved.
//
import UIKit
class OnboardingStep2cViewController: UIViewController {
@IBAction func enabledBluetoothBtn(_ sender: UIButton) {
UserDefaults.standard.set(true, forKey: "turnedOnBluetooth")
DispatchQueue.main.async {
UNUserNotificationCenter.current().getNotificationSettings(completionHandler: { [weak self] settings in
DispatchQueue.main.async {
if settings.authorizationStatus == .authorized && BluetraceManager.shared.isBluetoothAuthorized() && BluetraceManager.shared.isBluetoothOn() {
self?.performSegue(withIdentifier: "showFullySetUpFromTurnOnBtSegue", sender: self)
} else {
self?.performSegue(withIdentifier: "showHomeFromTurnOnBtSegue", sender: self)
}
}
})
}
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Get the new view controller using segue.destination.
// Pass the selected object to the new view controller.
}
*/
}

View file

@ -28,3 +28,4 @@ class Question2ViewController: UIViewController {
messageTextView.addLink("https://www.health.gov.au/news/health-alerts/novel-coronavirus-2019-ncov-health-alert/how-to-protect-yourself-and-others-from-coronavirus-covid-19/self-isolation-self-quarantine-for-coronavirus-covid-19", enclosedIn: "*")
}
}

File diff suppressed because one or more lines are too long

View file

@ -184,3 +184,4 @@ class UploadDataStep2VC: UIViewController, CodeInputViewDelegate {
}
}
}