aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLouis Chemineau <louis@chmn.me>2022-04-12 12:54:39 +0200
committerLouis Chemineau <louis@chmn.me>2022-04-12 17:27:59 +0200
commit37f1c8640eef8230489df2cae886ff8cb236e9b7 (patch)
tree39e9e8f31181505a6a11a0ea86a57cd4863ac490
parentff0ccc80b4d6b6d011cf0ef0468ea319d6e8841f (diff)
downloadnextcloud-server-37f1c8640eef8230489df2cae886ff8cb236e9b7.tar.gz
nextcloud-server-37f1c8640eef8230489df2cae886ff8cb236e9b7.zip
Add settings to ignore second display name in search
Signed-off-by: Louis Chemineau <louis@chmn.me>
-rw-r--r--apps/settings/lib/Settings/Admin/Sharing.php1
-rw-r--r--apps/settings/src/admin.js1
-rw-r--r--apps/settings/templates/settings/admin/sharing.php13
-rw-r--r--apps/settings/tests/Settings/Admin/SharingTest.php4
-rw-r--r--build/integration/features/bootstrap/CollaborationContext.php1
-rw-r--r--dist/settings-legacy-admin.js4
-rw-r--r--dist/settings-legacy-admin.js.map2
-rw-r--r--lib/private/Collaboration/Collaborators/UserPlugin.php4
-rw-r--r--tests/lib/Collaboration/Collaborators/UserPluginTest.php147
9 files changed, 154 insertions, 23 deletions
diff --git a/apps/settings/lib/Settings/Admin/Sharing.php b/apps/settings/lib/Settings/Admin/Sharing.php
index d2c3e907b3e..56c89c515a8 100644
--- a/apps/settings/lib/Settings/Admin/Sharing.php
+++ b/apps/settings/lib/Settings/Admin/Sharing.php
@@ -90,6 +90,7 @@ class Sharing implements IDelegatedSettings {
'restrictUserEnumerationToPhone' => $this->config->getAppValue('core', 'shareapi_restrict_user_enumeration_to_phone', 'no'),
'restrictUserEnumerationFullMatch' => $this->config->getAppValue('core', 'shareapi_restrict_user_enumeration_full_match', 'yes'),
'restrictUserEnumerationFullMatchUserId' => $this->config->getAppValue('core', 'shareapi_restrict_user_enumeration_full_match_userid', 'yes'),
+ 'restrictUserEnumerationFullMatchIgnoreSecondDisplayName' => $this->config->getAppValue('core', 'shareapi_restrict_user_enumeration_full_match_ignore_second_display_name', 'no'),
'enforceLinkPassword' => Util::isPublicLinkPasswordRequired(false),
'passwordExcludedGroups' => $excludedPasswordGroupsList,
'passwordExcludedGroupsFeatureEnabled' => $this->config->getSystemValueBool('sharing.allow_disabled_password_enforcement_groups', false),
diff --git a/apps/settings/src/admin.js b/apps/settings/src/admin.js
index ee7b4b6b202..feb03a865b9 100644
--- a/apps/settings/src/admin.js
+++ b/apps/settings/src/admin.js
@@ -157,6 +157,7 @@ window.addEventListener('DOMContentLoaded', () => {
$('#shareapi_restrict_user_enumeration_full_match').on('change', function() {
$('#shareapi_restrict_user_enumeration_full_match_userid_setting').toggleClass('hidden', !this.checked)
+ $('#shareapi_restrict_user_enumeration_full_match_ignore_second_display_name_setting').toggleClass('hidden', !this.checked)
})
$('#allowLinks').change(function() {
diff --git a/apps/settings/templates/settings/admin/sharing.php b/apps/settings/templates/settings/admin/sharing.php
index 09918d4bc64..3cf410727cc 100644
--- a/apps/settings/templates/settings/admin/sharing.php
+++ b/apps/settings/templates/settings/admin/sharing.php
@@ -247,15 +247,24 @@
} ?> />
<label for="shareapi_restrict_user_enumeration_full_match"><?php p($l->t('Allow autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)'));?></label><br />
</p>
- <p id="shareapi_restrict_user_enumeration_full_match_userid_setting" class="double-indent <?php if ($_['shareAPIEnabled'] === 'no' || $_['restrictUserEnumerationFullMatchUserId'] === 'no') {
+ <p id="shareapi_restrict_user_enumeration_full_match_userid_setting" class="double-indent <?php if ($_['shareAPIEnabled'] === 'no' || $_['restrictUserEnumerationFullMatch'] === 'no') {
p('hidden');
}?>">
<input type="checkbox" name="shareapi_restrict_user_enumeration_full_match_userid" value="1" id="shareapi_restrict_user_enumeration_full_match_userid" class="checkbox"
- <?php if ($_['shareeEnumerationFullMatchUserId'] === 'yes') {
+ <?php if ($_['restrictUserEnumerationFullMatchUserId'] === 'yes') {
print_unescaped('checked="checked"');
} ?> />
<label for="shareapi_restrict_user_enumeration_full_match_userid"><?php p($l->t('Match username when restricting to full match'));?></label><br />
</p>
+ <p id="shareapi_restrict_user_enumeration_full_match_ignore_second_display_name_setting" class="double-indent <?php if ($_['shareAPIEnabled'] === 'no' || $_['restrictUserEnumerationFullMatch'] === 'no') {
+ p('hidden');
+}?>">
+ <input type="checkbox" name="shareapi_restrict_user_enumeration_full_match_ignore_second_display_name" value="1" id="shareapi_restrict_user_enumeration_full_match_ignore_second_display_name" class="checkbox"
+ <?php if ($_['restrictUserEnumerationFullMatchIgnoreSecondDisplayName'] === 'yes') {
+ print_unescaped('checked="checked"');
+} ?> />
+ <label for="shareapi_restrict_user_enumeration_full_match_ignore_second_display_name"><?php p($l->t('Ignore second display name in parentheses if any. Example: "First display name (second ignored display name)"'));?></label><br />
+ </p>
<p>
<input type="checkbox" id="publicShareDisclaimer" class="checkbox noJSAutoUpdate"
diff --git a/apps/settings/tests/Settings/Admin/SharingTest.php b/apps/settings/tests/Settings/Admin/SharingTest.php
index f472685574d..e0693b4f963 100644
--- a/apps/settings/tests/Settings/Admin/SharingTest.php
+++ b/apps/settings/tests/Settings/Admin/SharingTest.php
@@ -84,6 +84,7 @@ class SharingTest extends TestCase {
['core', 'shareapi_restrict_user_enumeration_to_phone', 'no', 'no'],
['core', 'shareapi_restrict_user_enumeration_full_match', 'yes', 'yes'],
['core', 'shareapi_restrict_user_enumeration_full_match_userid', 'yes', 'yes'],
+ ['core', 'shareapi_restrict_user_enumeration_full_match_ignore_second_display_name', 'no', 'no'],
['core', 'shareapi_enabled', 'yes', 'yes'],
['core', 'shareapi_default_expire_date', 'no', 'no'],
['core', 'shareapi_expire_after_n_days', '7', '7'],
@@ -118,6 +119,7 @@ class SharingTest extends TestCase {
'restrictUserEnumerationToPhone' => 'no',
'restrictUserEnumerationFullMatch' => 'yes',
'restrictUserEnumerationFullMatchUserId' => 'yes',
+ 'restrictUserEnumerationFullMatchIgnoreSecondDisplayName' => 'no',
'enforceLinkPassword' => false,
'onlyShareWithGroupMembers' => false,
'shareAPIEnabled' => 'yes',
@@ -161,6 +163,7 @@ class SharingTest extends TestCase {
['core', 'shareapi_restrict_user_enumeration_to_phone', 'no', 'no'],
['core', 'shareapi_restrict_user_enumeration_full_match', 'yes', 'yes'],
['core', 'shareapi_restrict_user_enumeration_full_match_userid', 'yes', 'yes'],
+ ['core', 'shareapi_restrict_user_enumeration_full_match_ignore_second_display_name', 'no', 'no'],
['core', 'shareapi_enabled', 'yes', 'yes'],
['core', 'shareapi_default_expire_date', 'no', 'no'],
['core', 'shareapi_expire_after_n_days', '7', '7'],
@@ -195,6 +198,7 @@ class SharingTest extends TestCase {
'restrictUserEnumerationToPhone' => 'no',
'restrictUserEnumerationFullMatch' => 'yes',
'restrictUserEnumerationFullMatchUserId' => 'yes',
+ 'restrictUserEnumerationFullMatchIgnoreSecondDisplayName' => 'no',
'enforceLinkPassword' => false,
'onlyShareWithGroupMembers' => false,
'shareAPIEnabled' => 'yes',
diff --git a/build/integration/features/bootstrap/CollaborationContext.php b/build/integration/features/bootstrap/CollaborationContext.php
index bc01a32f12c..b62588060a4 100644
--- a/build/integration/features/bootstrap/CollaborationContext.php
+++ b/build/integration/features/bootstrap/CollaborationContext.php
@@ -123,6 +123,7 @@ EOF;
$this->deleteServerConfig('core', 'shareapi_restrict_user_enumeration_to_phone');
$this->deleteServerConfig('core', 'shareapi_restrict_user_enumeration_full_match');
$this->deleteServerConfig('core', 'shareapi_restrict_user_enumeration_full_match_userid');
+ $this->deleteServerConfig('core', 'shareapi_restrict_user_enumeration_full_match_ignore_second_display_name');
$this->deleteServerConfig('core', 'shareapi_only_share_with_group_members');
}
diff --git a/dist/settings-legacy-admin.js b/dist/settings-legacy-admin.js
index acf1b69cbf3..f38a60f2b0d 100644
--- a/dist/settings-legacy-admin.js
+++ b/dist/settings-legacy-admin.js
@@ -1,2 +1,2 @@
-({39583:function(){var e=this;window.addEventListener("DOMContentLoaded",(function(){$("#excludedGroups,#linksExcludedGroups,#passwordsExcludedGroups").each((function(e,t){var s=this;OC.Settings.setupGroupsSelect($(t)),$(t).change((function(e){var t=e.val||[];t=JSON.stringify(t),OCP.AppConfig.setValue("core",$(s).attr("name"),t)}))})),$("#loglevel").change((function(){$.post(OC.generateUrl("/settings/admin/log/level"),{level:$(e).val()},(function(){OC.Log.reload()}))})),$("#backgroundjobs span.crondate").tooltip({placement:"top"}),$("#backgroundjobs input").change((function(){if($(e).is(":checked")){var t=$(e).val();"ajax"!==t&&"webcron"!==t&&"cron"!==t||OCP.AppConfig.setValue("core","backgroundjobs_mode",t,{success:function(){OCP.AppConfig.deleteKey("core","cronErrors")}})}})),$("#shareAPIEnabled").change((function(){$("#shareAPI p:not(#enable)").toggleClass("hidden",!e.checked)})),$("#enableEncryption").change((function(){$("#encryptionAPI div#EncryptionWarning").toggleClass("hidden")})),$("#reallyEnableEncryption").click((function(){$("#encryptionAPI div#EncryptionWarning").toggleClass("hidden"),$("#encryptionAPI div#EncryptionSettingsArea").toggleClass("hidden"),OCP.AppConfig.setValue("core","encryption_enabled","yes"),$("#enableEncryption").attr("disabled","disabled")})),$("#startmigration").click((function(e){$(window).on("beforeunload.encryption",(function(e){return t("settings","Migration in progress. Please wait until the migration is finished")})),e.preventDefault(),$("#startmigration").prop("disabled",!0),OC.msg.startAction("#startmigration_msg",t("settings","Migration started …")),$.post(OC.generateUrl("/settings/admin/startmigration"),"",(function(e){OC.msg.finishedAction("#startmigration_msg",e),"success"===e.status?($("#encryptionAPI div#selectEncryptionModules").toggleClass("hidden"),$("#encryptionAPI div#migrationWarning").toggleClass("hidden")):$("#startmigration").prop("disabled",!1),$(window).off("beforeunload.encryption")}))})),$("#shareapiExpireAfterNDays").on("input",(function(){this.value=this.value.replace(/\D/g,"")})),$("#shareAPI input:not(.noJSAutoUpdate)").change((function(){var e=$(this).val();"checkbox"===$(this).attr("type")&&(e=this.checked?"yes":"no"),OCP.AppConfig.setValue("core",$(this).attr("name"),e)})),$("#shareapiDefaultExpireDate").change((function(){$("setDefaultExpireDate").toggleClass("hidden",!this.checked)})),$("#shareapiDefaultInternalExpireDate").change((function(){$("#setDefaultInternalExpireDate").toggleClass("hidden",!this.checked)})),$("#shareapiDefaultRemoteExpireDate").change((function(){$("#setDefaultRemoteExpireDate").toggleClass("hidden",!this.checked)})),$("#enforceLinkPassword").change((function(){$("#selectPasswordsExcludedGroups").toggleClass("hidden",!this.checked)})),$("#publicShareDisclaimer").change((function(){$("#publicShareDisclaimerText").toggleClass("hidden",!this.checked),this.checked||s("")})),$("#shareApiDefaultPermissionsSection input").change((function(e){var t=$("#shareApiDefaultPermissions"),s=$(e.target),n=t.val();return s.is(":checked")?n|=s.val():n&=~s.val(),n|=OC.PERMISSION_READ,t.val(n).change(),e.preventDefault(),!1}));var s=_.debounce((function(e){var s={success:function(){OC.msg.finishedSuccess("#publicShareDisclaimerStatus",t("settings","Saved"))},error:function(){OC.msg.finishedError("#publicShareDisclaimerStatus",t("settings","Not saved"))}};OC.msg.startSaving("#publicShareDisclaimerStatus"),_.isString(e)&&""!==e?OCP.AppConfig.setValue("core","shareapi_public_link_disclaimertext",e,s):($("#publicShareDisclaimerText").val(""),OCP.AppConfig.deleteKey("core","shareapi_public_link_disclaimertext",s))}),500);$("#publicShareDisclaimerText").on("change, keyup",(function(){s(this.value)})),$("#shareapi_allow_share_dialog_user_enumeration").on("change",(function(){$("#shareapi_restrict_user_enumeration_to_group_setting").toggleClass("hidden",!this.checked),$("#shareapi_restrict_user_enumeration_to_phone_setting").toggleClass("hidden",!this.checked),$("#shareapi_restrict_user_enumeration_combinewarning_setting").toggleClass("hidden",!this.checked)})),$("#shareapi_restrict_user_enumeration_full_match").on("change",(function(){$("#shareapi_restrict_user_enumeration_full_match_userid_setting").toggleClass("hidden",!this.checked)})),$("#allowLinks").change((function(){$("#publicLinkSettings").toggleClass("hidden",!this.checked),$("#setDefaultExpireDate").toggleClass("hidden",!(this.checked&&$("#shareapiDefaultExpireDate")[0].checked))})),$("#mail_smtpauth").change((function(){this.checked?$("#mail_credentials").removeClass("hidden"):$("#mail_credentials").addClass("hidden")})),$("#mail_smtpmode").change((function(){"smtp"!==$(this).val()?($("#setting_smtpauth").addClass("hidden"),$("#setting_smtphost").addClass("hidden"),$("#mail_smtpsecure_label").addClass("hidden"),$("#mail_smtpsecure").addClass("hidden"),$("#mail_credentials").addClass("hidden"),$("#mail_sendmailmode_label, #mail_sendmailmode").removeClass("hidden")):($("#setting_smtpauth").removeClass("hidden"),$("#setting_smtphost").removeClass("hidden"),$("#mail_smtpsecure_label").removeClass("hidden"),$("#mail_smtpsecure").removeClass("hidden"),$("#mail_smtpauth").is(":checked")&&$("#mail_credentials").removeClass("hidden"),$("#mail_sendmailmode_label, #mail_sendmailmode").addClass("hidden"))})),$("#mail_general_settings_form").change((function e(){OC.PasswordConfirmation.requiresPasswordConfirmation()?OC.PasswordConfirmation.requirePasswordConfirmation(e):(OC.msg.startSaving("#mail_settings_msg"),$.ajax({url:OC.generateUrl("/settings/admin/mailsettings"),type:"POST",data:$("#mail_general_settings_form").serialize(),success:function(){OC.msg.finishedSuccess("#mail_settings_msg",t("settings","Saved"))},error:function(e){OC.msg.finishedError("#mail_settings_msg",e.responseJSON)}}))})),$("#mail_credentials_settings_submit").click((function e(){OC.PasswordConfirmation.requiresPasswordConfirmation()?OC.PasswordConfirmation.requirePasswordConfirmation(e):(OC.msg.startSaving("#mail_settings_msg"),$.ajax({url:OC.generateUrl("/settings/admin/mailsettings/credentials"),type:"POST",data:$("#mail_credentials_settings").serialize(),success:function(){OC.msg.finishedSuccess("#mail_settings_msg",t("settings","Saved"))},error:function(e){OC.msg.finishedError("#mail_settings_msg",e.responseJSON)}}))})),$("#mail_smtppassword").click((function(){"text"===e.type&&"********"===e.value&&(e.type="password",e.value="")})),$("#sendtestemail").click((function(e){e.preventDefault(),OC.msg.startAction("#sendtestmail_msg",t("settings","Sending…")),$.ajax({url:OC.generateUrl("/settings/admin/mailtest"),type:"POST",success:function(){OC.msg.finishedSuccess("#sendtestmail_msg",t("settings","Email sent"))},error:function(e){OC.msg.finishedError("#sendtestmail_msg",e.responseJSON)}})})),$("#allowGroupSharing").change((function(){$("#allowGroupSharing").toggleClass("hidden",!e.checked)})),$("#shareapiExcludeGroups").change((function(){$("#selectExcludedGroups").toggleClass("hidden",!e.checked)})),null!==document.getElementById("security-warning")&&$.when(OC.SetupChecks.checkWebDAV(),OC.SetupChecks.checkWellKnownUrl("GET","/.well-known/webfinger",OC.theme.docPlaceholderUrl,!0===$("#postsetupchecks").data("check-wellknown"),[200,404],!0),OC.SetupChecks.checkWellKnownUrl("GET","/.well-known/nodeinfo",OC.theme.docPlaceholderUrl,!0===$("#postsetupchecks").data("check-wellknown"),[200,404],!0),OC.SetupChecks.checkWellKnownUrl("PROPFIND","/.well-known/caldav",OC.theme.docPlaceholderUrl,!0===$("#postsetupchecks").data("check-wellknown")),OC.SetupChecks.checkWellKnownUrl("PROPFIND","/.well-known/carddav",OC.theme.docPlaceholderUrl,!0===$("#postsetupchecks").data("check-wellknown")),OC.SetupChecks.checkProviderUrl(OC.getRootPath()+"/ocm-provider/",OC.theme.docPlaceholderUrl,!0===$("#postsetupchecks").data("check-wellknown")),OC.SetupChecks.checkProviderUrl(OC.getRootPath()+"/ocs-provider/",OC.theme.docPlaceholderUrl,!0===$("#postsetupchecks").data("check-wellknown")),OC.SetupChecks.checkSetup(),OC.SetupChecks.checkGeneric(),OC.SetupChecks.checkWOFF2Loading(OC.filePath("core","","fonts/NotoSans-Regular-latin.woff2"),OC.theme.docPlaceholderUrl),OC.SetupChecks.checkDataProtected()).then((function(e,t,s,n,i,a,r,c,l,o,d){var h=[].concat(e,t,s,n,i,a,r,c,l,o,d),g=$("#postsetupchecks");$("#security-warning-state-loading").addClass("hidden");for(var u=!1,p=g.find(".errors"),m=g.find(".warnings"),C=g.find(".info"),f=0;f<h.length;f++)switch(h[f].type){case OC.SetupChecks.MESSAGE_TYPE_INFO:C.append("<li>"+h[f].msg+"</li>");break;case OC.SetupChecks.MESSAGE_TYPE_WARNING:m.append("<li>"+h[f].msg+"</li>");break;case OC.SetupChecks.MESSAGE_TYPE_ERROR:default:p.append("<li>"+h[f].msg+"</li>")}p.find("li").length>0&&(p.removeClass("hidden"),u=!0),m.find("li").length>0&&(m.removeClass("hidden"),u=!0),C.find("li").length>0&&(C.removeClass("hidden"),u=!0),u?($("#postsetupchecks-hint").removeClass("hidden"),p.find("li").length>0?$("#security-warning-state-failure").removeClass("hidden"):$("#security-warning-state-warning").removeClass("hidden")):0===$("#security-warning").children("ul").children().length?$("#security-warning-state-ok").removeClass("hidden"):$("#security-warning-state-failure").removeClass("hidden")}))}))}})[39583]();
-//# sourceMappingURL=settings-legacy-admin.js.map?v=296372aee39ac7e22940 \ No newline at end of file
+({39583:function(){var e=this;window.addEventListener("DOMContentLoaded",(function(){$("#excludedGroups,#linksExcludedGroups,#passwordsExcludedGroups").each((function(e,t){var s=this;OC.Settings.setupGroupsSelect($(t)),$(t).change((function(e){var t=e.val||[];t=JSON.stringify(t),OCP.AppConfig.setValue("core",$(s).attr("name"),t)}))})),$("#loglevel").change((function(){$.post(OC.generateUrl("/settings/admin/log/level"),{level:$(e).val()},(function(){OC.Log.reload()}))})),$("#backgroundjobs span.crondate").tooltip({placement:"top"}),$("#backgroundjobs input").change((function(){if($(e).is(":checked")){var t=$(e).val();"ajax"!==t&&"webcron"!==t&&"cron"!==t||OCP.AppConfig.setValue("core","backgroundjobs_mode",t,{success:function(){OCP.AppConfig.deleteKey("core","cronErrors")}})}})),$("#shareAPIEnabled").change((function(){$("#shareAPI p:not(#enable)").toggleClass("hidden",!e.checked)})),$("#enableEncryption").change((function(){$("#encryptionAPI div#EncryptionWarning").toggleClass("hidden")})),$("#reallyEnableEncryption").click((function(){$("#encryptionAPI div#EncryptionWarning").toggleClass("hidden"),$("#encryptionAPI div#EncryptionSettingsArea").toggleClass("hidden"),OCP.AppConfig.setValue("core","encryption_enabled","yes"),$("#enableEncryption").attr("disabled","disabled")})),$("#startmigration").click((function(e){$(window).on("beforeunload.encryption",(function(e){return t("settings","Migration in progress. Please wait until the migration is finished")})),e.preventDefault(),$("#startmigration").prop("disabled",!0),OC.msg.startAction("#startmigration_msg",t("settings","Migration started …")),$.post(OC.generateUrl("/settings/admin/startmigration"),"",(function(e){OC.msg.finishedAction("#startmigration_msg",e),"success"===e.status?($("#encryptionAPI div#selectEncryptionModules").toggleClass("hidden"),$("#encryptionAPI div#migrationWarning").toggleClass("hidden")):$("#startmigration").prop("disabled",!1),$(window).off("beforeunload.encryption")}))})),$("#shareapiExpireAfterNDays").on("input",(function(){this.value=this.value.replace(/\D/g,"")})),$("#shareAPI input:not(.noJSAutoUpdate)").change((function(){var e=$(this).val();"checkbox"===$(this).attr("type")&&(e=this.checked?"yes":"no"),OCP.AppConfig.setValue("core",$(this).attr("name"),e)})),$("#shareapiDefaultExpireDate").change((function(){$("setDefaultExpireDate").toggleClass("hidden",!this.checked)})),$("#shareapiDefaultInternalExpireDate").change((function(){$("#setDefaultInternalExpireDate").toggleClass("hidden",!this.checked)})),$("#shareapiDefaultRemoteExpireDate").change((function(){$("#setDefaultRemoteExpireDate").toggleClass("hidden",!this.checked)})),$("#enforceLinkPassword").change((function(){$("#selectPasswordsExcludedGroups").toggleClass("hidden",!this.checked)})),$("#publicShareDisclaimer").change((function(){$("#publicShareDisclaimerText").toggleClass("hidden",!this.checked),this.checked||s("")})),$("#shareApiDefaultPermissionsSection input").change((function(e){var t=$("#shareApiDefaultPermissions"),s=$(e.target),n=t.val();return s.is(":checked")?n|=s.val():n&=~s.val(),n|=OC.PERMISSION_READ,t.val(n).change(),e.preventDefault(),!1}));var s=_.debounce((function(e){var s={success:function(){OC.msg.finishedSuccess("#publicShareDisclaimerStatus",t("settings","Saved"))},error:function(){OC.msg.finishedError("#publicShareDisclaimerStatus",t("settings","Not saved"))}};OC.msg.startSaving("#publicShareDisclaimerStatus"),_.isString(e)&&""!==e?OCP.AppConfig.setValue("core","shareapi_public_link_disclaimertext",e,s):($("#publicShareDisclaimerText").val(""),OCP.AppConfig.deleteKey("core","shareapi_public_link_disclaimertext",s))}),500);$("#publicShareDisclaimerText").on("change, keyup",(function(){s(this.value)})),$("#shareapi_allow_share_dialog_user_enumeration").on("change",(function(){$("#shareapi_restrict_user_enumeration_to_group_setting").toggleClass("hidden",!this.checked),$("#shareapi_restrict_user_enumeration_to_phone_setting").toggleClass("hidden",!this.checked),$("#shareapi_restrict_user_enumeration_combinewarning_setting").toggleClass("hidden",!this.checked)})),$("#shareapi_restrict_user_enumeration_full_match").on("change",(function(){$("#shareapi_restrict_user_enumeration_full_match_userid_setting").toggleClass("hidden",!this.checked),$("#shareapi_restrict_user_enumeration_full_match_ignore_second_display_name_setting").toggleClass("hidden",!this.checked)})),$("#allowLinks").change((function(){$("#publicLinkSettings").toggleClass("hidden",!this.checked),$("#setDefaultExpireDate").toggleClass("hidden",!(this.checked&&$("#shareapiDefaultExpireDate")[0].checked))})),$("#mail_smtpauth").change((function(){this.checked?$("#mail_credentials").removeClass("hidden"):$("#mail_credentials").addClass("hidden")})),$("#mail_smtpmode").change((function(){"smtp"!==$(this).val()?($("#setting_smtpauth").addClass("hidden"),$("#setting_smtphost").addClass("hidden"),$("#mail_smtpsecure_label").addClass("hidden"),$("#mail_smtpsecure").addClass("hidden"),$("#mail_credentials").addClass("hidden"),$("#mail_sendmailmode_label, #mail_sendmailmode").removeClass("hidden")):($("#setting_smtpauth").removeClass("hidden"),$("#setting_smtphost").removeClass("hidden"),$("#mail_smtpsecure_label").removeClass("hidden"),$("#mail_smtpsecure").removeClass("hidden"),$("#mail_smtpauth").is(":checked")&&$("#mail_credentials").removeClass("hidden"),$("#mail_sendmailmode_label, #mail_sendmailmode").addClass("hidden"))})),$("#mail_general_settings_form").change((function e(){OC.PasswordConfirmation.requiresPasswordConfirmation()?OC.PasswordConfirmation.requirePasswordConfirmation(e):(OC.msg.startSaving("#mail_settings_msg"),$.ajax({url:OC.generateUrl("/settings/admin/mailsettings"),type:"POST",data:$("#mail_general_settings_form").serialize(),success:function(){OC.msg.finishedSuccess("#mail_settings_msg",t("settings","Saved"))},error:function(e){OC.msg.finishedError("#mail_settings_msg",e.responseJSON)}}))})),$("#mail_credentials_settings_submit").click((function e(){OC.PasswordConfirmation.requiresPasswordConfirmation()?OC.PasswordConfirmation.requirePasswordConfirmation(e):(OC.msg.startSaving("#mail_settings_msg"),$.ajax({url:OC.generateUrl("/settings/admin/mailsettings/credentials"),type:"POST",data:$("#mail_credentials_settings").serialize(),success:function(){OC.msg.finishedSuccess("#mail_settings_msg",t("settings","Saved"))},error:function(e){OC.msg.finishedError("#mail_settings_msg",e.responseJSON)}}))})),$("#mail_smtppassword").click((function(){"text"===e.type&&"********"===e.value&&(e.type="password",e.value="")})),$("#sendtestemail").click((function(e){e.preventDefault(),OC.msg.startAction("#sendtestmail_msg",t("settings","Sending…")),$.ajax({url:OC.generateUrl("/settings/admin/mailtest"),type:"POST",success:function(){OC.msg.finishedSuccess("#sendtestmail_msg",t("settings","Email sent"))},error:function(e){OC.msg.finishedError("#sendtestmail_msg",e.responseJSON)}})})),$("#allowGroupSharing").change((function(){$("#allowGroupSharing").toggleClass("hidden",!e.checked)})),$("#shareapiExcludeGroups").change((function(){$("#selectExcludedGroups").toggleClass("hidden",!e.checked)})),null!==document.getElementById("security-warning")&&$.when(OC.SetupChecks.checkWebDAV(),OC.SetupChecks.checkWellKnownUrl("GET","/.well-known/webfinger",OC.theme.docPlaceholderUrl,!0===$("#postsetupchecks").data("check-wellknown"),[200,404],!0),OC.SetupChecks.checkWellKnownUrl("GET","/.well-known/nodeinfo",OC.theme.docPlaceholderUrl,!0===$("#postsetupchecks").data("check-wellknown"),[200,404],!0),OC.SetupChecks.checkWellKnownUrl("PROPFIND","/.well-known/caldav",OC.theme.docPlaceholderUrl,!0===$("#postsetupchecks").data("check-wellknown")),OC.SetupChecks.checkWellKnownUrl("PROPFIND","/.well-known/carddav",OC.theme.docPlaceholderUrl,!0===$("#postsetupchecks").data("check-wellknown")),OC.SetupChecks.checkProviderUrl(OC.getRootPath()+"/ocm-provider/",OC.theme.docPlaceholderUrl,!0===$("#postsetupchecks").data("check-wellknown")),OC.SetupChecks.checkProviderUrl(OC.getRootPath()+"/ocs-provider/",OC.theme.docPlaceholderUrl,!0===$("#postsetupchecks").data("check-wellknown")),OC.SetupChecks.checkSetup(),OC.SetupChecks.checkGeneric(),OC.SetupChecks.checkWOFF2Loading(OC.filePath("core","","fonts/NotoSans-Regular-latin.woff2"),OC.theme.docPlaceholderUrl),OC.SetupChecks.checkDataProtected()).then((function(e,t,s,n,i,a,r,c,l,o,d){var h=[].concat(e,t,s,n,i,a,r,c,l,o,d),g=$("#postsetupchecks");$("#security-warning-state-loading").addClass("hidden");for(var u=!1,p=g.find(".errors"),m=g.find(".warnings"),C=g.find(".info"),f=0;f<h.length;f++)switch(h[f].type){case OC.SetupChecks.MESSAGE_TYPE_INFO:C.append("<li>"+h[f].msg+"</li>");break;case OC.SetupChecks.MESSAGE_TYPE_WARNING:m.append("<li>"+h[f].msg+"</li>");break;case OC.SetupChecks.MESSAGE_TYPE_ERROR:default:p.append("<li>"+h[f].msg+"</li>")}p.find("li").length>0&&(p.removeClass("hidden"),u=!0),m.find("li").length>0&&(m.removeClass("hidden"),u=!0),C.find("li").length>0&&(C.removeClass("hidden"),u=!0),u?($("#postsetupchecks-hint").removeClass("hidden"),p.find("li").length>0?$("#security-warning-state-failure").removeClass("hidden"):$("#security-warning-state-warning").removeClass("hidden")):0===$("#security-warning").children("ul").children().length?$("#security-warning-state-ok").removeClass("hidden"):$("#security-warning-state-failure").removeClass("hidden")}))}))}})[39583]();
+//# sourceMappingURL=settings-legacy-admin.js.map?v=30352b4a27a5447a55d9 \ No newline at end of file
diff --git a/dist/settings-legacy-admin.js.map b/dist/settings-legacy-admin.js.map
index bcef1589145..0ceb751e8cf 100644
--- a/dist/settings-legacy-admin.js.map
+++ b/dist/settings-legacy-admin.js.map
@@ -1 +1 @@
-{"version":3,"file":"settings-legacy-admin.js?v=296372aee39ac7e22940","mappings":"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","sources":["webpack:///nextcloud/apps/settings/src/admin.js","webpack:///nextcloud/webpack/startup"],"sourcesContent":["window.addEventListener('DOMContentLoaded', () => {\n\t$('#excludedGroups,#linksExcludedGroups,#passwordsExcludedGroups').each(function(index, element) {\n\t\tOC.Settings.setupGroupsSelect($(element))\n\t\t$(element).change((ev) => {\n\t\t\tlet groups = ev.val || []\n\t\t\tgroups = JSON.stringify(groups)\n\t\t\tOCP.AppConfig.setValue('core', $(this).attr('name'), groups)\n\t\t})\n\t})\n\n\t$('#loglevel').change(() => {\n\t\t$.post(OC.generateUrl('/settings/admin/log/level'), { level: $(this).val() }, () => {\n\t\t\tOC.Log.reload()\n\t\t})\n\t})\n\n\t$('#backgroundjobs span.crondate').tooltip({ placement: 'top' })\n\n\t$('#backgroundjobs input').change(() => {\n\t\tif ($(this).is(':checked')) {\n\t\t\tconst mode = $(this).val()\n\t\t\tif (mode === 'ajax' || mode === 'webcron' || mode === 'cron') {\n\t\t\t\tOCP.AppConfig.setValue('core', 'backgroundjobs_mode', mode, {\n\t\t\t\t\tsuccess: () => {\n\t\t\t\t\t\t// clear cron errors on background job mode change\n\t\t\t\t\t\tOCP.AppConfig.deleteKey('core', 'cronErrors')\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t})\n\n\t$('#shareAPIEnabled').change(() => {\n\t\t$('#shareAPI p:not(#enable)').toggleClass('hidden', !this.checked)\n\t})\n\n\t$('#enableEncryption').change(() => {\n\t\t$('#encryptionAPI div#EncryptionWarning').toggleClass('hidden')\n\t})\n\n\t$('#reallyEnableEncryption').click(() => {\n\t\t$('#encryptionAPI div#EncryptionWarning').toggleClass('hidden')\n\t\t$('#encryptionAPI div#EncryptionSettingsArea').toggleClass('hidden')\n\t\tOCP.AppConfig.setValue('core', 'encryption_enabled', 'yes')\n\t\t$('#enableEncryption').attr('disabled', 'disabled')\n\t})\n\n\t$('#startmigration').click((event) => {\n\t\t$(window).on('beforeunload.encryption', (e) => {\n\t\t\treturn t('settings', 'Migration in progress. Please wait until the migration is finished')\n\t\t})\n\t\tevent.preventDefault()\n\t\t$('#startmigration').prop('disabled', true)\n\t\tOC.msg.startAction('#startmigration_msg', t('settings', 'Migration started …'))\n\t\t$.post(OC.generateUrl('/settings/admin/startmigration'), '', function(data) {\n\t\t\tOC.msg.finishedAction('#startmigration_msg', data)\n\t\t\tif (data.status === 'success') {\n\t\t\t\t$('#encryptionAPI div#selectEncryptionModules').toggleClass('hidden')\n\t\t\t\t$('#encryptionAPI div#migrationWarning').toggleClass('hidden')\n\t\t\t} else {\n\t\t\t\t$('#startmigration').prop('disabled', false)\n\t\t\t}\n\t\t\t$(window).off('beforeunload.encryption')\n\n\t\t})\n\t})\n\n\t$('#shareapiExpireAfterNDays').on('input', function() {\n\t\tthis.value = this.value.replace(/\\D/g, '')\n\t})\n\n\t$('#shareAPI input:not(.noJSAutoUpdate)').change(function() {\n\t\tlet value = $(this).val()\n\t\tif ($(this).attr('type') === 'checkbox') {\n\t\t\tif (this.checked) {\n\t\t\t\tvalue = 'yes'\n\t\t\t} else {\n\t\t\t\tvalue = 'no'\n\t\t\t}\n\t\t}\n\t\tOCP.AppConfig.setValue('core', $(this).attr('name'), value)\n\t})\n\n\t$('#shareapiDefaultExpireDate').change(function() {\n\t\t$('setDefaultExpireDate').toggleClass('hidden', !this.checked)\n\t})\n\n\t$('#shareapiDefaultInternalExpireDate').change(function() {\n\t\t$('#setDefaultInternalExpireDate').toggleClass('hidden', !this.checked)\n\t})\n\n\t$('#shareapiDefaultRemoteExpireDate').change(function() {\n\t\t$('#setDefaultRemoteExpireDate').toggleClass('hidden', !this.checked)\n\t})\n\n\t$('#enforceLinkPassword').change(function() {\n\t\t$('#selectPasswordsExcludedGroups').toggleClass('hidden', !this.checked)\n\t})\n\n\t$('#publicShareDisclaimer').change(function() {\n\t\t$('#publicShareDisclaimerText').toggleClass('hidden', !this.checked)\n\t\tif (!this.checked) {\n\t\t\tsavePublicShareDisclaimerText('')\n\t\t}\n\t})\n\n\t$('#shareApiDefaultPermissionsSection input').change(function(ev) {\n\t\tconst $el = $('#shareApiDefaultPermissions')\n\t\tconst $target = $(ev.target)\n\n\t\tlet value = $el.val()\n\t\tif ($target.is(':checked')) {\n\t\t\tvalue = value | $target.val()\n\t\t} else {\n\t\t\tvalue = value & ~$target.val()\n\t\t}\n\n\t\t// always set read permission\n\t\tvalue |= OC.PERMISSION_READ\n\n\t\t// this will trigger the field's change event and will save it\n\t\t$el.val(value).change()\n\n\t\tev.preventDefault()\n\n\t\treturn false\n\t})\n\n\tconst savePublicShareDisclaimerText = _.debounce(function(value) {\n\t\tconst options = {\n\t\t\tsuccess: () => {\n\t\t\t\tOC.msg.finishedSuccess('#publicShareDisclaimerStatus', t('settings', 'Saved'))\n\t\t\t},\n\t\t\terror: () => {\n\t\t\t\tOC.msg.finishedError('#publicShareDisclaimerStatus', t('settings', 'Not saved'))\n\t\t\t}\n\t\t}\n\n\t\tOC.msg.startSaving('#publicShareDisclaimerStatus')\n\t\tif (_.isString(value) && value !== '') {\n\t\t\tOCP.AppConfig.setValue('core', 'shareapi_public_link_disclaimertext', value, options)\n\t\t} else {\n\t\t\t$('#publicShareDisclaimerText').val('')\n\t\t\tOCP.AppConfig.deleteKey('core', 'shareapi_public_link_disclaimertext', options)\n\t\t}\n\t}, 500)\n\n\t$('#publicShareDisclaimerText').on('change, keyup', function() {\n\t\tsavePublicShareDisclaimerText(this.value)\n\t})\n\n\t$('#shareapi_allow_share_dialog_user_enumeration').on('change', function() {\n\t\t$('#shareapi_restrict_user_enumeration_to_group_setting').toggleClass('hidden', !this.checked)\n\t\t$('#shareapi_restrict_user_enumeration_to_phone_setting').toggleClass('hidden', !this.checked)\n\t\t$('#shareapi_restrict_user_enumeration_combinewarning_setting').toggleClass('hidden', !this.checked)\n\t})\n\n\t$('#shareapi_restrict_user_enumeration_full_match').on('change', function() {\n\t\t$('#shareapi_restrict_user_enumeration_full_match_userid_setting').toggleClass('hidden', !this.checked)\n\t})\n\n\t$('#allowLinks').change(function() {\n\t\t$('#publicLinkSettings').toggleClass('hidden', !this.checked)\n\t\t$('#setDefaultExpireDate').toggleClass('hidden', !(this.checked && $('#shareapiDefaultExpireDate')[0].checked))\n\t})\n\n\t$('#mail_smtpauth').change(function() {\n\t\tif (!this.checked) {\n\t\t\t$('#mail_credentials').addClass('hidden')\n\t\t} else {\n\t\t\t$('#mail_credentials').removeClass('hidden')\n\t\t}\n\t})\n\n\t$('#mail_smtpmode').change(function() {\n\t\tif ($(this).val() !== 'smtp') {\n\t\t\t$('#setting_smtpauth').addClass('hidden')\n\t\t\t$('#setting_smtphost').addClass('hidden')\n\t\t\t$('#mail_smtpsecure_label').addClass('hidden')\n\t\t\t$('#mail_smtpsecure').addClass('hidden')\n\t\t\t$('#mail_credentials').addClass('hidden')\n\t\t\t$('#mail_sendmailmode_label, #mail_sendmailmode').removeClass('hidden')\n\t\t} else {\n\t\t\t$('#setting_smtpauth').removeClass('hidden')\n\t\t\t$('#setting_smtphost').removeClass('hidden')\n\t\t\t$('#mail_smtpsecure_label').removeClass('hidden')\n\t\t\t$('#mail_smtpsecure').removeClass('hidden')\n\t\t\tif ($('#mail_smtpauth').is(':checked')) {\n\t\t\t\t$('#mail_credentials').removeClass('hidden')\n\t\t\t}\n\t\t\t$('#mail_sendmailmode_label, #mail_sendmailmode').addClass('hidden')\n\t\t}\n\t})\n\n\tconst changeEmailSettings = function() {\n\t\tif (OC.PasswordConfirmation.requiresPasswordConfirmation()) {\n\t\t\tOC.PasswordConfirmation.requirePasswordConfirmation(changeEmailSettings)\n\t\t\treturn\n\t\t}\n\n\t\tOC.msg.startSaving('#mail_settings_msg')\n\t\t$.ajax({\n\t\t\turl: OC.generateUrl('/settings/admin/mailsettings'),\n\t\t\ttype: 'POST',\n\t\t\tdata: $('#mail_general_settings_form').serialize(),\n\t\t\tsuccess: () => {\n\t\t\t\tOC.msg.finishedSuccess('#mail_settings_msg', t('settings', 'Saved'))\n\t\t\t},\n\t\t\terror: (xhr) => {\n\t\t\t\tOC.msg.finishedError('#mail_settings_msg', xhr.responseJSON)\n\t\t\t}\n\t\t})\n\t}\n\n\tconst toggleEmailCredentials = function() {\n\t\tif (OC.PasswordConfirmation.requiresPasswordConfirmation()) {\n\t\t\tOC.PasswordConfirmation.requirePasswordConfirmation(toggleEmailCredentials)\n\t\t\treturn\n\t\t}\n\n\t\tOC.msg.startSaving('#mail_settings_msg')\n\t\t$.ajax({\n\t\t\turl: OC.generateUrl('/settings/admin/mailsettings/credentials'),\n\t\t\ttype: 'POST',\n\t\t\tdata: $('#mail_credentials_settings').serialize(),\n\t\t\tsuccess: () => {\n\t\t\t\tOC.msg.finishedSuccess('#mail_settings_msg', t('settings', 'Saved'))\n\t\t\t},\n\t\t\terror: (xhr) => {\n\t\t\t\tOC.msg.finishedError('#mail_settings_msg', xhr.responseJSON)\n\t\t\t}\n\t\t})\n\t}\n\n\t$('#mail_general_settings_form').change(changeEmailSettings)\n\t$('#mail_credentials_settings_submit').click(toggleEmailCredentials)\n\t$('#mail_smtppassword').click(() => {\n\t\tif (this.type === 'text' && this.value === '********') {\n\t\t\tthis.type = 'password'\n\t\t\tthis.value = ''\n\t\t}\n\t})\n\n\t$('#sendtestemail').click((event) => {\n\t\tevent.preventDefault()\n\t\tOC.msg.startAction('#sendtestmail_msg', t('settings', 'Sending…'))\n\n\t\t$.ajax({\n\t\t\turl: OC.generateUrl('/settings/admin/mailtest'),\n\t\t\ttype: 'POST',\n\t\t\tsuccess: () => {\n\t\t\t\tOC.msg.finishedSuccess('#sendtestmail_msg', t('settings', 'Email sent'))\n\t\t\t},\n\t\t\terror: (xhr) => {\n\t\t\t\tOC.msg.finishedError('#sendtestmail_msg', xhr.responseJSON)\n\t\t\t}\n\t\t})\n\t})\n\n\t$('#allowGroupSharing').change(() => {\n\t\t$('#allowGroupSharing').toggleClass('hidden', !this.checked)\n\t})\n\n\t$('#shareapiExcludeGroups').change(() => {\n\t\t$('#selectExcludedGroups').toggleClass('hidden', !this.checked)\n\t})\n\n\tconst setupChecks = () => {\n\t\t// run setup checks then gather error messages\n\t\t$.when(\n\t\t\tOC.SetupChecks.checkWebDAV(),\n\t\t\tOC.SetupChecks.checkWellKnownUrl('GET', '/.well-known/webfinger', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true, [200, 404], true),\n\t\t\tOC.SetupChecks.checkWellKnownUrl('GET', '/.well-known/nodeinfo', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true, [200, 404], true),\n\t\t\tOC.SetupChecks.checkWellKnownUrl('PROPFIND', '/.well-known/caldav', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true),\n\t\t\tOC.SetupChecks.checkWellKnownUrl('PROPFIND', '/.well-known/carddav', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true),\n\t\t\tOC.SetupChecks.checkProviderUrl(OC.getRootPath() + '/ocm-provider/', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true),\n\t\t\tOC.SetupChecks.checkProviderUrl(OC.getRootPath() + '/ocs-provider/', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true),\n\t\t\tOC.SetupChecks.checkSetup(),\n\t\t\tOC.SetupChecks.checkGeneric(),\n\t\t\tOC.SetupChecks.checkWOFF2Loading(OC.filePath('core', '', 'fonts/NotoSans-Regular-latin.woff2'), OC.theme.docPlaceholderUrl),\n\t\t\tOC.SetupChecks.checkDataProtected()\n\t\t).then((check1, check2, check3, check4, check5, check6, check7, check8, check9, check10, check11) => {\n\t\t\tconst messages = [].concat(check1, check2, check3, check4, check5, check6, check7, check8, check9, check10, check11)\n\t\t\tconst $el = $('#postsetupchecks')\n\t\t\t$('#security-warning-state-loading').addClass('hidden')\n\n\t\t\tlet hasMessages = false\n\t\t\tconst $errorsEl = $el.find('.errors')\n\t\t\tconst $warningsEl = $el.find('.warnings')\n\t\t\tconst $infoEl = $el.find('.info')\n\n\t\t\tfor (let i = 0; i < messages.length; i++) {\n\t\t\t\tswitch (messages[i].type) {\n\t\t\t\tcase OC.SetupChecks.MESSAGE_TYPE_INFO:\n\t\t\t\t\t$infoEl.append('<li>' + messages[i].msg + '</li>')\n\t\t\t\t\tbreak\n\t\t\t\tcase OC.SetupChecks.MESSAGE_TYPE_WARNING:\n\t\t\t\t\t$warningsEl.append('<li>' + messages[i].msg + '</li>')\n\t\t\t\t\tbreak\n\t\t\t\tcase OC.SetupChecks.MESSAGE_TYPE_ERROR:\n\t\t\t\tdefault:\n\t\t\t\t\t$errorsEl.append('<li>' + messages[i].msg + '</li>')\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ($errorsEl.find('li').length > 0) {\n\t\t\t\t$errorsEl.removeClass('hidden')\n\t\t\t\thasMessages = true\n\t\t\t}\n\t\t\tif ($warningsEl.find('li').length > 0) {\n\t\t\t\t$warningsEl.removeClass('hidden')\n\t\t\t\thasMessages = true\n\t\t\t}\n\t\t\tif ($infoEl.find('li').length > 0) {\n\t\t\t\t$infoEl.removeClass('hidden')\n\t\t\t\thasMessages = true\n\t\t\t}\n\n\t\t\tif (hasMessages) {\n\t\t\t\t$('#postsetupchecks-hint').removeClass('hidden')\n\t\t\t\tif ($errorsEl.find('li').length > 0) {\n\t\t\t\t\t$('#security-warning-state-failure').removeClass('hidden')\n\t\t\t\t} else {\n\t\t\t\t\t$('#security-warning-state-warning').removeClass('hidden')\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst securityWarning = $('#security-warning')\n\t\t\t\tif (securityWarning.children('ul').children().length === 0) {\n\t\t\t\t\t$('#security-warning-state-ok').removeClass('hidden')\n\t\t\t\t} else {\n\t\t\t\t\t$('#security-warning-state-failure').removeClass('hidden')\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t}\n\n\tif (document.getElementById('security-warning') !== null) {\n\t\tsetupChecks()\n\t}\n})\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = {};\n__webpack_modules__[39583]();\n"],"names":["window","addEventListener","$","each","index","element","OC","Settings","setupGroupsSelect","change","ev","groups","val","JSON","stringify","OCP","AppConfig","setValue","attr","post","generateUrl","level","Log","reload","tooltip","placement","is","mode","success","deleteKey","toggleClass","checked","click","event","on","e","t","preventDefault","prop","msg","startAction","data","finishedAction","status","off","this","value","replace","savePublicShareDisclaimerText","$el","$target","target","PERMISSION_READ","_","debounce","options","finishedSuccess","error","finishedError","startSaving","isString","removeClass","addClass","changeEmailSettings","PasswordConfirmation","requiresPasswordConfirmation","requirePasswordConfirmation","ajax","url","type","serialize","xhr","responseJSON","toggleEmailCredentials","document","getElementById","when","SetupChecks","checkWebDAV","checkWellKnownUrl","theme","docPlaceholderUrl","checkProviderUrl","getRootPath","checkSetup","checkGeneric","checkWOFF2Loading","filePath","checkDataProtected","then","check1","check2","check3","check4","check5","check6","check7","check8","check9","check10","check11","messages","concat","hasMessages","$errorsEl","find","$warningsEl","$infoEl","i","length","MESSAGE_TYPE_INFO","append","MESSAGE_TYPE_WARNING","MESSAGE_TYPE_ERROR","children"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"file":"settings-legacy-admin.js?v=30352b4a27a5447a55d9","mappings":"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","sources":["webpack:///nextcloud/apps/settings/src/admin.js","webpack:///nextcloud/webpack/startup"],"sourcesContent":["window.addEventListener('DOMContentLoaded', () => {\n\t$('#excludedGroups,#linksExcludedGroups,#passwordsExcludedGroups').each(function(index, element) {\n\t\tOC.Settings.setupGroupsSelect($(element))\n\t\t$(element).change((ev) => {\n\t\t\tlet groups = ev.val || []\n\t\t\tgroups = JSON.stringify(groups)\n\t\t\tOCP.AppConfig.setValue('core', $(this).attr('name'), groups)\n\t\t})\n\t})\n\n\t$('#loglevel').change(() => {\n\t\t$.post(OC.generateUrl('/settings/admin/log/level'), { level: $(this).val() }, () => {\n\t\t\tOC.Log.reload()\n\t\t})\n\t})\n\n\t$('#backgroundjobs span.crondate').tooltip({ placement: 'top' })\n\n\t$('#backgroundjobs input').change(() => {\n\t\tif ($(this).is(':checked')) {\n\t\t\tconst mode = $(this).val()\n\t\t\tif (mode === 'ajax' || mode === 'webcron' || mode === 'cron') {\n\t\t\t\tOCP.AppConfig.setValue('core', 'backgroundjobs_mode', mode, {\n\t\t\t\t\tsuccess: () => {\n\t\t\t\t\t\t// clear cron errors on background job mode change\n\t\t\t\t\t\tOCP.AppConfig.deleteKey('core', 'cronErrors')\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t})\n\n\t$('#shareAPIEnabled').change(() => {\n\t\t$('#shareAPI p:not(#enable)').toggleClass('hidden', !this.checked)\n\t})\n\n\t$('#enableEncryption').change(() => {\n\t\t$('#encryptionAPI div#EncryptionWarning').toggleClass('hidden')\n\t})\n\n\t$('#reallyEnableEncryption').click(() => {\n\t\t$('#encryptionAPI div#EncryptionWarning').toggleClass('hidden')\n\t\t$('#encryptionAPI div#EncryptionSettingsArea').toggleClass('hidden')\n\t\tOCP.AppConfig.setValue('core', 'encryption_enabled', 'yes')\n\t\t$('#enableEncryption').attr('disabled', 'disabled')\n\t})\n\n\t$('#startmigration').click((event) => {\n\t\t$(window).on('beforeunload.encryption', (e) => {\n\t\t\treturn t('settings', 'Migration in progress. Please wait until the migration is finished')\n\t\t})\n\t\tevent.preventDefault()\n\t\t$('#startmigration').prop('disabled', true)\n\t\tOC.msg.startAction('#startmigration_msg', t('settings', 'Migration started …'))\n\t\t$.post(OC.generateUrl('/settings/admin/startmigration'), '', function(data) {\n\t\t\tOC.msg.finishedAction('#startmigration_msg', data)\n\t\t\tif (data.status === 'success') {\n\t\t\t\t$('#encryptionAPI div#selectEncryptionModules').toggleClass('hidden')\n\t\t\t\t$('#encryptionAPI div#migrationWarning').toggleClass('hidden')\n\t\t\t} else {\n\t\t\t\t$('#startmigration').prop('disabled', false)\n\t\t\t}\n\t\t\t$(window).off('beforeunload.encryption')\n\n\t\t})\n\t})\n\n\t$('#shareapiExpireAfterNDays').on('input', function() {\n\t\tthis.value = this.value.replace(/\\D/g, '')\n\t})\n\n\t$('#shareAPI input:not(.noJSAutoUpdate)').change(function() {\n\t\tlet value = $(this).val()\n\t\tif ($(this).attr('type') === 'checkbox') {\n\t\t\tif (this.checked) {\n\t\t\t\tvalue = 'yes'\n\t\t\t} else {\n\t\t\t\tvalue = 'no'\n\t\t\t}\n\t\t}\n\t\tOCP.AppConfig.setValue('core', $(this).attr('name'), value)\n\t})\n\n\t$('#shareapiDefaultExpireDate').change(function() {\n\t\t$('setDefaultExpireDate').toggleClass('hidden', !this.checked)\n\t})\n\n\t$('#shareapiDefaultInternalExpireDate').change(function() {\n\t\t$('#setDefaultInternalExpireDate').toggleClass('hidden', !this.checked)\n\t})\n\n\t$('#shareapiDefaultRemoteExpireDate').change(function() {\n\t\t$('#setDefaultRemoteExpireDate').toggleClass('hidden', !this.checked)\n\t})\n\n\t$('#enforceLinkPassword').change(function() {\n\t\t$('#selectPasswordsExcludedGroups').toggleClass('hidden', !this.checked)\n\t})\n\n\t$('#publicShareDisclaimer').change(function() {\n\t\t$('#publicShareDisclaimerText').toggleClass('hidden', !this.checked)\n\t\tif (!this.checked) {\n\t\t\tsavePublicShareDisclaimerText('')\n\t\t}\n\t})\n\n\t$('#shareApiDefaultPermissionsSection input').change(function(ev) {\n\t\tconst $el = $('#shareApiDefaultPermissions')\n\t\tconst $target = $(ev.target)\n\n\t\tlet value = $el.val()\n\t\tif ($target.is(':checked')) {\n\t\t\tvalue = value | $target.val()\n\t\t} else {\n\t\t\tvalue = value & ~$target.val()\n\t\t}\n\n\t\t// always set read permission\n\t\tvalue |= OC.PERMISSION_READ\n\n\t\t// this will trigger the field's change event and will save it\n\t\t$el.val(value).change()\n\n\t\tev.preventDefault()\n\n\t\treturn false\n\t})\n\n\tconst savePublicShareDisclaimerText = _.debounce(function(value) {\n\t\tconst options = {\n\t\t\tsuccess: () => {\n\t\t\t\tOC.msg.finishedSuccess('#publicShareDisclaimerStatus', t('settings', 'Saved'))\n\t\t\t},\n\t\t\terror: () => {\n\t\t\t\tOC.msg.finishedError('#publicShareDisclaimerStatus', t('settings', 'Not saved'))\n\t\t\t}\n\t\t}\n\n\t\tOC.msg.startSaving('#publicShareDisclaimerStatus')\n\t\tif (_.isString(value) && value !== '') {\n\t\t\tOCP.AppConfig.setValue('core', 'shareapi_public_link_disclaimertext', value, options)\n\t\t} else {\n\t\t\t$('#publicShareDisclaimerText').val('')\n\t\t\tOCP.AppConfig.deleteKey('core', 'shareapi_public_link_disclaimertext', options)\n\t\t}\n\t}, 500)\n\n\t$('#publicShareDisclaimerText').on('change, keyup', function() {\n\t\tsavePublicShareDisclaimerText(this.value)\n\t})\n\n\t$('#shareapi_allow_share_dialog_user_enumeration').on('change', function() {\n\t\t$('#shareapi_restrict_user_enumeration_to_group_setting').toggleClass('hidden', !this.checked)\n\t\t$('#shareapi_restrict_user_enumeration_to_phone_setting').toggleClass('hidden', !this.checked)\n\t\t$('#shareapi_restrict_user_enumeration_combinewarning_setting').toggleClass('hidden', !this.checked)\n\t})\n\n\t$('#shareapi_restrict_user_enumeration_full_match').on('change', function() {\n\t\t$('#shareapi_restrict_user_enumeration_full_match_userid_setting').toggleClass('hidden', !this.checked)\n\t\t$('#shareapi_restrict_user_enumeration_full_match_ignore_second_display_name_setting').toggleClass('hidden', !this.checked)\n\t})\n\n\t$('#allowLinks').change(function() {\n\t\t$('#publicLinkSettings').toggleClass('hidden', !this.checked)\n\t\t$('#setDefaultExpireDate').toggleClass('hidden', !(this.checked && $('#shareapiDefaultExpireDate')[0].checked))\n\t})\n\n\t$('#mail_smtpauth').change(function() {\n\t\tif (!this.checked) {\n\t\t\t$('#mail_credentials').addClass('hidden')\n\t\t} else {\n\t\t\t$('#mail_credentials').removeClass('hidden')\n\t\t}\n\t})\n\n\t$('#mail_smtpmode').change(function() {\n\t\tif ($(this).val() !== 'smtp') {\n\t\t\t$('#setting_smtpauth').addClass('hidden')\n\t\t\t$('#setting_smtphost').addClass('hidden')\n\t\t\t$('#mail_smtpsecure_label').addClass('hidden')\n\t\t\t$('#mail_smtpsecure').addClass('hidden')\n\t\t\t$('#mail_credentials').addClass('hidden')\n\t\t\t$('#mail_sendmailmode_label, #mail_sendmailmode').removeClass('hidden')\n\t\t} else {\n\t\t\t$('#setting_smtpauth').removeClass('hidden')\n\t\t\t$('#setting_smtphost').removeClass('hidden')\n\t\t\t$('#mail_smtpsecure_label').removeClass('hidden')\n\t\t\t$('#mail_smtpsecure').removeClass('hidden')\n\t\t\tif ($('#mail_smtpauth').is(':checked')) {\n\t\t\t\t$('#mail_credentials').removeClass('hidden')\n\t\t\t}\n\t\t\t$('#mail_sendmailmode_label, #mail_sendmailmode').addClass('hidden')\n\t\t}\n\t})\n\n\tconst changeEmailSettings = function() {\n\t\tif (OC.PasswordConfirmation.requiresPasswordConfirmation()) {\n\t\t\tOC.PasswordConfirmation.requirePasswordConfirmation(changeEmailSettings)\n\t\t\treturn\n\t\t}\n\n\t\tOC.msg.startSaving('#mail_settings_msg')\n\t\t$.ajax({\n\t\t\turl: OC.generateUrl('/settings/admin/mailsettings'),\n\t\t\ttype: 'POST',\n\t\t\tdata: $('#mail_general_settings_form').serialize(),\n\t\t\tsuccess: () => {\n\t\t\t\tOC.msg.finishedSuccess('#mail_settings_msg', t('settings', 'Saved'))\n\t\t\t},\n\t\t\terror: (xhr) => {\n\t\t\t\tOC.msg.finishedError('#mail_settings_msg', xhr.responseJSON)\n\t\t\t}\n\t\t})\n\t}\n\n\tconst toggleEmailCredentials = function() {\n\t\tif (OC.PasswordConfirmation.requiresPasswordConfirmation()) {\n\t\t\tOC.PasswordConfirmation.requirePasswordConfirmation(toggleEmailCredentials)\n\t\t\treturn\n\t\t}\n\n\t\tOC.msg.startSaving('#mail_settings_msg')\n\t\t$.ajax({\n\t\t\turl: OC.generateUrl('/settings/admin/mailsettings/credentials'),\n\t\t\ttype: 'POST',\n\t\t\tdata: $('#mail_credentials_settings').serialize(),\n\t\t\tsuccess: () => {\n\t\t\t\tOC.msg.finishedSuccess('#mail_settings_msg', t('settings', 'Saved'))\n\t\t\t},\n\t\t\terror: (xhr) => {\n\t\t\t\tOC.msg.finishedError('#mail_settings_msg', xhr.responseJSON)\n\t\t\t}\n\t\t})\n\t}\n\n\t$('#mail_general_settings_form').change(changeEmailSettings)\n\t$('#mail_credentials_settings_submit').click(toggleEmailCredentials)\n\t$('#mail_smtppassword').click(() => {\n\t\tif (this.type === 'text' && this.value === '********') {\n\t\t\tthis.type = 'password'\n\t\t\tthis.value = ''\n\t\t}\n\t})\n\n\t$('#sendtestemail').click((event) => {\n\t\tevent.preventDefault()\n\t\tOC.msg.startAction('#sendtestmail_msg', t('settings', 'Sending…'))\n\n\t\t$.ajax({\n\t\t\turl: OC.generateUrl('/settings/admin/mailtest'),\n\t\t\ttype: 'POST',\n\t\t\tsuccess: () => {\n\t\t\t\tOC.msg.finishedSuccess('#sendtestmail_msg', t('settings', 'Email sent'))\n\t\t\t},\n\t\t\terror: (xhr) => {\n\t\t\t\tOC.msg.finishedError('#sendtestmail_msg', xhr.responseJSON)\n\t\t\t}\n\t\t})\n\t})\n\n\t$('#allowGroupSharing').change(() => {\n\t\t$('#allowGroupSharing').toggleClass('hidden', !this.checked)\n\t})\n\n\t$('#shareapiExcludeGroups').change(() => {\n\t\t$('#selectExcludedGroups').toggleClass('hidden', !this.checked)\n\t})\n\n\tconst setupChecks = () => {\n\t\t// run setup checks then gather error messages\n\t\t$.when(\n\t\t\tOC.SetupChecks.checkWebDAV(),\n\t\t\tOC.SetupChecks.checkWellKnownUrl('GET', '/.well-known/webfinger', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true, [200, 404], true),\n\t\t\tOC.SetupChecks.checkWellKnownUrl('GET', '/.well-known/nodeinfo', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true, [200, 404], true),\n\t\t\tOC.SetupChecks.checkWellKnownUrl('PROPFIND', '/.well-known/caldav', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true),\n\t\t\tOC.SetupChecks.checkWellKnownUrl('PROPFIND', '/.well-known/carddav', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true),\n\t\t\tOC.SetupChecks.checkProviderUrl(OC.getRootPath() + '/ocm-provider/', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true),\n\t\t\tOC.SetupChecks.checkProviderUrl(OC.getRootPath() + '/ocs-provider/', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true),\n\t\t\tOC.SetupChecks.checkSetup(),\n\t\t\tOC.SetupChecks.checkGeneric(),\n\t\t\tOC.SetupChecks.checkWOFF2Loading(OC.filePath('core', '', 'fonts/NotoSans-Regular-latin.woff2'), OC.theme.docPlaceholderUrl),\n\t\t\tOC.SetupChecks.checkDataProtected()\n\t\t).then((check1, check2, check3, check4, check5, check6, check7, check8, check9, check10, check11) => {\n\t\t\tconst messages = [].concat(check1, check2, check3, check4, check5, check6, check7, check8, check9, check10, check11)\n\t\t\tconst $el = $('#postsetupchecks')\n\t\t\t$('#security-warning-state-loading').addClass('hidden')\n\n\t\t\tlet hasMessages = false\n\t\t\tconst $errorsEl = $el.find('.errors')\n\t\t\tconst $warningsEl = $el.find('.warnings')\n\t\t\tconst $infoEl = $el.find('.info')\n\n\t\t\tfor (let i = 0; i < messages.length; i++) {\n\t\t\t\tswitch (messages[i].type) {\n\t\t\t\tcase OC.SetupChecks.MESSAGE_TYPE_INFO:\n\t\t\t\t\t$infoEl.append('<li>' + messages[i].msg + '</li>')\n\t\t\t\t\tbreak\n\t\t\t\tcase OC.SetupChecks.MESSAGE_TYPE_WARNING:\n\t\t\t\t\t$warningsEl.append('<li>' + messages[i].msg + '</li>')\n\t\t\t\t\tbreak\n\t\t\t\tcase OC.SetupChecks.MESSAGE_TYPE_ERROR:\n\t\t\t\tdefault:\n\t\t\t\t\t$errorsEl.append('<li>' + messages[i].msg + '</li>')\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ($errorsEl.find('li').length > 0) {\n\t\t\t\t$errorsEl.removeClass('hidden')\n\t\t\t\thasMessages = true\n\t\t\t}\n\t\t\tif ($warningsEl.find('li').length > 0) {\n\t\t\t\t$warningsEl.removeClass('hidden')\n\t\t\t\thasMessages = true\n\t\t\t}\n\t\t\tif ($infoEl.find('li').length > 0) {\n\t\t\t\t$infoEl.removeClass('hidden')\n\t\t\t\thasMessages = true\n\t\t\t}\n\n\t\t\tif (hasMessages) {\n\t\t\t\t$('#postsetupchecks-hint').removeClass('hidden')\n\t\t\t\tif ($errorsEl.find('li').length > 0) {\n\t\t\t\t\t$('#security-warning-state-failure').removeClass('hidden')\n\t\t\t\t} else {\n\t\t\t\t\t$('#security-warning-state-warning').removeClass('hidden')\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst securityWarning = $('#security-warning')\n\t\t\t\tif (securityWarning.children('ul').children().length === 0) {\n\t\t\t\t\t$('#security-warning-state-ok').removeClass('hidden')\n\t\t\t\t} else {\n\t\t\t\t\t$('#security-warning-state-failure').removeClass('hidden')\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t}\n\n\tif (document.getElementById('security-warning') !== null) {\n\t\tsetupChecks()\n\t}\n})\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = {};\n__webpack_modules__[39583]();\n"],"names":["window","addEventListener","$","each","index","element","OC","Settings","setupGroupsSelect","change","ev","groups","val","JSON","stringify","OCP","AppConfig","setValue","attr","post","generateUrl","level","Log","reload","tooltip","placement","is","mode","success","deleteKey","toggleClass","checked","click","event","on","e","t","preventDefault","prop","msg","startAction","data","finishedAction","status","off","this","value","replace","savePublicShareDisclaimerText","$el","$target","target","PERMISSION_READ","_","debounce","options","finishedSuccess","error","finishedError","startSaving","isString","removeClass","addClass","changeEmailSettings","PasswordConfirmation","requiresPasswordConfirmation","requirePasswordConfirmation","ajax","url","type","serialize","xhr","responseJSON","toggleEmailCredentials","document","getElementById","when","SetupChecks","checkWebDAV","checkWellKnownUrl","theme","docPlaceholderUrl","checkProviderUrl","getRootPath","checkSetup","checkGeneric","checkWOFF2Loading","filePath","checkDataProtected","then","check1","check2","check3","check4","check5","check6","check7","check8","check9","check10","check11","messages","concat","hasMessages","$errorsEl","find","$warningsEl","$infoEl","i","length","MESSAGE_TYPE_INFO","append","MESSAGE_TYPE_WARNING","MESSAGE_TYPE_ERROR","children"],"sourceRoot":""} \ No newline at end of file
diff --git a/lib/private/Collaboration/Collaborators/UserPlugin.php b/lib/private/Collaboration/Collaborators/UserPlugin.php
index 4d8bc4cbf3a..af4d8b2ccca 100644
--- a/lib/private/Collaboration/Collaborators/UserPlugin.php
+++ b/lib/private/Collaboration/Collaborators/UserPlugin.php
@@ -56,6 +56,8 @@ class UserPlugin implements ISearchPlugin {
protected $shareeEnumerationFullMatch;
/* @var bool */
protected $shareeEnumerationFullMatchUserId;
+ /* @var bool */
+ protected $shareeEnumerationFullMatchIgnoreSecondDisplayName;
/** @var IConfig */
private $config;
@@ -90,6 +92,7 @@ class UserPlugin implements ISearchPlugin {
$this->shareeEnumerationPhone = $this->shareeEnumeration && $this->config->getAppValue('core', 'shareapi_restrict_user_enumeration_to_phone', 'no') === 'yes';
$this->shareeEnumerationFullMatch = $this->config->getAppValue('core', 'shareapi_restrict_user_enumeration_full_match', 'yes') === 'yes';
$this->shareeEnumerationFullMatchUserId = $this->config->getAppValue('core', 'shareapi_restrict_user_enumeration_full_match_userid', 'yes') === 'yes';
+ $this->shareeEnumerationFullMatchIgnoreSecondDisplayName = $this->config->getAppValue('core', 'shareapi_restrict_user_enumeration_full_match_ignore_second_display_name', 'no') === 'yes';
}
public function search($search, $limit, $offset, ISearchResult $searchResult) {
@@ -181,6 +184,7 @@ class UserPlugin implements ISearchPlugin {
$this->shareeEnumerationFullMatch &&
$lowerSearch !== '' && (strtolower($uid) === $lowerSearch ||
strtolower($userDisplayName) === $lowerSearch ||
+ ($this->shareeEnumerationFullMatchIgnoreSecondDisplayName && trim(strtolower(preg_replace('/ \(.*\)$/', '', $userDisplayName))) === $lowerSearch) ||
strtolower($userEmail ?? '') === $lowerSearch)
) {
if (strtolower($uid) === $lowerSearch) {
diff --git a/tests/lib/Collaboration/Collaborators/UserPluginTest.php b/tests/lib/Collaboration/Collaborators/UserPluginTest.php
index acbcd42f04f..20e1ed898ad 100644
--- a/tests/lib/Collaboration/Collaborators/UserPluginTest.php
+++ b/tests/lib/Collaboration/Collaborators/UserPluginTest.php
@@ -104,21 +104,12 @@ class UserPluginTest extends TestCase {
);
}
- public function mockConfig($shareWithGroupOnly, $shareeEnumeration, $shareeEnumerationLimitToGroup, $shareeEnumerationPhone = false) {
+ public function mockConfig($mockedSettings) {
$this->config->expects($this->any())
->method('getAppValue')
->willReturnCallback(
- function ($appName, $key, $default) use ($shareWithGroupOnly, $shareeEnumeration, $shareeEnumerationLimitToGroup, $shareeEnumerationPhone) {
- if ($appName === 'core' && $key === 'shareapi_only_share_with_group_members') {
- return $shareWithGroupOnly ? 'yes' : 'no';
- } elseif ($appName === 'core' && $key === 'shareapi_allow_share_dialog_user_enumeration') {
- return $shareeEnumeration ? 'yes' : 'no';
- } elseif ($appName === 'core' && $key === 'shareapi_restrict_user_enumeration_to_group') {
- return $shareeEnumerationLimitToGroup ? 'yes' : 'no';
- } elseif ($appName === 'core' && $key === 'shareapi_restrict_user_enumeration_to_phone') {
- return $shareeEnumerationPhone ? 'yes' : 'no';
- }
- return $default;
+ function ($appName, $key, $default) use ($mockedSettings) {
+ return $mockedSettings[$appName][$key] ?? $default;
}
);
}
@@ -470,7 +461,13 @@ class UserPluginTest extends TestCase {
array $users = [],
$shareeEnumerationPhone = false
) {
- $this->mockConfig($shareWithGroupOnly, $shareeEnumeration, false, $shareeEnumerationPhone);
+ $this->mockConfig(["core" => [
+ 'shareapi_only_share_with_group_members' => $shareWithGroupOnly ? 'yes' : 'no',
+ 'shareapi_allow_share_dialog_user_enumeration' => $shareeEnumeration? 'yes' : 'no',
+ 'shareapi_restrict_user_enumeration_to_group' => false ? 'yes' : 'no',
+ 'shareapi_restrict_user_enumeration_to_phone' => $shareeEnumerationPhone ? 'yes' : 'no',
+ ]]);
+
$this->instantiatePlugin();
$this->session->expects($this->any())
@@ -586,6 +583,83 @@ class UserPluginTest extends TestCase {
['uid' => 'test2', 'groups' => ['groupB']],
],
['exact' => [], 'wide' => ['test1']],
+ ['core' => ['shareapi_restrict_user_enumeration_to_group' => 'yes']],
+ ],
+ [
+ 'test',
+ ['groupA'],
+ [
+ ['uid' => 'test1', 'displayName' => 'Test user 1', 'groups' => ['groupA']],
+ ['uid' => 'test2', 'displayName' => 'Test user 2', 'groups' => ['groupA']],
+ ],
+ ['exact' => [], 'wide' => []],
+ ['core' => ['shareapi_allow_share_dialog_user_enumeration' => 'no']],
+ ],
+ [
+ 'test1',
+ ['groupA'],
+ [
+ ['uid' => 'test1', 'displayName' => 'Test user 1', 'groups' => ['groupA']],
+ ['uid' => 'test2', 'displayName' => 'Test user 2', 'groups' => ['groupA']],
+ ],
+ ['exact' => ['test1'], 'wide' => []],
+ ['core' => ['shareapi_allow_share_dialog_user_enumeration' => 'no']],
+ ],
+ [
+ 'test1',
+ ['groupA'],
+ [
+ ['uid' => 'test1', 'displayName' => 'Test user 1', 'groups' => ['groupA']],
+ ['uid' => 'test2', 'displayName' => 'Test user 2', 'groups' => ['groupA']],
+ ],
+ ['exact' => [], 'wide' => []],
+ [
+ 'core' => [
+ 'shareapi_allow_share_dialog_user_enumeration' => 'no',
+ 'shareapi_restrict_user_enumeration_full_match_userid' => 'no',
+ ],
+ ]
+ ],
+ [
+ 'Test user 1',
+ ['groupA'],
+ [
+ ['uid' => 'test1', 'displayName' => 'Test user 1', 'groups' => ['groupA']],
+ ['uid' => 'test2', 'displayName' => 'Test user 2', 'groups' => ['groupA']],
+ ],
+ ['exact' => ['test1'], 'wide' => []],
+ [
+ 'core' => [
+ 'shareapi_allow_share_dialog_user_enumeration' => 'no',
+ 'shareapi_restrict_user_enumeration_full_match_userid' => 'no',
+ ],
+ ]
+ ],
+ [
+ 'Test user 1',
+ ['groupA'],
+ [
+ ['uid' => 'test1', 'displayName' => 'Test user 1 (Second displayName for user 1)', 'groups' => ['groupA']],
+ ['uid' => 'test2', 'displayName' => 'Test user 2 (Second displayName for user 2)', 'groups' => ['groupA']],
+ ],
+ ['exact' => [], 'wide' => []],
+ ['core' => ['shareapi_allow_share_dialog_user_enumeration' => 'no'],
+ ]
+ ],
+ [
+ 'Test user 1',
+ ['groupA'],
+ [
+ ['uid' => 'test1', 'displayName' => 'Test user 1 (Second displayName for user 1)', 'groups' => ['groupA']],
+ ['uid' => 'test2', 'displayName' => 'Test user 2 (Second displayName for user 2)', 'groups' => ['groupA']],
+ ],
+ ['exact' => ['test1'], 'wide' => []],
+ [
+ 'core' => [
+ 'shareapi_allow_share_dialog_user_enumeration' => 'no',
+ 'shareapi_restrict_user_enumeration_full_match_ignore_second_display_name' => 'yes',
+ ],
+ ]
],
[
'test1',
@@ -595,6 +669,7 @@ class UserPluginTest extends TestCase {
['uid' => 'test2', 'groups' => ['groupB']],
],
['exact' => ['test1'], 'wide' => []],
+ ['core' => ['shareapi_restrict_user_enumeration_to_group' => 'yes']],
],
[
'test',
@@ -604,6 +679,7 @@ class UserPluginTest extends TestCase {
['uid' => 'test2', 'groups' => ['groupB', 'groupA']],
],
['exact' => [], 'wide' => ['test1', 'test2']],
+ ['core' => ['shareapi_restrict_user_enumeration_to_group' => 'yes']],
],
[
'test',
@@ -613,6 +689,7 @@ class UserPluginTest extends TestCase {
['uid' => 'test2', 'groups' => ['groupB', 'groupA']],
],
['exact' => [], 'wide' => ['test1', 'test2']],
+ ['core' => ['shareapi_restrict_user_enumeration_to_group' => 'yes']],
],
[
'test',
@@ -622,6 +699,7 @@ class UserPluginTest extends TestCase {
['uid' => 'test2', 'groups' => ['groupB', 'groupA']],
],
['exact' => [], 'wide' => ['test1', 'test2']],
+ ['core' => ['shareapi_restrict_user_enumeration_to_group' => 'yes']],
],
[
'test',
@@ -631,6 +709,7 @@ class UserPluginTest extends TestCase {
['uid' => 'test2', 'groups' => ['groupB', 'groupA']],
],
['exact' => [], 'wide' => []],
+ ['core' => ['shareapi_restrict_user_enumeration_to_group' => 'yes']],
],
[
'test',
@@ -640,6 +719,7 @@ class UserPluginTest extends TestCase {
['uid' => 'test2', 'groups' => []],
],
['exact' => [], 'wide' => []],
+ ['core' => ['shareapi_restrict_user_enumeration_to_group' => 'yes']],
],
[
'test',
@@ -649,6 +729,7 @@ class UserPluginTest extends TestCase {
['uid' => 'test2', 'groups' => []],
],
['exact' => [], 'wide' => []],
+ ['core' => ['shareapi_restrict_user_enumeration_to_group' => 'yes']],
],
];
}
@@ -656,19 +737,38 @@ class UserPluginTest extends TestCase {
/**
* @dataProvider dataSearchEnumeration
*/
- public function testSearchEnumerationLimit($search, $userGroups, $matchingUsers, $result) {
- $this->mockConfig(false, true, true);
+ public function testSearchEnumerationLimit($search, $userGroups, $matchingUsers, $result, $mockedSettings) {
+ $this->mockConfig($mockedSettings);
$userResults = [];
foreach ($matchingUsers as $user) {
$userResults[$user['uid']] = $user['uid'];
}
- $mappedResultExact = array_map(function ($user) {
- return ['label' => $user, 'value' => ['shareType' => 0, 'shareWith' => $user], 'icon' => 'icon-user', 'subline' => null, 'status' => [], 'shareWithDisplayNameUnique' => $user];
+ $usersById = [];
+ foreach ($matchingUsers as $user) {
+ $usersById[$user['uid']] = $user;
+ }
+
+ $mappedResultExact = array_map(function ($user) use ($usersById, $search) {
+ return [
+ 'label' => $search === $user ? $user : $usersById[$user]['displayName'],
+ 'value' => ['shareType' => 0, 'shareWith' => $user],
+ 'icon' => 'icon-user',
+ 'subline' => null,
+ 'status' => [],
+ 'shareWithDisplayNameUnique' => $user,
+ ];
}, $result['exact']);
$mappedResultWide = array_map(function ($user) {
- return ['label' => $user, 'value' => ['shareType' => 0, 'shareWith' => $user], 'icon' => 'icon-user', 'subline' => null, 'status' => [], 'shareWithDisplayNameUnique' => $user];
+ return [
+ 'label' => $user,
+ 'value' => ['shareType' => 0, 'shareWith' => $user],
+ 'icon' => 'icon-user',
+ 'subline' => null,
+ 'status' => [],
+ 'shareWithDisplayNameUnique' => $user,
+ ];
}, $result['wide']);
$this->userManager
@@ -679,6 +779,17 @@ class UserPluginTest extends TestCase {
}
return null;
});
+ $this->userManager
+ ->method('searchDisplayName')
+ ->willReturnCallback(function ($search) use ($matchingUsers) {
+ $users = array_filter(
+ $matchingUsers,
+ fn ($user) => str_contains(strtolower($user['displayName']), strtolower($search))
+ );
+ return array_map(
+ fn ($user) => $this->getUserMock($user['uid'], $user['displayName']),
+ $users);
+ });
$this->groupManager->method('displayNamesInGroup')
->willReturn($userResults);