Skip to content

Feat/credential secure storage#132

Merged
1technophile merged 3 commits into
developmentfrom
feat/credential-secure-storage
May 24, 2026
Merged

Feat/credential secure storage#132
1technophile merged 3 commits into
developmentfrom
feat/credential-secure-storage

Conversation

@1technophile

Copy link
Copy Markdown
Member

Description:

Secure credential storage: move MQTT/MySQL passwords to the OS keychain
Passwords were persisted in plaintext via QSettings, and the app shipped
default credentials (theengs/theengs).

  • Add QtKeychain as a bundled submodule (pinned 0.15.0; 0.14.0 fails to
    build on Qt 6.8+ Android) plus a small SecretStore wrapper that stores
    secrets in the OS secure store (Keychain on Apple, Credential Store on
    Windows, libsecret/KWallet on Linux, Android Keystore on Android).
  • Rework SettingsManager so MQTT/MySQL passwords never touch QSettings,
    with a one-time migration of any legacy plaintext value into the keychain.
  • Drop the shipped default credentials (now empty == not configured).
  • Gate behind ENABLE_SECURE_STORAGE (default ON).

Validated on Android (LG H930, Samsung SM-G970U): build, install, launch,
plaintext -> Android Keystore migration, and keychain round-trip read; the
legacy plaintext password is removed from all app data files.

Checklist:

  • The pull request is done against the latest development branch
  • Only one feature/fix was added per PR and the code change compiles without warnings
  • I accept the DCO.

1technophile and others added 3 commits May 23, 2026 15:29
Passwords were persisted in plaintext via QSettings, and the app shipped
default credentials (theengs/theengs).

- Add QtKeychain as a bundled submodule (pinned 0.15.0; 0.14.0 fails to
  build on Qt 6.8+ Android) plus a small SecretStore wrapper that stores
  secrets in the OS secure store (Keychain on Apple, Credential Store on
  Windows, libsecret/KWallet on Linux, Android Keystore on Android).
- Rework SettingsManager so MQTT/MySQL passwords never touch QSettings,
  with a one-time migration of any legacy plaintext value into the keychain.
- Drop the shipped default credentials (now empty == not configured).
- Gate behind ENABLE_SECURE_STORAGE (default ON).

Validated on Android (LG H930, Samsung SM-G970U): build, install, launch,
plaintext -> Android Keystore migration, and keychain round-trip read; the
legacy plaintext password is removed from all app data files.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The first CI run failed on all platforms: QtKeychain 0.15.0 selects Qt5
unless BUILD_WITH_QT6 is set (its BUILD_WITH_QT5 option is vestigial; the
logic keys off BUILD_WITH_QT6). Force it ON before add_subdirectory.

Also install libsecret-1-dev on the Linux runner — QtKeychain's Linux
backend has LIBSECRET_SUPPORT on by default and requires libsecret-1.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
QtKeychain builds its 'basic' autotest under BUILD_TESTING (default ON),
and that test executable fails to link on iOS. Force BUILD_TESTING OFF
before add_subdirectory; we don't build the dependency's tests anyway.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@1technophile 1technophile merged commit 8179bd5 into development May 24, 2026
10 checks passed
@1technophile 1technophile deleted the feat/credential-secure-storage branch May 24, 2026 01:24
1technophile added a commit that referenced this pull request Jun 2, 2026
Documentation fell behind the 1.5.0 release train after PR #130. Fold the
four user-facing PRs that landed since into the existing 1.5.0 section
of the changelog and refresh the affected pages on the doc site.

- use.md: note the new MQTT-down banner in the device list; replace the
  manual "Permissions/Battery/Unrestricted" walkthrough with the
  consolidated in-app Background updates screen (background location +
  exact alarms + battery-optimisation rows); document that the "Update
  interval" setting now actually drives the Android background scan
  cadence (one ~60 s window per interval, idle in between).
- build.md: require libsecret-1-dev on Linux; add the new
  ENABLE_SECURE_STORAGE CMake option for QtKeychain-backed credential
  storage.
- privacy.md: bump the last-updated date; note that broker credentials
  are persisted in the OS-managed secure store rather than plaintext
  settings.
- CHANGELOG.md: under the existing [1.5.0] entry, add the MQTT-down
  banner, consolidated Background updates page, and AllowWhileIdle
  exact-alarm scheduler to Added; the scan-cadence fix and the
  ENABLE_MBEDTLS=OFF guard to Fixed; and credential storage to Security.

PRs covered: #131 (MQTT sentinels), #132 (credential secure storage),
#133 (background scan cadence), #135 (background-alarm-doze train,
including the consolidated Background updates page and the exact
AllowWhileIdle scheduler).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1technophile added a commit that referenced this pull request Jun 6, 2026
Bump the 1.5.0 release date to 2026-06-06 and fold in the user-facing
changes that landed between #130 and the cut: TheengsDecoder v2.3.0
(#137), MQTT sentinels + sampling caption (#131), credential secure
storage (#132), background-update scheduling and consolidated
permissions UI (#133, #135), the About-screen decoder version and
build number (#139), the iOS mbedTLS static-link fix (#138), and the
device_bm26 ENABLE_MBEDTLS guard (#134).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1technophile added a commit that referenced this pull request Jun 6, 2026
Bump the 1.5.0 release date to 2026-06-06 and fold in the user-facing
changes that landed between #130 and the cut: TheengsDecoder v2.3.0
(#137), MQTT sentinels + sampling caption (#131), credential secure
storage (#132), background-update scheduling and consolidated
permissions UI (#133, #135), the About-screen decoder version and
build number (#139), the iOS mbedTLS static-link fix (#138), and the
device_bm26 ENABLE_MBEDTLS guard (#134).

Co-authored-by: Florian <1technophile@users.noreply.github.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant