Skip to content

refactor(encryption): Migrate appconfig keys to typed bool IAppConfig with repair step - #60002

Merged
cuppett merged 13 commits into
nextcloud:masterfrom
cuppett:cuppett/migrate-appconfig-keys-to-bool
Jul 7, 2026
Merged

refactor(encryption): Migrate appconfig keys to typed bool IAppConfig with repair step#60002
cuppett merged 13 commits into
nextcloud:masterfrom
cuppett:cuppett/migrate-appconfig-keys-to-bool

Conversation

@cuppett

@cuppettcuppett commented Apr 29, 2026

Copy link
Copy Markdown
Contributor

Summary

Switch all encryption config reads/writes from deprecated string-typed IConfig to bool-typed IAppConfig (getValueBool/setValueBool). Adds RetypeEncryptionConfigKeys repair step to retype existing string values to bool on upgrade. Includes lazy IAppConfig resolution in Manager and AppConfigTypeConflictException fallbacks throughout for safety during the upgrade window.

Checklist

AI (if applicable)

  • The content of this PR was partly or fully generated using AI

@cuppett
cuppett requested a review from a team as a code ownerApril 29, 2026 23:58
@cuppett
cuppett requested review from Altahrim, ArtificialOwl, leftybournes and salmart-dev and removed request for a teamApril 29, 2026 23:58
@cuppettcuppett added this to the Nextcloud 34 milestone Apr 29, 2026

@cuppettcuppett left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't know the convention when trying to refactor the legacy values out. Happy to simplify to only the minimal set or wait until next version for another PR. Just LMK.

Comment threadcore/Command/Encryption/Disable.php Outdated
Comment threadcore/Command/Encryption/DecryptAll.php Outdated
Comment threadcore/Command/Encryption/Disable.php Outdated
@cuppett
cuppettforce-pushed the cuppett/migrate-appconfig-keys-to-bool branch from 864ad6a to f3679b4CompareApril 30, 2026 11:10
@cuppett
cuppett requested a review from CarlSchwanApril 30, 2026 11:11
@cuppett
cuppettforce-pushed the cuppett/migrate-appconfig-keys-to-bool branch from f3679b4 to 39b6d31CompareApril 30, 2026 15:45
Comment threadapps/encryption/lib/Util.php Outdated
Comment threadapps/provisioning_api/lib/Controller/AppConfigController.php Outdated
Comment threadlib/private/Repair/RetypeEncryptionConfigKeys.php Outdated
@cuppett
cuppettforce-pushed the cuppett/migrate-appconfig-keys-to-bool branch from a6fff8f to e4f6eceCompareApril 30, 2026 23:13
@cuppett
cuppettforce-pushed the cuppett/migrate-appconfig-keys-to-bool branch 4 times, most recently from e5291af to 07461eeCompareMay 1, 2026 12:24
@cuppett

Copy link
Copy Markdown
ContributorAuthor

The psalm things (DAV) seem to be coming from the master branch (not related to this PR). Do I need to fix that or can it be overridden to merge?

@cuppett
cuppett requested a review from artongeMay 1, 2026 13:50

@artongeartonge left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good, thanks for splitting :)

The psalm error is indeed unrelated.

@cuppett
cuppettforce-pushed the cuppett/migrate-appconfig-keys-to-bool branch from 6e52b67 to c4baa76CompareMay 1, 2026 17:05
@artonge
artongeforce-pushed the cuppett/migrate-appconfig-keys-to-bool branch from c4baa76 to ef7b789CompareMay 5, 2026 14:10
@cuppett
cuppettforce-pushed the cuppett/migrate-appconfig-keys-to-bool branch from ef7b789 to 9f0c402CompareMay 5, 2026 16:32
@cuppett
cuppett enabled auto-merge May 5, 2026 17:03
@nextcloud-botnextcloud-bot added this to the Nextcloud 34.0.1 milestone Jun 8, 2026
@susnuxsusnux added the community pull requests from community label Jun 9, 2026
@cuppett
cuppettforce-pushed the cuppett/migrate-appconfig-keys-to-bool branch from b7d805f to 50ec557CompareJune 10, 2026 15:39
@cuppett

Copy link
Copy Markdown
ContributorAuthor

Rebased, fixed some nit conflicts, caught a couple new occurrences of IConfig and force-pushed.

@cuppett
cuppettforce-pushed the cuppett/migrate-appconfig-keys-to-bool branch from 50ec557 to ad56a2eCompareJune 20, 2026 15:39
@cuppett

Copy link
Copy Markdown
ContributorAuthor

Resolved conflicts, rebased on master

