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

@ -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
}