add PIN transcoding

This commit is contained in:
Matthias Oesterheld
2024-10-15 20:27:52 +02:00
parent b48102f9a6
commit c592726bd4
6 changed files with 34 additions and 4 deletions

View File

@ -60,6 +60,7 @@
<string id="SettingsPollDelay">Zusätzliche Abfrageverzögerung (in Sekunden). Fügt eine Verzögerung zwischen der Statusaktualisierung aller Menüelemente hinzu.</string>
<string id="SettingsConfirmTimeout">Nach dieser Zeit (in Sekunden) wird der Bestätigungsdialog einer Aktion geschlossen und die
Aktion abgebrochen. Auf 0 setzen, um den Timeout zu deaktivieren.</string>
<string id="SettingsPinMask">Schablone um die PIN aus der Dashboard Config zu transkodieren.</string>
<string id="SettingsTextAlign">Menüausrichtung links (aus) oder rechts (ein).</string>
<string id="LeftToRight">Links nach rechts</string>
<string id="RightToLeft">Rechts nach links</string>

View File

@ -65,6 +65,14 @@
-->
<property id="confirm_timeout" type="number">3</property>
<!--
This mask transcodes the plain text PIN from the public dashboard config.
Every digit is used to increase the corresponding digit at this position
in the PIN by the value given, starting at 1 if a value bigger than 4 has
been reached.
-->
<property id="pin_mask" type="string"></property>
<!--
Left to right or right to left text. Language dependent.
-->

View File

@ -79,6 +79,13 @@
<settingConfig type="numeric" min="0" />
</setting>
<setting
propertyKey="@Properties.pin_mask"
title="@Strings.SettingsPinMask"
>
<settingConfig type="alphaNumeric" />
</setting>
<setting
propertyKey="@Properties.menu_alignment"
title="@Strings.SettingsTextAlign"

View File

@ -53,6 +53,7 @@
<string id="SettingsAppTimeout">Timeout in seconds. Exit the application after this period of inactivity to save the device battery.</string>
<string id="SettingsPollDelay">Additional poll delay (in seconds). Adds a delay between the status update of all menu items.</string>
<string id="SettingsConfirmTimeout">After this time (in seconds), a confirmation dialog for an action is automatically closed and the action is cancelled. Set to 0 to disable the timeout.</string>
<string id="SettingsPinMask">Integer Mask to transcode the plain text PIN from the public dashboard config.</string>
<string id="SettingsTextAlign">Left (off) or Right (on) Menu Alignment.</string>
<string id="LeftToRight">Left to right</string>
<string id="RightToLeft">Right to Left</string>

View File

@ -118,10 +118,17 @@ class HomeAssistantPinConfirmationDelegate extends WatchUi.BehaviorDelegate {
return true;
}
function getTranscodedCurrentDigit() as Number {
var currentDigit = mPin[mCurrentIndex].toString().toNumber(); // this is ugly, but apparently the only way for char<->number comparisons
// TODO: Transcode digit using a pin mask for additional security
return currentDigit;
function getTranscodedCurrentDigit() as Number or Null {
var currentDigit = mPin[mCurrentIndex].toString().toNumber(); // this is ugly, but apparently the only way for char<->number conversions
if (currentDigit == null) {
return null;
}
var pinMask = Settings.getPinMask();
var maskDigit = pinMask.substring(mCurrentIndex, mCurrentIndex+1).toNumber();
if (maskDigit == null) {
return currentDigit;
}
return ((currentDigit + maskDigit - 1) % 4) + 1;
}
function resetTimer() {

View File

@ -38,6 +38,7 @@ class Settings {
private static var mAppTimeout as Lang.Number = 0; // seconds
private static var mPollDelay as Lang.Number = 0; // seconds
private static var mConfirmTimeout as Lang.Number = 3; // seconds
private static var mPinMask as Lang.String = "";
private static var mMenuAlignment as Lang.Number = WatchUi.MenuItem.MENU_ITEM_LABEL_ALIGN_LEFT;
private static var mIsSensorsLevelEnabled as Lang.Boolean = false;
private static var mBatteryRefreshRate as Lang.Number = 15; // minutes
@ -59,6 +60,7 @@ class Settings {
mAppTimeout = Properties.getValue("app_timeout");
mPollDelay = Properties.getValue("poll_delay_combined");
mConfirmTimeout = Properties.getValue("confirm_timeout");
mPinMask = Properties.getValue("pin_mask");
mMenuAlignment = Properties.getValue("menu_alignment");
mIsSensorsLevelEnabled = Properties.getValue("enable_battery_level");
mBatteryRefreshRate = Properties.getValue("battery_level_refresh_rate");
@ -164,6 +166,10 @@ class Settings {
return mConfirmTimeout * 1000; // Convert to milliseconds
}
static function getPinMask() as Lang.String {
return mPinMask;
}
static function getMenuAlignment() as Lang.Number {
return mMenuAlignment; // Either WatchUi.MenuItem.MENU_ITEM_LABEL_ALIGN_RIGHT or WatchUi.MenuItem.MENU_ITEM_LABEL_ALIGN_LEFT
}