Skip to content

Commit

Permalink
Adding chaff support (#80)
Browse files Browse the repository at this point in the history
* iOS suport for chaff requsts

* Simulate user delay for chaff requests

* Adding android chaff support

* Google server fixes

* Test fixes

* Fixing chaff requests for google key server

* Fixing publishurl

* Dependabot config
  • Loading branch information
colmharte authored Apr 23, 2021
1 parent a6de7bd commit d7a3425
Show file tree
Hide file tree
Showing 14 changed files with 550 additions and 96 deletions.
11 changes: 11 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
version: 2
updates:
- package-ecosystem: 'npm'
directory: '/'
schedule:
interval: 'daily'
- package-ecosystem: 'github-actions'
directory: '/'
schedule:
interval: 'daily'

5 changes: 5 additions & 0 deletions android/src/main/java/ie/gov/tracing/common/Config.kt
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,11 @@ object Config {
keyServerType = "nearform"
}
SharedPrefs.setString("keyServerUrl", keyServer, Tracing.context)
if (params.hasKey("publishServerUrl")) {
SharedPrefs.setString("publishServerUrl", params.getString("publishServerUrl")!!, Tracing.context)
} else {
SharedPrefs.setString("publishServerUrl", "", Tracing.context)
}
SharedPrefs.setString("keyServerType", keyServerType, Tracing.context)
SharedPrefs.setString("notificationTitle", params.getString("notificationTitle")!!, Tracing.context)
SharedPrefs.setString("notificationDesc", params.getString("notificationDesc")!!, Tracing.context)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ data class ExposureConfig(
val attenuationDurationThresholds: IntArray = intArrayOf(50, 70, 90),
val infectiousnessForDaysSinceOnsetOfSymptoms: IntArray = intArrayOf(),
val contiguousMode: Boolean = false,
val v2Mode: Boolean = false
val v2Mode: Boolean = false,
val chaffEnabled: Boolean = false,
val chaffWindow: Int = 5
)

277 changes: 218 additions & 59 deletions android/src/main/java/ie/gov/tracing/nearby/StateUpdatedWorker.java

Large diffs are not rendered by default.

42 changes: 34 additions & 8 deletions android/src/main/java/ie/gov/tracing/network/Fetcher.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import com.google.common.io.BaseEncoding
import com.google.gson.Gson
import ie.gov.tracing.Tracing
import ie.gov.tracing.common.Events
import ie.gov.tracing.common.ExposureConfig
import ie.gov.tracing.storage.ExpoSecureStoreInterop
import ie.gov.tracing.storage.ExposureEntity
import ie.gov.tracing.storage.SharedPrefs
Expand All @@ -33,6 +32,7 @@ import javax.net.ssl.SSLContext
import javax.net.ssl.TrustManager
import javax.net.ssl.TrustManagerFactory
import javax.net.ssl.X509TrustManager
import kotlin.collections.HashMap

@Keep
data class Token(val token: String)
Expand All @@ -46,6 +46,24 @@ data class Metric(val os: String, val event: String, val version: String, val pa
@Keep
data class CallbackRecovery(val mobile: String, val code: String, val iso: String, val number: String)

@Keep
data class VerifyG(val code: String, val padding: String)

@Keep
data class VeriyNF(val hash: String, val padding: String)

@Keep
data class Certificate(val token: String, val padding: String, val ekeyhmac: String)

@Keep
data class PublishNF(val token: String, val platform: String, val deviceVerificationPayload: String, val exposures: ArrayList<Map<String, Any>>, val padding: String)

@Keep
data class PublishG(val hmacKey: String, val healthAuthorityID: String, val verificationPayload: String, val symptomOnsetInterval: Int, val revisionToken: String, val traveler: Boolean, val exposures: ArrayList<Map<String, Any>>, val padding: String)

@Keep
data class VersionData(val version: String, val platform: String)

private const val FILE_PATTERN = "/diag_keys/diagnosis_key_file_%s.zip"
private const val REFRESH = "/refresh"

Expand Down Expand Up @@ -118,9 +136,10 @@ object Fetcher {
var authenticate = true

val client = getOkClient(pin, authenticate, context)
val data = VersionData(Tracing.version(context).getString("display").toString(), "android")
val request = Request.Builder()
.url(url)
.post("".toRequestBody())
.post(Gson().toJson(data).toRequestBody())
.build()

client.newCall(request).execute().use { response ->
Expand Down Expand Up @@ -299,19 +318,26 @@ object Fetcher {

@JvmStatic
fun post(endpoint: String, body: String, context: Context): Boolean {
val serverUrl = SharedPrefs.getString("serverUrl", context)

return post(endpoint, body, context, false, serverUrl, true, true)
}

@JvmStatic
fun post(endpoint: String, body: String, context: Context, chaffRequest: Boolean, server: String, authenticate: Boolean, pin: Boolean): Boolean {

try {
var pin = true
var authenticate = true
val url = getURL(endpoint, context)
var url = URL("${server}${endpoint}")
val client = getOkClient(pin, authenticate, context)
val request = Request.Builder()
val builder = Request.Builder()
.url(url)
.post(body.toRequestBody())
.addHeader("Accept", "application/json")
.addHeader("Content-Type", "application/json; charset=UTF-8")
.build()

if (chaffRequest) {
builder.addHeader("X-Chaff", "chaff")
}
val request = builder.build()
client.newCall(request).execute().use { response ->
if (response.isSuccessful) {
Events.raiseEvent(Events.INFO, "post - HTTP success: ${response.code}")
Expand Down
Loading

0 comments on commit d7a3425

Please sign in to comment.