From efc68ad803a8ceb3aa5639980e5f6e957d4070c3 Mon Sep 17 00:00:00 2001 From: Christoph Hagen Date: Mon, 2 May 2022 17:27:56 +0200 Subject: [PATCH] Allow compensation of DST --- Sesame/ContentView.swift | 13 ++++++++++--- Sesame/KeyView.swift | 12 +++++++++++- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/Sesame/ContentView.swift b/Sesame/ContentView.swift index 491a5c1..735754d 100644 --- a/Sesame/ContentView.swift +++ b/Sesame/ContentView.swift @@ -8,6 +8,9 @@ struct ContentView: View { @AppStorage("counter") var nextMessageCounter: Int = 0 + @AppStorage("compensate") + var isCompensatingDaylightTime: Bool = false + @State var keyManager = KeyManagement() @@ -31,6 +34,10 @@ struct ContentView: View { @State private var showHistorySheet = false + var compensationTime: UInt32 { + isCompensatingDaylightTime ? 3600 : 0 + } + var isPerformingRequests: Bool { hasActiveRequest || state == .waitingForResponse @@ -109,7 +116,7 @@ struct ContentView: View { .frame(width: geo.size.width, height: geo.size.height) .animation(.easeInOut, value: state.color) .sheet(isPresented: $showKeySheet) { - KeyView(keyManager: $keyManager) + KeyView(keyManager: $keyManager, isCompensatingDaylightTime: $isCompensatingDaylightTime) } .sheet(isPresented: $showHistorySheet) { HistoryView(manager: history) @@ -126,8 +133,9 @@ struct ContentView: View { let count = UInt32(nextMessageCounter) let sentTime = Date() + // Add time to compensate that the device is using daylight savings time let content = Message.Content( - time: sentTime.timestamp, + time: sentTime.timestamp + compensationTime, id: count) let message = content.authenticate(using: key) let historyItem = HistoryItem(sent: message, date: sentTime) @@ -139,7 +147,6 @@ struct ContentView: View { responseTime = receivedTime state = newState let finishedItem = historyItem.didReceive(response: newState, date: receivedTime, message: message) - print("Interval: \(receivedTime.timeIntervalSince(sentTime))", "\(finishedItem.roundTripTime ?? -1)") process(item: finishedItem) } } diff --git a/Sesame/KeyView.swift b/Sesame/KeyView.swift index 170e2cf..1e001ba 100644 --- a/Sesame/KeyView.swift +++ b/Sesame/KeyView.swift @@ -5,6 +5,9 @@ struct KeyView: View { @Binding var keyManager: KeyManagement + @Binding + var isCompensatingDaylightTime: Bool + var body: some View { GeometryReader { geo in VStack(alignment: .leading, spacing: 16) { @@ -13,6 +16,11 @@ struct KeyView: View { keyManager: $keyManager, type: keyType) } + Toggle(isOn: $isCompensatingDaylightTime) { + Text("Compensate daylight savings time") + } + Text("If the remote has daylight savings time wrongly set, then the time validation will fail. Use this option to send messages with adjusted timestamps. Warning: Incorrect use of this option will allow replay attacks.") + .font(.caption) }.padding() } } @@ -20,6 +28,8 @@ struct KeyView: View { struct KeyView_Previews: PreviewProvider { static var previews: some View { - KeyView(keyManager: .constant(KeyManagement())) + KeyView( + keyManager: .constant(KeyManagement()), + isCompensatingDaylightTime: .constant(true)) } }