@cuppett
cuppettforce-pushed the cuppett/migrate-appconfig-keys-to-bool branch from ad56a2e to c34edcbCompareJune 20, 2026 15:46
@cuppett
cuppett dismissed artonge’s stale reviewJune 20, 2026 16:17

Unclear why this is still set. Resolved comments. Thanks!

@cuppett

Copy link
Copy Markdown
ContributorAuthor

@artonge I can't tell why this one isn't merging, can you assist here?

cuppettand others added 13 commits July 4, 2026 08:19
… with repair step
Switch all encryption config reads/writes from deprecated string-typed IConfig to
bool-typed IAppConfig (getValueBool/setValueBool). Adds RetypeEncryptionConfigKeys
repair step to retype existing string values to bool on upgrade. Includes lazy
IAppConfig resolution in Manager and AppConfigTypeConflictException fallbacks
throughout for safety during the upgrade window.
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Stephen Cuppett <steve@cuppett.com>
Signed-off-by: Stephen Cuppett <steve@cuppett.com>
Apply suggestion from @artonge
Co-authored-by: Louis <louis@chmn.me>
Signed-off-by: Stephen Cuppett <steve@cuppett.com>
Co-authored-by: Louis <louis@chmn.me>
Signed-off-by: Stephen Cuppett <steve@cuppett.com>
The IAppConfig API converts stored values to bool on read (getValueBool)
and re-stamps the type on write (setValueBool), so legacy string-typed
encryption config keys migrate lazily without an explicit repair step.
Per PR review feedback, drop the repair step, its test, and the related
AppConfigTypeConflictException fallback in Encryption\Manager::isEnabled
that only existed to bridge the now-unneeded migration window.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Stephen Cuppett <steve@cuppett.com>
… to match strict 'yes'-only validation
The verifyConfigKey check on core.encryption_enabled was reverted to
master's strict $value !== 'yes' in 626fadd per review feedback,
but the test data providers still asserted the broader truthy set
(1/true/YES/on). Drop those entries so the tests match the controller.
This is validation, not storage — IAppConfig::setValueBool's broader
input handling is unrelated.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Stephen Cuppett <steve@cuppett.com>
Update to annotation from docblock comment
Co-authored-by: Kate <26026535+provokateurin@users.noreply.github.com>
Signed-off-by: Stephen Cuppett <steve@cuppett.com>
Co-authored-by: Kate <26026535+provokateurin@users.noreply.github.com>
Signed-off-by: Stephen Cuppett <steve@cuppett.com>
…AdminTest
The production code already uses getValueBool for this key; the IConfig
mock branch was unreachable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Stephen Cuppett <steve@cuppett.com>
…yped APIs
Replace IConfig::{get,set}UserValue for the per-user 'recoveryEnabled' key
with IUserConfig::{getValueBool,setValueBool}, and IConfig::getAppValue for
'useMasterKey' with IAppConfig::getValueBool. IConfig is removed from Util
and Recovery constructors entirely. Clears the DeprecatedMethod psalm-baseline
entries for apps/encryption/lib/Util.php and the string-typed recoveryAdminEnabled
calls that were still in Recovery.php.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Stephen Cuppett <steve@cuppett.com>
… in encryption tests
Addresses reviewer feedback requesting consistent mock callback style
in RecoveryTest and UtilTest. Drops the now-unused setValueTester,
getValueTester, and removeValueTester helper methods.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Stephen Cuppett <steve@cuppett.com>
Signed-off-by: Stephen Cuppett <steve@cuppett.com>
Update EncryptionTrait, EncryptionMasterKeyUploadTest, EncryptionUploadTest,
and EncryptedSizePropagationTest to use typed IAppConfig::setValueBool/
getValueBool for encryption_enabled and useMasterKey, preventing
AppConfigTypeConflictException when the keys are stored as BOOL type.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Stephen Cuppett <steve@cuppett.com>
@cuppett
cuppettforce-pushed the cuppett/migrate-appconfig-keys-to-bool branch from c34edcb to b86fa0dCompareJuly 4, 2026 12:19
@cuppett

Copy link
Copy Markdown
ContributorAuthor

Rebase only

@cuppett
cuppett merged commit 507c0a7 into nextcloud:masterJul 7, 2026
224 of 231 checks passed
@cuppett
cuppett deleted the cuppett/migrate-appconfig-keys-to-bool branch August 6, 2026 01:29
@nextcloud-botnextcloud-bot mentioned this pull request Aug 11, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: de-crypting then re-encrypting (SSE) triggers conflict between new type (mixed) and old type (boolean)

6 participants

@cuppett@provokateurin@artonge@CarlSchwan@susnux@nextcloud-bot