From 0c68a5b475d79c3f5cdcd3cb205187b290f2d0fc Mon Sep 17 00:00:00 2001 From: Ferdinand Thiessen Date: Fri, 26 Sep 2025 11:28:25 +0200 Subject: [PATCH 1/5] feat(Share\IManager): add `matchUserId` method and update docs Add missing `matchUserId` method for full-match-autocomplete options and update docs to make it clearer what each options exactly means. Signed-off-by: Ferdinand Thiessen --- lib/private/Share20/Manager.php | 4 ++++ lib/public/Share/IManager.php | 9 ++++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/private/Share20/Manager.php b/lib/private/Share20/Manager.php index b9b5426452c..cf6b668471e 100644 --- a/lib/private/Share20/Manager.php +++ b/lib/private/Share20/Manager.php @@ -1932,6 +1932,10 @@ class Manager implements IManager { return $this->config->getAppValue('core', 'shareapi_restrict_user_enumeration_full_match_email', 'yes') === 'yes'; } + public function matchUserId(): bool { + return $this->config->getAppValue('core', 'shareapi_restrict_user_enumeration_full_match_userid', 'yes') === 'yes'; + } + public function ignoreSecondDisplayName(): bool { return $this->config->getAppValue('core', 'shareapi_restrict_user_enumeration_full_match_ignore_second_dn', 'no') === 'yes'; } diff --git a/lib/public/Share/IManager.php b/lib/public/Share/IManager.php index 23713f2e462..f6bb3e1059f 100644 --- a/lib/public/Share/IManager.php +++ b/lib/public/Share/IManager.php @@ -441,7 +441,8 @@ interface IManager { public function limitEnumerationToPhone(): bool; /** - * Check if user enumeration is allowed to return on full match + * Check if user enumeration is allowed to return also on full match + * and ignore limitations to phonebook or groups. * * @return bool * @since 21.0.1 @@ -449,7 +450,8 @@ interface IManager { public function allowEnumerationFullMatch(): bool; /** - * Check if the search should match the email + * When `allowEnumerationFullMatch` is enabled and `matchEmail` is set, + * then also return results for full email matches. * * @return bool * @since 25.0.0 @@ -457,7 +459,8 @@ interface IManager { public function matchEmail(): bool; /** - * Check if the search should ignore the second in parentheses display name if there is any + * When `allowEnumerationFullMatch` is enabled and `ignoreSecondDisplayName` is set, + * then the search should ignore matches on the second displayname and only use the first. * * @return bool * @since 25.0.0 From 620614e7e7584dd2ce247e9d57de38cb58b18de3 Mon Sep 17 00:00:00 2001 From: Ferdinand Thiessen Date: Fri, 26 Sep 2025 11:29:49 +0200 Subject: [PATCH 2/5] fix(settings): add missing sharing autocompletion configs to UI Signed-off-by: Ferdinand Thiessen --- apps/settings/lib/Settings/Admin/Sharing.php | 8 ++-- .../components/AdminSettingsSharingForm.vue | 37 ++++++++++++++----- 2 files changed, 32 insertions(+), 13 deletions(-) diff --git a/apps/settings/lib/Settings/Admin/Sharing.php b/apps/settings/lib/Settings/Admin/Sharing.php index e001a7d00ea..94babdd3b11 100644 --- a/apps/settings/lib/Settings/Admin/Sharing.php +++ b/apps/settings/lib/Settings/Admin/Sharing.php @@ -48,10 +48,10 @@ class Sharing implements IDelegatedSettings { 'allowShareDialogUserEnumeration' => $this->getHumanBooleanConfig('core', 'shareapi_allow_share_dialog_user_enumeration', true), 'restrictUserEnumerationToGroup' => $this->getHumanBooleanConfig('core', 'shareapi_restrict_user_enumeration_to_group'), 'restrictUserEnumerationToPhone' => $this->getHumanBooleanConfig('core', 'shareapi_restrict_user_enumeration_to_phone'), - 'restrictUserEnumerationFullMatch' => $this->getHumanBooleanConfig('core', 'shareapi_restrict_user_enumeration_full_match', true), - 'restrictUserEnumerationFullMatchUserId' => $this->getHumanBooleanConfig('core', 'shareapi_restrict_user_enumeration_full_match_userid', true), - 'restrictUserEnumerationFullMatchEmail' => $this->getHumanBooleanConfig('core', 'shareapi_restrict_user_enumeration_full_match_email', true), - 'restrictUserEnumerationFullMatchIgnoreSecondDN' => $this->getHumanBooleanConfig('core', 'shareapi_restrict_user_enumeration_full_match_ignore_second_dn'), + 'restrictUserEnumerationFullMatch' => $this->shareManager->allowEnumerationFullMatch(), + 'restrictUserEnumerationFullMatchUserId' => $this->shareManager->matchUserId(), + 'restrictUserEnumerationFullMatchEmail' => $this->shareManager->matchEmail(), + 'restrictUserEnumerationFullMatchIgnoreSecondDN' => $this->shareManager->ignoreSecondDisplayName(), 'enforceLinksPassword' => Util::isPublicLinkPasswordRequired(false), 'enforceLinksPasswordExcludedGroups' => json_decode($excludedPasswordGroups) ?? [], 'enforceLinksPasswordExcludedGroupsEnabled' => $this->config->getSystemValueBool('sharing.allow_disabled_password_enforcement_groups', false), diff --git a/apps/settings/src/components/AdminSettingsSharingForm.vue b/apps/settings/src/components/AdminSettingsSharingForm.vue index 965a38243d6..72c8d91417a 100644 --- a/apps/settings/src/components/AdminSettingsSharingForm.vue +++ b/apps/settings/src/components/AdminSettingsSharingForm.vue @@ -4,7 +4,7 @@ -->