From ed3115679a56f7155b6aec661cfd9b39a314d8ce Mon Sep 17 00:00:00 2001
From: Lukas Lechner <lukas.lechner@sap.com>
Date: Tue, 1 Jun 2021 15:35:29 +0200
Subject: [PATCH] Risk calculation cannot be restarted after time travel
 (EXPOSUREAPP-6646) (#3327)

* Store Risk Result at current server time in case the device time is incorrect

* Fix RiskLevelTaskTest.kt

* Fix RiskLevelTaskTest.kt by not using hardcoded instant value

Co-authored-by: harambasicluka <64483219+harambasicluka@users.noreply.github.com>
Co-authored-by: Chilja Gossow <49635654+chiljamgossow@users.noreply.github.com>
Co-authored-by: AlexanderAlferov <64849422+AlexanderAlferov@users.noreply.github.com>
---
 .../src/main/java/de/rki/coronawarnapp/risk/RiskLevelTask.kt  | 4 +++-
 .../test/java/de/rki/coronawarnapp/risk/RiskLevelTaskTest.kt  | 4 +++-
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/risk/RiskLevelTask.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/risk/RiskLevelTask.kt
index 086e96288..8a5d733cb 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/risk/RiskLevelTask.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/risk/RiskLevelTask.kt
@@ -93,8 +93,10 @@ class RiskLevelTask @Inject constructor(
 
         if (!configData.isDeviceTimeCorrect) {
             Timber.w("Device time is incorrect, offset: %s", configData.localOffset)
+            val currentServerTime = nowUTC.minus(configData.localOffset)
+            Timber.d("Calculated current server time: %s", currentServerTime)
             return EwRiskLevelTaskResult(
-                calculatedAt = nowUTC,
+                calculatedAt = currentServerTime,
                 failureReason = FailureReason.INCORRECT_DEVICE_TIME
             )
         }
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/risk/RiskLevelTaskTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/risk/RiskLevelTaskTest.kt
index 728fc06a9..3ef494051 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/risk/RiskLevelTaskTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/risk/RiskLevelTaskTest.kt
@@ -137,8 +137,10 @@ class RiskLevelTaskTest : BaseTest() {
         every { configData.isDeviceTimeCorrect } returns false
         every { configData.localOffset } returns Duration.standardHours(5)
 
+        val serverTime = testTimeNow.minus(configData.localOffset)
+
         createTask().run(arguments) shouldBe EwRiskLevelTaskResult(
-            calculatedAt = testTimeNow,
+            calculatedAt = serverTime,
             failureReason = EwRiskLevelResult.FailureReason.INCORRECT_DEVICE_TIME
         )
     }
-- 
GitLab