Skip to content

Commit ece99a5

Browse files
authored
Merge pull request #175 from ProteGO-Safe/release/4.12.0
Release/4.12.0
2 parents 554931d + 5610873 commit ece99a5

12 files changed

Lines changed: 61 additions & 122 deletions

File tree

README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,11 @@ Dev: ./app/src/dev/google-services.json
7777

7878
## ChangeLog
7979

80+
**4.12.0**
81+
82+
- Disabled SafetyNet token check for lab test
83+
- Updated UI
84+
8085
**4.11.0**
8186

8287
- Updated UI

app/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ android {
2828
applicationId "pl.gov.mc.protegosafe"
2929
minSdkVersion 21
3030
targetSdkVersion 29
31-
versionCode 89
32-
versionName "4.11.0"
31+
versionCode 91
32+
versionName "4.12.0"
3333

3434
setProperty("archivesBaseName", "protegosafe-${defaultConfig.versionName}-${defaultConfig.versionCode}")
3535

data/src/main/java/pl/gov/mc/protegosafe/data/cloud/CovidTestService.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,21 +14,18 @@ interface CovidTestService {
1414

1515
@POST("${BuildConfig.COVID_TEST_URL}createSubscription")
1616
fun createSubscription(
17-
@Header(SAFETY_TOKEN_HEADER) safetynetToken: String,
1817
@Body createTestSubscriptionRequestData: CreateTestSubscriptionRequestData,
1918
@Header(USER_AGENT_HEADER) userAgent: String = USER_AGENT_ANDROID
2019
): Single<GetTokenResponseData>
2120

2221
@POST("${BuildConfig.COVID_TEST_URL}getSubscription")
2322
fun getSubscriptionStatus(
2423
@Header(AUTHORIZATION_HEADER) accessToken: String,
25-
@Header(SAFETY_TOKEN_HEADER) safetynetToken: String,
2624
@Body testSubscriptionStatusRequestBody: TestSubscriptionStatusRequestBody,
2725
@Header(USER_AGENT_HEADER) userAgent: String = USER_AGENT_ANDROID
2826
): Single<SubscriptionStatusResponseData>
2927
}
3028

31-
private const val SAFETY_TOKEN_HEADER = "Safety-Token"
3229
private const val USER_AGENT_HEADER = "User-Agent"
3330
private const val USER_AGENT_ANDROID = "android"
3431
private const val AUTHORIZATION_HEADER = "Authorization"

data/src/main/java/pl/gov/mc/protegosafe/data/di/DataModule.kt

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -18,80 +18,80 @@ import org.koin.dsl.module
1818
import pl.gov.mc.protegosafe.data.BuildConfig
1919
import pl.gov.mc.protegosafe.data.Consts
2020
import pl.gov.mc.protegosafe.data.KeyUploadSystemInfoRepositoryImpl
21-
import pl.gov.mc.protegosafe.data.cloud.DiagnosisKeyDownloadService
2221
import pl.gov.mc.protegosafe.data.cloud.CovidInfoService
2322
import pl.gov.mc.protegosafe.data.cloud.CovidTestService
23+
import pl.gov.mc.protegosafe.data.cloud.DiagnosisKeyDownloadService
2424
import pl.gov.mc.protegosafe.data.cloud.UploadTemporaryExposureKeysService
2525
import pl.gov.mc.protegosafe.data.db.AppLanguageDataStore
26+
import pl.gov.mc.protegosafe.data.db.AppVersionDataStore
27+
import pl.gov.mc.protegosafe.data.db.CovidInfoDataStore
28+
import pl.gov.mc.protegosafe.data.db.CovidStatsDataStore
2629
import pl.gov.mc.protegosafe.data.db.RouteDataStore
2730
import pl.gov.mc.protegosafe.data.db.SafetyNetDataStore
2831
import pl.gov.mc.protegosafe.data.db.SharedPreferencesDelegates
2932
import pl.gov.mc.protegosafe.data.db.TriageDataStore
30-
import pl.gov.mc.protegosafe.data.db.AppVersionDataStore
31-
import pl.gov.mc.protegosafe.data.db.CovidInfoDataStore
32-
import pl.gov.mc.protegosafe.data.db.CovidStatsDataStore
3333
import pl.gov.mc.protegosafe.data.db.WebViewLoggingDataStore
3434
import pl.gov.mc.protegosafe.data.db.WorkersIntervalDataStore
3535
import pl.gov.mc.protegosafe.data.db.dao.ActivitiesDao
36-
import pl.gov.mc.protegosafe.data.db.dao.ExposureDao
3736
import pl.gov.mc.protegosafe.data.db.dao.CovidInfoDao
37+
import pl.gov.mc.protegosafe.data.db.dao.CovidTestDao
3838
import pl.gov.mc.protegosafe.data.db.dao.DiagnosisKeyDao
39+
import pl.gov.mc.protegosafe.data.db.dao.ExposureDao
3940
import pl.gov.mc.protegosafe.data.db.realm.RealmDatabaseBuilder
4041
import pl.gov.mc.protegosafe.data.mapper.ApiExceptionMapperImpl
4142
import pl.gov.mc.protegosafe.data.mapper.DiagnosisKeyDownloadConfigurationMapperImpl
4243
import pl.gov.mc.protegosafe.data.mapper.ExposureConfigurationMapperImpl
44+
import pl.gov.mc.protegosafe.data.mapper.FcmNotificationMapperImpl
4345
import pl.gov.mc.protegosafe.data.mapper.IncomingBridgePayloadMapperImpl
4446
import pl.gov.mc.protegosafe.data.mapper.OutgoingBridgePayloadMapperImpl
4547
import pl.gov.mc.protegosafe.data.mapper.PinMapperImpl
4648
import pl.gov.mc.protegosafe.data.mapper.RetrofitExceptionMapperImpl
4749
import pl.gov.mc.protegosafe.data.mapper.RiskLevelConfigurationMapperImpl
48-
import pl.gov.mc.protegosafe.data.db.dao.CovidTestDao
49-
import pl.gov.mc.protegosafe.data.mapper.FcmNotificationMapperImpl
5050
import pl.gov.mc.protegosafe.data.mapper.TestSubscriptionConfigurationMapperImpl
5151
import pl.gov.mc.protegosafe.data.model.OutgoingBridgeDataResultComposerImpl
5252
import pl.gov.mc.protegosafe.data.repository.ActivitiesRepositoryImpl
5353
import pl.gov.mc.protegosafe.data.repository.CacheStoreImpl
54+
import pl.gov.mc.protegosafe.data.repository.CertificatePinningRepositoryImpl
55+
import pl.gov.mc.protegosafe.data.repository.CovidInfoRepositoryImpl
56+
import pl.gov.mc.protegosafe.data.repository.CovidTestRepositoryImpl
5457
import pl.gov.mc.protegosafe.data.repository.DiagnosisKeyRepositoryImpl
5558
import pl.gov.mc.protegosafe.data.repository.ExposureNotificationRepositoryImpl
5659
import pl.gov.mc.protegosafe.data.repository.ExposureRepositoryImpl
57-
import pl.gov.mc.protegosafe.data.repository.RouteRepositoryImpl
58-
import pl.gov.mc.protegosafe.data.repository.PendingActivityResultRepositoryImpl
59-
import pl.gov.mc.protegosafe.data.repository.CertificatePinningRepositoryImpl
6060
import pl.gov.mc.protegosafe.data.repository.MigrationRepositoryImpl
61-
import pl.gov.mc.protegosafe.data.repository.RemoteConfigurationRepositoryImpl
62-
import pl.gov.mc.protegosafe.data.repository.CovidInfoRepositoryImpl
63-
import pl.gov.mc.protegosafe.data.repository.CovidTestRepositoryImpl
61+
import pl.gov.mc.protegosafe.data.repository.PendingActivityResultRepositoryImpl
6462
import pl.gov.mc.protegosafe.data.repository.ProtobufRepositoryImpl
63+
import pl.gov.mc.protegosafe.data.repository.RemoteConfigurationRepositoryImpl
64+
import pl.gov.mc.protegosafe.data.repository.RouteRepositoryImpl
6565
import pl.gov.mc.protegosafe.data.repository.SafetyNetRepositoryImpl
6666
import pl.gov.mc.protegosafe.data.repository.TemporaryExposureKeysUploadRepositoryImpl
6767
import pl.gov.mc.protegosafe.data.repository.TriageRepositoryImpl
6868
import pl.gov.mc.protegosafe.data.repository.UiRequestCacheRepositoryImpl
6969
import pl.gov.mc.protegosafe.data.repository.WorkerStateRepositoryImpl
7070
import pl.gov.mc.protegosafe.domain.model.ApiExceptionMapper
71-
import pl.gov.mc.protegosafe.domain.model.ExposureConfigurationMapper
72-
import pl.gov.mc.protegosafe.domain.model.OutgoingBridgeDataResultComposer
73-
import pl.gov.mc.protegosafe.domain.model.PinMapper
7471
import pl.gov.mc.protegosafe.domain.model.DiagnosisKeyDownloadConfigurationMapper
72+
import pl.gov.mc.protegosafe.domain.model.ExposureConfigurationMapper
7573
import pl.gov.mc.protegosafe.domain.model.FcmNotificationMapper
7674
import pl.gov.mc.protegosafe.domain.model.IncomingBridgePayloadMapper
75+
import pl.gov.mc.protegosafe.domain.model.OutgoingBridgeDataResultComposer
7776
import pl.gov.mc.protegosafe.domain.model.OutgoingBridgePayloadMapper
77+
import pl.gov.mc.protegosafe.domain.model.PinMapper
7878
import pl.gov.mc.protegosafe.domain.model.RetrofitExceptionMapper
7979
import pl.gov.mc.protegosafe.domain.model.RiskLevelConfigurationMapper
8080
import pl.gov.mc.protegosafe.domain.model.TestSubscriptionConfigurationMapper
8181
import pl.gov.mc.protegosafe.domain.repository.ActivitiesRepository
8282
import pl.gov.mc.protegosafe.domain.repository.CacheStore
83+
import pl.gov.mc.protegosafe.domain.repository.CertificatePinningRepository
84+
import pl.gov.mc.protegosafe.domain.repository.CovidInfoRepository
85+
import pl.gov.mc.protegosafe.domain.repository.CovidTestRepository
8386
import pl.gov.mc.protegosafe.domain.repository.DiagnosisKeyRepository
8487
import pl.gov.mc.protegosafe.domain.repository.ExposureNotificationRepository
8588
import pl.gov.mc.protegosafe.domain.repository.ExposureRepository
8689
import pl.gov.mc.protegosafe.domain.repository.KeyUploadSystemInfoRepository
87-
import pl.gov.mc.protegosafe.domain.repository.RouteRepository
88-
import pl.gov.mc.protegosafe.domain.repository.PendingActivityResultRepository
89-
import pl.gov.mc.protegosafe.domain.repository.CertificatePinningRepository
9090
import pl.gov.mc.protegosafe.domain.repository.MigrationRepository
91-
import pl.gov.mc.protegosafe.domain.repository.RemoteConfigurationRepository
92-
import pl.gov.mc.protegosafe.domain.repository.CovidInfoRepository
93-
import pl.gov.mc.protegosafe.domain.repository.CovidTestRepository
91+
import pl.gov.mc.protegosafe.domain.repository.PendingActivityResultRepository
9492
import pl.gov.mc.protegosafe.domain.repository.ProtobufRepository
93+
import pl.gov.mc.protegosafe.domain.repository.RemoteConfigurationRepository
94+
import pl.gov.mc.protegosafe.domain.repository.RouteRepository
9595
import pl.gov.mc.protegosafe.domain.repository.SafetyNetRepository
9696
import pl.gov.mc.protegosafe.domain.repository.TemporaryExposureKeysUploadRepository
9797
import pl.gov.mc.protegosafe.domain.repository.TriageRepository
@@ -147,7 +147,7 @@ val dataModule = module {
147147
single<WorkerStateRepository> { WorkerStateRepositoryImpl(get()) }
148148
single<CertificatePinningRepository> { CertificatePinningRepositoryImpl(get()) }
149149
single { SafetyNetDataStore(get()) }
150-
single<SafetyNetRepository> { SafetyNetRepositoryImpl(get(), get()) }
150+
single<SafetyNetRepository> { SafetyNetRepositoryImpl(get()) }
151151
single<RiskLevelConfigurationMapper> { RiskLevelConfigurationMapperImpl() }
152152
single { AppVersionDataStore(get()) }
153153
single<MigrationRepository> { MigrationRepositoryImpl(get(), get(), get(), get()) }
@@ -160,7 +160,7 @@ val dataModule = module {
160160
single<OutgoingBridgePayloadMapper> { OutgoingBridgePayloadMapperImpl() }
161161
single { DiagnosisKeyDao() }
162162
single { CovidTestDao() }
163-
single<CovidTestRepository> { CovidTestRepositoryImpl(get(), get(), get()) }
163+
single<CovidTestRepository> { CovidTestRepositoryImpl(get(), get()) }
164164
single<TestSubscriptionConfigurationMapper> { TestSubscriptionConfigurationMapperImpl() }
165165
single<UiRequestCacheRepository> { UiRequestCacheRepositoryImpl(get(), get(), get()) }
166166
single<CacheStore> { CacheStoreImpl() }

data/src/main/java/pl/gov/mc/protegosafe/data/model/covidtest/TestSubscriptionCreateRequest.kt

Lines changed: 0 additions & 6 deletions
This file was deleted.

data/src/main/java/pl/gov/mc/protegosafe/data/model/covidtest/TestSubscriptionStatusRequest.kt

Lines changed: 0 additions & 7 deletions
This file was deleted.

data/src/main/java/pl/gov/mc/protegosafe/data/repository/CovidTestRepositoryImpl.kt

Lines changed: 27 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -4,80 +4,50 @@ import android.os.Build
44
import io.reactivex.Completable
55
import io.reactivex.Maybe
66
import io.reactivex.Single
7-
import io.reactivex.schedulers.Schedulers
87
import pl.gov.mc.protegosafe.data.cloud.CovidTestService
9-
import pl.gov.mc.protegosafe.data.mapper.toEntity
10-
import pl.gov.mc.protegosafe.data.model.covidtest.CreateTestSubscriptionRequestData
118
import pl.gov.mc.protegosafe.data.db.dao.CovidTestDao
9+
import pl.gov.mc.protegosafe.data.mapper.toEntity
1210
import pl.gov.mc.protegosafe.data.mapper.toTestSubscriptionDto
13-
import pl.gov.mc.protegosafe.data.model.covidtest.TestSubscriptionCreateRequest
14-
import pl.gov.mc.protegosafe.data.model.covidtest.TestSubscriptionStatusRequest
11+
import pl.gov.mc.protegosafe.data.model.covidtest.CreateTestSubscriptionRequestData
1512
import pl.gov.mc.protegosafe.data.model.covidtest.TestSubscriptionStatusRequestBody
16-
import pl.gov.mc.protegosafe.domain.model.TestSubscriptionStatus
1713
import pl.gov.mc.protegosafe.domain.model.TestSubscriptionItem
14+
import pl.gov.mc.protegosafe.domain.model.TestSubscriptionStatus
1815
import pl.gov.mc.protegosafe.domain.repository.CovidTestRepository
19-
import pl.gov.mc.protegosafe.domain.repository.SafetyNetRepository
20-
import java.util.UUID
2116

2217
class CovidTestRepositoryImpl(
2318
private val covidTestDao: CovidTestDao,
24-
private val covidTestService: CovidTestService,
25-
private val safetyNetRepository: SafetyNetRepository,
19+
private val covidTestService: CovidTestService
2620
) : CovidTestRepository {
2721

2822
override fun getTestSubscription(testPin: String, guid: String): Single<TestSubscriptionItem> {
29-
return getSafetynetToken()
30-
.observeOn(Schedulers.io())
31-
.map { safetynetToken ->
32-
TestSubscriptionCreateRequest(
33-
safetynetToken = safetynetToken,
34-
createTestSubscriptionRequestData = CreateTestSubscriptionRequestData(
35-
code = testPin,
36-
guid = guid
37-
)
38-
)
39-
}
40-
.flatMap { createSubscriptionRequest ->
41-
covidTestService.createSubscription(
42-
createSubscriptionRequest.safetynetToken,
43-
createSubscriptionRequest.createTestSubscriptionRequestData
44-
)
45-
}.map {
46-
TestSubscriptionItem(
47-
guid = guid,
48-
accessToken = it.token
49-
)
50-
}
23+
return covidTestService.createSubscription(
24+
createTestSubscriptionRequestData = CreateTestSubscriptionRequestData(
25+
code = testPin,
26+
guid = guid
27+
)
28+
).map {
29+
TestSubscriptionItem(
30+
guid = guid,
31+
accessToken = it.token
32+
)
33+
}
5134
}
5235

5336
override fun updateTestSubscriptionStatus(
5437
testSubscription: TestSubscriptionItem
5538
): Single<TestSubscriptionItem> {
56-
return getSafetynetToken()
57-
.observeOn(Schedulers.io())
58-
.map { safetynetToken ->
59-
TestSubscriptionStatusRequest(
60-
accessToken = testSubscription.accessToken,
61-
safetynetToken = safetynetToken,
62-
testSubscriptionStatusRequestBody = TestSubscriptionStatusRequestBody(
63-
testSubscription.guid
64-
)
65-
)
66-
}
67-
.observeOn(Schedulers.io())
68-
.flatMap {
69-
covidTestService.getSubscriptionStatus(
70-
accessToken = it.accessToken,
71-
safetynetToken = it.safetynetToken,
72-
testSubscriptionStatusRequestBody = it.testSubscriptionStatusRequestBody
73-
)
74-
}.map {
75-
TestSubscriptionItem(
76-
guid = it.guid,
77-
accessToken = testSubscription.accessToken,
78-
status = TestSubscriptionStatus.valueOf(it.status)
79-
)
80-
}
39+
return covidTestService.getSubscriptionStatus(
40+
accessToken = testSubscription.accessToken,
41+
testSubscriptionStatusRequestBody = TestSubscriptionStatusRequestBody(
42+
testSubscription.guid
43+
)
44+
).map {
45+
TestSubscriptionItem(
46+
guid = it.guid,
47+
accessToken = testSubscription.accessToken,
48+
status = TestSubscriptionStatus.valueOf(it.status)
49+
)
50+
}
8151
}
8252

8353
override fun saveTestSubscription(testSubscriptionItem: TestSubscriptionItem): Completable {
@@ -107,11 +77,4 @@ class CovidTestRepositoryImpl(
10777
Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
10878
}
10979
}
110-
111-
private fun getSafetynetToken(): Single<String> {
112-
return safetyNetRepository.generateNonce(UUID.randomUUID().toString())
113-
.flatMap {
114-
safetyNetRepository.getTokenFor(it)
115-
}
116-
}
11780
}

data/src/main/java/pl/gov/mc/protegosafe/data/repository/SafetyNetRepositoryImpl.kt

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,12 @@ package pl.gov.mc.protegosafe.data.repository
22

33
import io.reactivex.Single
44
import pl.gov.mc.protegosafe.data.db.SafetyNetDataStore
5-
import pl.gov.mc.protegosafe.domain.manager.SafetyNetAttestationWrapper
65
import pl.gov.mc.protegosafe.domain.repository.SafetyNetRepository
76
import java.io.ByteArrayOutputStream
87
import java.security.SecureRandom
98

109
class SafetyNetRepositoryImpl(
11-
private val safetyNetDataStore: SafetyNetDataStore,
12-
private val safetyNetAttestationWrapper: SafetyNetAttestationWrapper
10+
private val safetyNetDataStore: SafetyNetDataStore
1311
) : SafetyNetRepository {
1412

1513
override fun isDeviceChecked(): Single<Boolean> {
@@ -20,10 +18,6 @@ class SafetyNetRepositoryImpl(
2018
safetyNetDataStore.isDeviceChecked = true
2119
}
2220

23-
override fun getTokenFor(byteArray: ByteArray): Single<String> {
24-
return safetyNetAttestationWrapper.getTokenFor(byteArray)
25-
}
26-
2721
/**
2822
* Generates a 16-byte nonce with additional data.
2923
* The nonce should also include additional information, such as a user id or any other details

device/src/main/java/pl/gov/mc/protegosafe/device/manager/SafetyNetAttestationWrapperImpl.kt

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@ import com.google.android.gms.safetynet.SafetyNet
55
import com.google.common.io.BaseEncoding
66
import com.google.gson.Gson
77
import io.reactivex.Single
8+
import pl.gov.mc.protegosafe.device.extension.toSingle
9+
import pl.gov.mc.protegosafe.device.model.AttestationData
810
import pl.gov.mc.protegosafe.domain.manager.SafetyNetAttestationWrapper
911
import pl.gov.mc.protegosafe.domain.model.DiagnosisKey
1012
import pl.gov.mc.protegosafe.domain.model.SafetyNetResult
11-
import pl.gov.mc.protegosafe.device.extension.toSingle
12-
import pl.gov.mc.protegosafe.device.model.AttestationData
1313
import timber.log.Timber
1414
import java.util.Locale
1515

@@ -20,11 +20,6 @@ class SafetyNetAttestationWrapperImpl(
2020

2121
private val _base64: BaseEncoding = BaseEncoding.base64()
2222

23-
override fun getTokenFor(byteArray: ByteArray): Single<String> {
24-
val nonce = _base64.encode(byteArray)
25-
return safetyNetAttestationFor(nonce)
26-
}
27-
2823
override fun attestFor(byteArray: ByteArray): Single<SafetyNetResult> {
2924
val nonce = _base64.encode(byteArray)
3025
return safetyNetAttestationFor(nonce)

domain/src/main/java/pl/gov/mc/protegosafe/domain/manager/SafetyNetAttestationWrapper.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,4 @@ import pl.gov.mc.protegosafe.domain.model.SafetyNetResult
55

66
interface SafetyNetAttestationWrapper {
77
fun attestFor(byteArray: ByteArray): Single<SafetyNetResult>
8-
fun getTokenFor(byteArray: ByteArray): Single<String>
98
}

0 commit comments

Comments
 (0)