From 7c940d209a89310d55266ba008901aa292723ab5 Mon Sep 17 00:00:00 2001
From: Douile <25043847+Douile@users.noreply.github.com>
Date: Mon, 22 Aug 2022 16:19:59 +0100
Subject: [PATCH 1/2] Show warning in dialog when using default encryption key
---
.../com/geeksville/mesh/ui/ChannelFragment.kt | 85 +++++++++++--------
app/src/main/res/values/strings.xml | 1 +
2 files changed, 49 insertions(+), 37 deletions(-)
diff --git a/app/src/main/java/com/geeksville/mesh/ui/ChannelFragment.kt b/app/src/main/java/com/geeksville/mesh/ui/ChannelFragment.kt
index efebd43dd..f38ad009b 100644
--- a/app/src/main/java/com/geeksville/mesh/ui/ChannelFragment.kt
+++ b/app/src/main/java/com/geeksville/mesh/ui/ChannelFragment.kt
@@ -304,49 +304,60 @@ class ChannelFragment : ScreenFragment("Channel"), Logging {
}
} else {
// User just locked it, we should warn and then apply changes to radio
- MaterialAlertDialogBuilder(requireContext())
- .setTitle(R.string.change_channel)
- .setMessage(R.string.are_you_sure_channel)
- .setNeutralButton(R.string.cancel) { _, _ ->
- setGUIfromModel()
+
+ model.channels.value?.primaryChannel?.let { oldPrimary ->
+ var newSettings = oldPrimary.settings.toBuilder()
+ val newName = binding.channelNameEdit.text.toString().trim()
+
+ // Find the new modem config
+ val selectedModemPresetString =
+ binding.filledExposedDropdown.editableText.toString()
+ var newModemPreset = getModemPreset(selectedModemPresetString)
+ if (newModemPreset == ConfigProtos.Config.LoRaConfig.ModemPreset.UNRECOGNIZED) // Huh? didn't find it - keep same
+ newModemPreset = oldPrimary.loraConfig.modemPreset
+
+ // Generate a new AES256 key if the user changes channel name or the name is non-default and the settings changed
+ val shouldUseRandomKey =
+ newName != originalName || (newName.isNotEmpty() && newModemPreset != oldPrimary.loraConfig.modemPreset)
+ if (shouldUseRandomKey) {
+
+ // Install a new customized channel
+ debug("ASSIGNING NEW AES256 KEY")
+ val random = SecureRandom()
+ val bytes = ByteArray(32)
+ random.nextBytes(bytes)
+ newSettings.name = newName.take(11) // proto max_size:12
+ newSettings.psk = ByteString.copyFrom(bytes)
+ } else {
+ debug("Switching back to default channel")
+ newSettings = Channel.default.settings.toBuilder()
}
- .setPositiveButton(getString(R.string.accept)) { _, _ ->
- // Generate a new channel with only the changes the user can change in the GUI
- model.channels.value?.primaryChannel?.let { oldPrimary ->
- var newSettings = oldPrimary.settings.toBuilder()
- val newName = binding.channelNameEdit.text.toString().trim()
- // Find the new modem config
- val selectedModemPresetString =
- binding.filledExposedDropdown.editableText.toString()
- var newModemPreset = getModemPreset(selectedModemPresetString)
- if (newModemPreset == ConfigProtos.Config.LoRaConfig.ModemPreset.UNRECOGNIZED) // Huh? didn't find it - keep same
- newModemPreset = oldPrimary.loraConfig.modemPreset
+ // No matter what apply the speed selection from the user
+ val newLoRaConfig = ConfigProtos.Config.LoRaConfig.newBuilder()
+ .setRegion(model.region)
+ .setModemPreset(newModemPreset)
- // Generate a new AES256 key if the user changes channel name or the name is non-default and the settings changed
- if (newName != originalName || (newName.isNotEmpty() && newModemPreset != oldPrimary.loraConfig.modemPreset)) {
- // Install a new customized channel
- debug("ASSIGNING NEW AES256 KEY")
- val random = SecureRandom()
- val bytes = ByteArray(32)
- random.nextBytes(bytes)
- newSettings.name = newName.take(11) // proto max_size:12
- newSettings.psk = ByteString.copyFrom(bytes)
- } else {
- debug("Switching back to default channel")
- newSettings = Channel.default.settings.toBuilder()
+ MaterialAlertDialogBuilder(requireContext())
+ .setTitle(R.string.change_channel)
+ .setMessage(buildString {
+ append(getString(R.string.are_you_sure_channel))
+ if (!shouldUseRandomKey) {
+ append("\n\n")
+ append(getString(R.string.warning_default_channel))
}
-
- // No matter what apply the speed selection from the user
- val newLoRaConfig = ConfigProtos.Config.LoRaConfig.newBuilder()
- .setRegion(model.region)
- .setModemPreset(newModemPreset)
-
- installSettings(newSettings.build(),newLoRaConfig.build())
+ })
+ .setNeutralButton(R.string.cancel) { _, _ ->
+ setGUIfromModel()
}
- }
- .show()
+ .setPositiveButton(getString(R.string.accept)) { _, _ ->
+ // Generate a new channel with only the changes the user can change in the GUI
+
+ installSettings(newSettings.build(), newLoRaConfig.build())
+ }
+ .show()
+ }
}
onEditingChanged() // update GUI on what user is allowed to edit/share
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 88a99668b..389abfd46 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -155,4 +155,5 @@
Message
Append to message
Instantly send
+ As you have not changed the channel name you are using the default encryption key (any Meshtastic user can read your messages).
From f8cec34862dc031e2bf5dd637c577d409ef4ec17 Mon Sep 17 00:00:00 2001
From: Tom <25043847+Douile@users.noreply.github.com>
Date: Tue, 23 Aug 2022 10:44:34 +0000
Subject: [PATCH 2/2] Improve warning message
Improve wording and add channel name to the default psk warning
Co-authored-by: Andre K
---
.../com/geeksville/mesh/ui/ChannelFragment.kt | 16 +++++++++-------
app/src/main/res/values/strings.xml | 2 +-
2 files changed, 10 insertions(+), 8 deletions(-)
diff --git a/app/src/main/java/com/geeksville/mesh/ui/ChannelFragment.kt b/app/src/main/java/com/geeksville/mesh/ui/ChannelFragment.kt
index f38ad009b..bd4fe6a35 100644
--- a/app/src/main/java/com/geeksville/mesh/ui/ChannelFragment.kt
+++ b/app/src/main/java/com/geeksville/mesh/ui/ChannelFragment.kt
@@ -338,16 +338,18 @@ class ChannelFragment : ScreenFragment("Channel"), Logging {
.setRegion(model.region)
.setModemPreset(newModemPreset)
+ val humanName = Channel(newSettings.build(), newLoRaConfig.build()).humanName
+ binding.channelNameEdit.setText(humanName)
+
+ val message = buildString {
+ append(getString(R.string.are_you_sure_channel))
+ if (!shouldUseRandomKey)
+ append("\n\n" + getString(R.string.warning_default_psk).format(humanName))
+ }
MaterialAlertDialogBuilder(requireContext())
.setTitle(R.string.change_channel)
- .setMessage(buildString {
- append(getString(R.string.are_you_sure_channel))
- if (!shouldUseRandomKey) {
- append("\n\n")
- append(getString(R.string.warning_default_channel))
- }
- })
+ .setMessage(message)
.setNeutralButton(R.string.cancel) { _, _ ->
setGUIfromModel()
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 389abfd46..4cbea2cab 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -155,5 +155,5 @@
Message
Append to message
Instantly send
- As you have not changed the channel name you are using the default encryption key (any Meshtastic user can read your messages).
+ Empty channel names use the default encryption key (any device on %s can read your messages).