diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 393d63c..af4adc5 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -90,6 +90,13 @@ + + + + + + { + // Extract query parameters + val queryParams = data.queryParameterNames + queryParams.forEach { param -> + val value = data.getQueryParameter(param) + // Handle your parameters here + Log.d("LibrePods", "Parameter: $param = $value") + } + + // Process the magic keys addition + handleAddMagicKeys(data) + } + } + } + } + + private fun handleAddMagicKeys(uri: Uri) { + val context = this + val sharedPreferences = getSharedPreferences("settings", Context.MODE_PRIVATE) + + val irkHex = uri.getQueryParameter("irk") + val encKeyHex = uri.getQueryParameter("enc_key") + + try { + if (irkHex != null && validateHexInput(irkHex)) { + val irkBytes = hexStringToByteArray(irkHex) + val irkBase64 = Base64.encode(irkBytes) + sharedPreferences.edit().putString("IRK", irkBase64).apply() + } + + if (encKeyHex != null && validateHexInput(encKeyHex)) { + val encKeyBytes = hexStringToByteArray(encKeyHex) + val encKeyBase64 = Base64.encode(encKeyBytes) + sharedPreferences.edit().putString("ENC_KEY", encKeyBase64).apply() + } + + Toast.makeText(this, "Magic keys added successfully!", Toast.LENGTH_SHORT).show() + } catch (e: Exception) { + Toast.makeText(this, "Error processing magic keys: ${e.message}", Toast.LENGTH_LONG).show() + } + } + + private fun validateHexInput(input: String): Boolean { + val hexPattern = Regex("^[0-9a-fA-F]{32}$") + return hexPattern.matches(input) + } + + private fun hexStringToByteArray(hex: String): ByteArray { + val result = ByteArray(16) + for (i in 0 until 16) { + val hexByte = hex.substring(i * 2, i * 2 + 2) + result[i] = hexByte.toInt(16).toByte() + } + return result + } } @SuppressLint("MissingPermission", "InlinedApi", "UnspecifiedRegisterReceiverFlag") @@ -660,5 +731,4 @@ fun PermissionCard( } } } -} - +} \ No newline at end of file