mirror of
https://github.com/MarekZegare4/MeshCore-Solo.git
synced 2026-11-02 10:51:57 +00:00
Merge PR #37: lock screen PIN (3urobeat), adapted
The contributor's feature -- a PIN asked before the screen unlocks, on
boot, and when the magnet cover opens, stored as a salted SHA-256 -- on
top of this branch, with:
- ui-core/ScreenLock.h: set / check / isSet and the tries limit, shared by
L1 and L2. isSet looks at every byte (the PR tested only the first, so one
PIN in 256 silently disabled the lock). 5 misses pause entry for 30 s.
- NodePrefs: the fields at the tail after quiet hours, sentinel 0xC0DE0031,
sizeof 2880; an older file's bytes there are cleared. A sentinel bump no
longer resets display_brightness_pct from a file that already has it.
- DataStore: no AGPL header (the project is MIT), no whitespace churn.
- Keyboard: the number pad is a widget flag (pin_mode) with a prompt in the
preview ("New PIN", "Again", "PIN"), not keyboard_type = 2 written into the
prefs and restored after.
- L1 Settings: "Lock PIN" right after the schema's "Lock screen" row, typed
twice, at least 4 characters, saved at once (a power-off right after
setting it kept no PIN). Home is told about a boot-time lock once it
exists (also fixes booting with the cover closed).
- L2: the screen PIN moves from plain text in NVS to the same hash in
NodePrefs; the old one is migrated on first boot and removed. The pad
unlocks as soon as the hash matches from 4 digits on.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -16,6 +16,7 @@
|
||||
#include "../AbstractUITask.h"
|
||||
#include "../NodePrefs.h"
|
||||
#include "../ui-core/UiCoreHost.h"
|
||||
#include "../ui-core/ScreenLock.h"
|
||||
|
||||
class UiCore;
|
||||
class NearbyModel;
|
||||
@@ -458,13 +459,12 @@ private:
|
||||
uint16_t _batt_mv = 0; // smoothed, read every 8 s: the status bar and the low-battery shutdown
|
||||
uint32_t _next_batt_ms = 0;
|
||||
lv_obj_t* _prune_lbl = nullptr;
|
||||
// Screen PIN (DeviceScreen.h); stored in NVS (lvport::loadPin)
|
||||
char _pin[9] = ""; // "" = no PIN
|
||||
// Screen PIN (DeviceScreen.h): a salted hash in NodePrefs (ui-core/ScreenLock.h)
|
||||
bool pinSet() const { return _prefs && screenlock::isSet(*_prefs); }
|
||||
bool _tap_wake = true; // a touch wakes the dark screen (NVS)
|
||||
char _pin_entry[9] = ""; // digits typed so far
|
||||
char _pin_new[9] = ""; // setup: the first entry, waiting for its confirmation
|
||||
uint8_t _pin_fails = 0;
|
||||
uint32_t _pin_block_until = 0; // millis() until which entry is refused after 5 misses
|
||||
screenlock::Attempts _pin_tries;
|
||||
|
||||
// Open conversation (SCR_THREAD)
|
||||
bool _thread_is_channel = false;
|
||||
|
||||
Reference in New Issue
Block a user