Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/files_sharing/tests/CapabilitiesTest.php12
-rw-r--r--apps/settings/lib/Settings/Admin/Sharing.php9
-rw-r--r--apps/settings/src/admin.js6
-rw-r--r--apps/settings/templates/settings/admin/sharing.php12
-rw-r--r--apps/settings/tests/Settings/Admin/SharingTest.php4
-rw-r--r--config/config.sample.php5
-rw-r--r--dist/settings-legacy-admin.js4
-rw-r--r--dist/settings-legacy-admin.js.map2
-rw-r--r--lib/private/Share20/Manager.php14
-rw-r--r--lib/private/legacy/OC_Util.php7
-rw-r--r--lib/public/Share/IManager.php4
-rw-r--r--lib/public/Util.php8
-rw-r--r--tests/lib/Share20/ManagerTest.php34
13 files changed, 108 insertions, 13 deletions
diff --git a/apps/files_sharing/tests/CapabilitiesTest.php b/apps/files_sharing/tests/CapabilitiesTest.php
index 093a04052b1..fcefc556203 100644
--- a/apps/files_sharing/tests/CapabilitiesTest.php
+++ b/apps/files_sharing/tests/CapabilitiesTest.php
@@ -139,6 +139,7 @@ class CapabilitiesTest extends \Test\TestCase {
$map = [
['core', 'shareapi_enabled', 'yes', 'yes'],
['core', 'shareapi_allow_links', 'yes', 'yes'],
+ ['core', 'shareapi_enforce_links_password_excluded_groups', '', ''],
];
$result = $this->getResults($map);
$this->assertIsArray($result['public']);
@@ -149,6 +150,7 @@ class CapabilitiesTest extends \Test\TestCase {
$map = [
['core', 'shareapi_enabled', 'yes', 'yes'],
['core', 'shareapi_allow_links', 'yes', 'yes'],
+ ['core', 'shareapi_enforce_links_password_excluded_groups', '', ''],
['core', 'shareapi_enforce_links_password', 'no', 'yes'],
];
$result = $this->getResults($map);
@@ -161,6 +163,7 @@ class CapabilitiesTest extends \Test\TestCase {
$map = [
['core', 'shareapi_enabled', 'yes', 'yes'],
['core', 'shareapi_allow_links', 'yes', 'yes'],
+ ['core', 'shareapi_enforce_links_password_excluded_groups', '', ''],
['core', 'shareapi_enforce_links_password', 'no', 'no'],
];
$result = $this->getResults($map);
@@ -174,6 +177,7 @@ class CapabilitiesTest extends \Test\TestCase {
['core', 'shareapi_enabled', 'yes', 'yes'],
['core', 'shareapi_allow_links', 'yes', 'yes'],
['core', 'shareapi_default_expire_date', 'no', 'no'],
+ ['core', 'shareapi_enforce_links_password_excluded_groups', '', ''],
];
$result = $this->getResults($map);
$this->assertArrayHasKey('expire_date', $result['public']);
@@ -188,6 +192,7 @@ class CapabilitiesTest extends \Test\TestCase {
['core', 'shareapi_default_expire_date', 'no', 'yes'],
['core', 'shareapi_expire_after_n_days', '7', '7'],
['core', 'shareapi_enforce_expire_date', 'no', 'no'],
+ ['core', 'shareapi_enforce_links_password_excluded_groups', '', ''],
];
$result = $this->getResults($map);
$this->assertArrayHasKey('expire_date', $result['public']);
@@ -203,6 +208,7 @@ class CapabilitiesTest extends \Test\TestCase {
['core', 'shareapi_allow_links', 'yes', 'yes'],
['core', 'shareapi_default_expire_date', 'no', 'yes'],
['core', 'shareapi_enforce_expire_date', 'no', 'yes'],
+ ['core', 'shareapi_enforce_links_password_excluded_groups', '', ''],
];
$result = $this->getResults($map);
$this->assertArrayHasKey('expire_date', $result['public']);
@@ -215,6 +221,7 @@ class CapabilitiesTest extends \Test\TestCase {
['core', 'shareapi_enabled', 'yes', 'yes'],
['core', 'shareapi_allow_links', 'yes', 'yes'],
['core', 'shareapi_allow_public_notification', 'no', 'yes'],
+ ['core', 'shareapi_enforce_links_password_excluded_groups', '', ''],
];
$result = $this->getResults($map);
$this->assertTrue($result['public']['send_mail']);
@@ -225,6 +232,7 @@ class CapabilitiesTest extends \Test\TestCase {
['core', 'shareapi_enabled', 'yes', 'yes'],
['core', 'shareapi_allow_links', 'yes', 'yes'],
['core', 'shareapi_allow_public_notification', 'no', 'no'],
+ ['core', 'shareapi_enforce_links_password_excluded_groups', '', ''],
];
$result = $this->getResults($map);
$this->assertFalse($result['public']['send_mail']);
@@ -234,6 +242,7 @@ class CapabilitiesTest extends \Test\TestCase {
$map = [
['core', 'shareapi_enabled', 'yes', 'yes'],
['core', 'shareapi_allow_resharing', 'yes', 'yes'],
+ ['core', 'shareapi_enforce_links_password_excluded_groups', '', ''],
];
$result = $this->getResults($map);
$this->assertTrue($result['resharing']);
@@ -243,6 +252,7 @@ class CapabilitiesTest extends \Test\TestCase {
$map = [
['core', 'shareapi_enabled', 'yes', 'yes'],
['core', 'shareapi_allow_resharing', 'yes', 'no'],
+ ['core', 'shareapi_enforce_links_password_excluded_groups', '', ''],
];
$result = $this->getResults($map);
$this->assertFalse($result['resharing']);
@@ -253,6 +263,7 @@ class CapabilitiesTest extends \Test\TestCase {
['core', 'shareapi_enabled', 'yes', 'yes'],
['core', 'shareapi_allow_links', 'yes', 'yes'],
['core', 'shareapi_allow_public_upload', 'yes', 'yes'],
+ ['core', 'shareapi_enforce_links_password_excluded_groups', '', ''],
];
$result = $this->getResults($map);
$this->assertTrue($result['public']['upload']);
@@ -264,6 +275,7 @@ class CapabilitiesTest extends \Test\TestCase {
['core', 'shareapi_enabled', 'yes', 'yes'],
['core', 'shareapi_allow_links', 'yes', 'yes'],
['core', 'shareapi_allow_public_upload', 'yes', 'no'],
+ ['core', 'shareapi_enforce_links_password_excluded_groups', '', ''],
];
$result = $this->getResults($map);
$this->assertFalse($result['public']['upload']);
diff --git a/apps/settings/lib/Settings/Admin/Sharing.php b/apps/settings/lib/Settings/Admin/Sharing.php
index 15f74c40e1e..a5f85003fa4 100644
--- a/apps/settings/lib/Settings/Admin/Sharing.php
+++ b/apps/settings/lib/Settings/Admin/Sharing.php
@@ -72,6 +72,11 @@ class Sharing implements IDelegatedSettings {
$linksExcludeGroupsList = !is_null(json_decode($linksExcludedGroups))
? implode('|', json_decode($linksExcludedGroups, true)) : '';
+ $excludedPasswordGroups = $this->config->getAppValue('core', 'shareapi_enforce_links_password_excluded_groups', '');
+ $excludedPasswordGroupsList = !is_null(json_decode($excludedPasswordGroups))
+ ? implode('|', json_decode($excludedPasswordGroups, true)) : '';
+
+
$parameters = [
// Built-In Sharing
'sharingAppEnabled' => $this->appManager->isEnabledForUser('files_sharing'),
@@ -84,7 +89,9 @@ class Sharing implements IDelegatedSettings {
'restrictUserEnumerationToGroup' => $this->config->getAppValue('core', 'shareapi_restrict_user_enumeration_to_group', 'no'),
'restrictUserEnumerationToPhone' => $this->config->getAppValue('core', 'shareapi_restrict_user_enumeration_to_phone', 'no'),
'restrictUserEnumerationFullMatch' => $this->config->getAppValue('core', 'shareapi_restrict_user_enumeration_full_match', 'yes'),
- 'enforceLinkPassword' => Util::isPublicLinkPasswordRequired(),
+ 'enforceLinkPassword' => Util::isPublicLinkPasswordRequired(false),
+ 'passwordExcludedGroups' => $excludedPasswordGroupsList,
+ 'passwordExcludedGroupsFeatureEnabled' => $this->config->getSystemValueBool('sharing.allow_disabled_password_enforcement_groups', false),
'onlyShareWithGroupMembers' => $this->shareManager->shareWithGroupMembersOnly(),
'shareAPIEnabled' => $this->config->getAppValue('core', 'shareapi_enabled', 'yes'),
'shareDefaultExpireDateSet' => $this->config->getAppValue('core', 'shareapi_default_expire_date', 'no'),
diff --git a/apps/settings/src/admin.js b/apps/settings/src/admin.js
index 2a8c6bb1d0c..c3704eed42c 100644
--- a/apps/settings/src/admin.js
+++ b/apps/settings/src/admin.js
@@ -1,5 +1,5 @@
window.addEventListener('DOMContentLoaded', () => {
- $('#excludedGroups,#linksExcludedGroups').each((index, element) => {
+ $('#excludedGroups,#linksExcludedGroups,#passwordsExcludedGroups').each(function(index, element) {
OC.Settings.setupGroupsSelect($(element))
$(element).change((ev) => {
let groups = ev.val || []
@@ -93,6 +93,10 @@ window.addEventListener('DOMContentLoaded', () => {
$('#setDefaultRemoteExpireDate').toggleClass('hidden', !this.checked)
})
+ $('#enforceLinkPassword').change(function() {
+ $('#selectPasswordsExcludedGroups').toggleClass('hidden', !this.checked)
+ })
+
$('#publicShareDisclaimer').change(function() {
$('#publicShareDisclaimerText').toggleClass('hidden', !this.checked)
if (!this.checked) {
diff --git a/apps/settings/templates/settings/admin/sharing.php b/apps/settings/templates/settings/admin/sharing.php
index b699e152198..b51f9339166 100644
--- a/apps/settings/templates/settings/admin/sharing.php
+++ b/apps/settings/templates/settings/admin/sharing.php
@@ -120,6 +120,18 @@
} ?> />
<label for="enforceLinkPassword"><?php p($l->t('Enforce password protection'));?></label><br/>
+<?php if ($_['passwordExcludedGroupsFeatureEnabled']) { ?>
+ <div id="selectPasswordsExcludedGroups" class="indent <?php if (!$_['enforceLinkPassword']) { p('hidden'); } ?>">
+ <div class="indent">
+ <label for="shareapi_enforce_links_password_excluded_groups"><?php p($l->t('Exclude groups from password requirements:'));?>
+ <br />
+ <input name="shareapi_enforce_links_password_excluded_groups" id="passwordsExcludedGroups" value="<?php p($_['passwordExcludedGroups']) ?>" style="width: 400px" class="noJSAutoUpdate"/>
+ </div>
+ </div>
+<?php } ?>
+
+ <input type="checkbox" name="shareapi_default_expire_date" id="shareapiDefaultExpireDate" class="checkbox" value="1" <?php if ($_['shareDefaultExpireDateSet'] === 'yes') { print_unescaped('checked="checked"'); } ?> />
+
<input type="checkbox" name="shareapi_default_expire_date" id="shareapiDefaultExpireDate" class="checkbox"
value="1" <?php if ($_['shareDefaultExpireDateSet'] === 'yes') {
print_unescaped('checked="checked"');
diff --git a/apps/settings/tests/Settings/Admin/SharingTest.php b/apps/settings/tests/Settings/Admin/SharingTest.php
index 222be5fd9dc..3ac2e878434 100644
--- a/apps/settings/tests/Settings/Admin/SharingTest.php
+++ b/apps/settings/tests/Settings/Admin/SharingTest.php
@@ -135,6 +135,8 @@ class SharingTest extends TestCase {
'shareRemoteExpireAfterNDays' => '7',
'shareRemoteEnforceExpireDate' => 'no',
'allowLinksExcludeGroups' => '',
+ 'passwordExcludedGroups' => '',
+ 'passwordExcludedGroupsFeatureEnabled' => false,
],
''
);
@@ -208,6 +210,8 @@ class SharingTest extends TestCase {
'shareRemoteExpireAfterNDays' => '7',
'shareRemoteEnforceExpireDate' => 'no',
'allowLinksExcludeGroups' => '',
+ 'passwordExcludedGroups' => '',
+ 'passwordExcludedGroupsFeatureEnabled' => false,
],
''
);
diff --git a/config/config.sample.php b/config/config.sample.php
index 7a7dfa356b8..4d8dcfa5660 100644
--- a/config/config.sample.php
+++ b/config/config.sample.php
@@ -1581,6 +1581,11 @@ $CONFIG = [
'sharing.enable_share_mail' => true,
/**
+ * Set to true to enable the feature to add exceptions for share password enforcement
+ */
+'sharing.allow_disabled_password_enforcement_groups' => false,
+
+/**
* Set to true to always transfer incoming shares by default
* when running "occ files:transfer-ownership".
* Defaults to false, so incoming shares are not transferred if not specifically requested
diff --git a/dist/settings-legacy-admin.js b/dist/settings-legacy-admin.js
index 1c77dee76ad..37ba533f4cf 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").each((function(t,s){OC.Settings.setupGroupsSelect($(s)),$(s).change((function(t){var s=t.val||[];s=JSON.stringify(s),OCP.AppConfig.setValue("core",$(e).attr("name"),s)}))})),$("#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)})),$("#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)})),$("#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,l,c,o,d){var h=[].concat(e,t,s,n,i,a,r,l,c,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=28ebcd4e69a6f4ad8b4e \ 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)})),$("#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,l,c,o,d){var h=[].concat(e,t,s,n,i,a,r,l,c,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=5e939c819d7c2d67c82d \ No newline at end of file
diff --git a/dist/settings-legacy-admin.js.map b/dist/settings-legacy-admin.js.map
index e9365aa142f..606d2633d32 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=28ebcd4e69a6f4ad8b4e","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').each((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$('#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$('#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=5e939c819d7c2d67c82d","mappings":"8BAAAA,OAAOC,iBAAiB,oBAAoB,WAC3CC,EAAE,iEAAiEC,MAAK,SAASC,EAAOC,GAAS,WAChGC,GAAGC,SAASC,kBAAkBN,EAAEG,IAChCH,EAAEG,GAASI,QAAO,SAACC,GAClB,IAAIC,EAASD,EAAGE,KAAO,GACvBD,EAASE,KAAKC,UAAUH,GACxBI,IAAIC,UAAUC,SAAS,OAAQf,EAAE,GAAMgB,KAAK,QAASP,SAIvDT,EAAE,aAAaO,QAAO,WACrBP,EAAEiB,KAAKb,GAAGc,YAAY,6BAA8B,CAAEC,MAAOnB,EAAE,GAAMU,QAAS,WAC7EN,GAAGgB,IAAIC,eAITrB,EAAE,iCAAiCsB,QAAQ,CAAEC,UAAW,QAExDvB,EAAE,yBAAyBO,QAAO,WACjC,GAAIP,EAAE,GAAMwB,GAAG,YAAa,CAC3B,IAAMC,EAAOzB,EAAE,GAAMU,MACR,SAATe,GAA4B,YAATA,GAA+B,SAATA,GAC5CZ,IAAIC,UAAUC,SAAS,OAAQ,sBAAuBU,EAAM,CAC3DC,QAAS,WAERb,IAAIC,UAAUa,UAAU,OAAQ,qBAOrC3B,EAAE,oBAAoBO,QAAO,WAC5BP,EAAE,4BAA4B4B,YAAY,UAAW,EAAKC,YAG3D7B,EAAE,qBAAqBO,QAAO,WAC7BP,EAAE,wCAAwC4B,YAAY,aAGvD5B,EAAE,2BAA2B8B,OAAM,WAClC9B,EAAE,wCAAwC4B,YAAY,UACtD5B,EAAE,6CAA6C4B,YAAY,UAC3Df,IAAIC,UAAUC,SAAS,OAAQ,qBAAsB,OACrDf,EAAE,qBAAqBgB,KAAK,WAAY,eAGzChB,EAAE,mBAAmB8B,OAAM,SAACC,GAC3B/B,EAAEF,QAAQkC,GAAG,2BAA2B,SAACC,GACxC,OAAOC,EAAE,WAAY,yEAEtBH,EAAMI,iBACNnC,EAAE,mBAAmBoC,KAAK,YAAY,GACtChC,GAAGiC,IAAIC,YAAY,sBAAuBJ,EAAE,WAAY,wBACxDlC,EAAEiB,KAAKb,GAAGc,YAAY,kCAAmC,IAAI,SAASqB,GACrEnC,GAAGiC,IAAIG,eAAe,sBAAuBD,GACzB,YAAhBA,EAAKE,QACRzC,EAAE,8CAA8C4B,YAAY,UAC5D5B,EAAE,uCAAuC4B,YAAY,WAErD5B,EAAE,mBAAmBoC,KAAK,YAAY,GAEvCpC,EAAEF,QAAQ4C,IAAI,iCAKhB1C,EAAE,6BAA6BgC,GAAG,SAAS,WAC1CW,KAAKC,MAAQD,KAAKC,MAAMC,QAAQ,MAAO,OAGxC7C,EAAE,wCAAwCO,QAAO,WAChD,IAAIqC,EAAQ5C,EAAE2C,MAAMjC,MACS,aAAzBV,EAAE2C,MAAM3B,KAAK,UAEf4B,EADGD,KAAKd,QACA,MAEA,MAGVhB,IAAIC,UAAUC,SAAS,OAAQf,EAAE2C,MAAM3B,KAAK,QAAS4B,MAGtD5C,EAAE,8BAA8BO,QAAO,WACtCP,EAAE,wBAAwB4B,YAAY,UAAWe,KAAKd,YAGvD7B,EAAE,sCAAsCO,QAAO,WAC9CP,EAAE,iCAAiC4B,YAAY,UAAWe,KAAKd,YAGhE7B,EAAE,oCAAoCO,QAAO,WAC5CP,EAAE,+BAA+B4B,YAAY,UAAWe,KAAKd,YAG9D7B,EAAE,wBAAwBO,QAAO,WAChCP,EAAE,kCAAkC4B,YAAY,UAAWe,KAAKd,YAGjE7B,EAAE,0BAA0BO,QAAO,WAClCP,EAAE,8BAA8B4B,YAAY,UAAWe,KAAKd,SACvDc,KAAKd,SACTiB,EAA8B,OAIhC9C,EAAE,4CAA4CO,QAAO,SAASC,GAC7D,IAAMuC,EAAM/C,EAAE,+BACRgD,EAAUhD,EAAEQ,EAAGyC,QAEjBL,EAAQG,EAAIrC,MAehB,OAdIsC,EAAQxB,GAAG,YACdoB,GAAgBI,EAAQtC,MAExBkC,IAAiBI,EAAQtC,MAI1BkC,GAASxC,GAAG8C,gBAGZH,EAAIrC,IAAIkC,GAAOrC,SAEfC,EAAG2B,kBAEI,KAGR,IAAMW,EAAgCK,EAAEC,UAAS,SAASR,GACzD,IAAMS,EAAU,CACf3B,QAAS,WACRtB,GAAGiC,IAAIiB,gBAAgB,+BAAgCpB,EAAE,WAAY,WAEtEqB,MAAO,WACNnD,GAAGiC,IAAImB,cAAc,+BAAgCtB,EAAE,WAAY,gBAIrE9B,GAAGiC,IAAIoB,YAAY,gCACfN,EAAEO,SAASd,IAAoB,KAAVA,EACxB/B,IAAIC,UAAUC,SAAS,OAAQ,sCAAuC6B,EAAOS,IAE7ErD,EAAE,8BAA8BU,IAAI,IACpCG,IAAIC,UAAUa,UAAU,OAAQ,sCAAuC0B,MAEtE,KAEHrD,EAAE,8BAA8BgC,GAAG,iBAAiB,WACnDc,EAA8BH,KAAKC,UAGpC5C,EAAE,iDAAiDgC,GAAG,UAAU,WAC/DhC,EAAE,wDAAwD4B,YAAY,UAAWe,KAAKd,SACtF7B,EAAE,wDAAwD4B,YAAY,UAAWe,KAAKd,SACtF7B,EAAE,8DAA8D4B,YAAY,UAAWe,KAAKd,YAG7F7B,EAAE,eAAeO,QAAO,WACvBP,EAAE,uBAAuB4B,YAAY,UAAWe,KAAKd,SACrD7B,EAAE,yBAAyB4B,YAAY,WAAYe,KAAKd,SAAW7B,EAAE,8BAA8B,GAAG6B,aAGvG7B,EAAE,kBAAkBO,QAAO,WACrBoC,KAAKd,QAGT7B,EAAE,qBAAqB2D,YAAY,UAFnC3D,EAAE,qBAAqB4D,SAAS,aAMlC5D,EAAE,kBAAkBO,QAAO,WACJ,SAAlBP,EAAE2C,MAAMjC,OACXV,EAAE,qBAAqB4D,SAAS,UAChC5D,EAAE,qBAAqB4D,SAAS,UAChC5D,EAAE,0BAA0B4D,SAAS,UACrC5D,EAAE,oBAAoB4D,SAAS,UAC/B5D,EAAE,qBAAqB4D,SAAS,UAChC5D,EAAE,gDAAgD2D,YAAY,YAE9D3D,EAAE,qBAAqB2D,YAAY,UACnC3D,EAAE,qBAAqB2D,YAAY,UACnC3D,EAAE,0BAA0B2D,YAAY,UACxC3D,EAAE,oBAAoB2D,YAAY,UAC9B3D,EAAE,kBAAkBwB,GAAG,aAC1BxB,EAAE,qBAAqB2D,YAAY,UAEpC3D,EAAE,gDAAgD4D,SAAS,cA4C7D5D,EAAE,+BAA+BO,QAxCL,SAAtBsD,IACDzD,GAAG0D,qBAAqBC,+BAC3B3D,GAAG0D,qBAAqBE,4BAA4BH,IAIrDzD,GAAGiC,IAAIoB,YAAY,sBACnBzD,EAAEiE,KAAK,CACNC,IAAK9D,GAAGc,YAAY,gCACpBiD,KAAM,OACN5B,KAAMvC,EAAE,+BAA+BoE,YACvC1C,QAAS,WACRtB,GAAGiC,IAAIiB,gBAAgB,qBAAsBpB,EAAE,WAAY,WAE5DqB,MAAO,SAACc,GACPjE,GAAGiC,IAAImB,cAAc,qBAAsBa,EAAIC,qBA0BlDtE,EAAE,qCAAqC8B,OArBR,SAAzByC,IACDnE,GAAG0D,qBAAqBC,+BAC3B3D,GAAG0D,qBAAqBE,4BAA4BO,IAIrDnE,GAAGiC,IAAIoB,YAAY,sBACnBzD,EAAEiE,KAAK,CACNC,IAAK9D,GAAGc,YAAY,4CACpBiD,KAAM,OACN5B,KAAMvC,EAAE,8BAA8BoE,YACtC1C,QAAS,WACRtB,GAAGiC,IAAIiB,gBAAgB,qBAAsBpB,EAAE,WAAY,WAE5DqB,MAAO,SAACc,GACPjE,GAAGiC,IAAImB,cAAc,qBAAsBa,EAAIC,qBAOlDtE,EAAE,sBAAsB8B,OAAM,WACX,SAAd,EAAKqC,MAAkC,aAAf,EAAKvB,QAChC,EAAKuB,KAAO,WACZ,EAAKvB,MAAQ,OAIf5C,EAAE,kBAAkB8B,OAAM,SAACC,GAC1BA,EAAMI,iBACN/B,GAAGiC,IAAIC,YAAY,oBAAqBJ,EAAE,WAAY,aAEtDlC,EAAEiE,KAAK,CACNC,IAAK9D,GAAGc,YAAY,4BACpBiD,KAAM,OACNzC,QAAS,WACRtB,GAAGiC,IAAIiB,gBAAgB,oBAAqBpB,EAAE,WAAY,gBAE3DqB,MAAO,SAACc,GACPjE,GAAGiC,IAAImB,cAAc,oBAAqBa,EAAIC,oBAKjDtE,EAAE,sBAAsBO,QAAO,WAC9BP,EAAE,sBAAsB4B,YAAY,UAAW,EAAKC,YAGrD7B,EAAE,0BAA0BO,QAAO,WAClCP,EAAE,yBAAyB4B,YAAY,UAAW,EAAKC,YAwEJ,OAAhD2C,SAASC,eAAe,qBAnE3BzE,EAAE0E,KACDtE,GAAGuE,YAAYC,cACfxE,GAAGuE,YAAYE,kBAAkB,MAAO,yBAA0BzE,GAAG0E,MAAMC,mBAAqE,IAAlD/E,EAAE,oBAAoBuC,KAAK,mBAA6B,CAAC,IAAK,MAAM,GAClKnC,GAAGuE,YAAYE,kBAAkB,MAAO,wBAAyBzE,GAAG0E,MAAMC,mBAAqE,IAAlD/E,EAAE,oBAAoBuC,KAAK,mBAA6B,CAAC,IAAK,MAAM,GACjKnC,GAAGuE,YAAYE,kBAAkB,WAAY,sBAAuBzE,GAAG0E,MAAMC,mBAAqE,IAAlD/E,EAAE,oBAAoBuC,KAAK,oBAC3HnC,GAAGuE,YAAYE,kBAAkB,WAAY,uBAAwBzE,GAAG0E,MAAMC,mBAAqE,IAAlD/E,EAAE,oBAAoBuC,KAAK,oBAC5HnC,GAAGuE,YAAYK,iBAAiB5E,GAAG6E,cAAgB,iBAAkB7E,GAAG0E,MAAMC,mBAAqE,IAAlD/E,EAAE,oBAAoBuC,KAAK,oBAC5HnC,GAAGuE,YAAYK,iBAAiB5E,GAAG6E,cAAgB,iBAAkB7E,GAAG0E,MAAMC,mBAAqE,IAAlD/E,EAAE,oBAAoBuC,KAAK,oBAC5HnC,GAAGuE,YAAYO,aACf9E,GAAGuE,YAAYQ,eACf/E,GAAGuE,YAAYS,kBAAkBhF,GAAGiF,SAAS,OAAQ,GAAI,sCAAuCjF,GAAG0E,MAAMC,mBACzG3E,GAAGuE,YAAYW,sBACdC,MAAK,SAACC,EAAQC,EAAQC,EAAQC,EAAQC,EAAQC,EAAQC,EAAQC,EAAQC,EAAQC,EAASC,GACxF,IAAMC,EAAW,GAAGC,OAAOZ,EAAQC,EAAQC,EAAQC,EAAQC,EAAQC,EAAQC,EAAQC,EAAQC,EAAQC,EAASC,GACtGnD,EAAM/C,EAAE,oBACdA,EAAE,mCAAmC4D,SAAS,UAO9C,IALA,IAAIyC,GAAc,EACZC,EAAYvD,EAAIwD,KAAK,WACrBC,EAAczD,EAAIwD,KAAK,aACvBE,EAAU1D,EAAIwD,KAAK,SAEhBG,EAAI,EAAGA,EAAIP,EAASQ,OAAQD,IACpC,OAAQP,EAASO,GAAGvC,MACpB,KAAK/D,GAAGuE,YAAYiC,kBACnBH,EAAQI,OAAO,OAASV,EAASO,GAAGrE,IAAM,SAC1C,MACD,KAAKjC,GAAGuE,YAAYmC,qBACnBN,EAAYK,OAAO,OAASV,EAASO,GAAGrE,IAAM,SAC9C,MACD,KAAKjC,GAAGuE,YAAYoC,mBACpB,QACCT,EAAUO,OAAO,OAASV,EAASO,GAAGrE,IAAM,SAI1CiE,EAAUC,KAAK,MAAMI,OAAS,IACjCL,EAAU3C,YAAY,UACtB0C,GAAc,GAEXG,EAAYD,KAAK,MAAMI,OAAS,IACnCH,EAAY7C,YAAY,UACxB0C,GAAc,GAEXI,EAAQF,KAAK,MAAMI,OAAS,IAC/BF,EAAQ9C,YAAY,UACpB0C,GAAc,GAGXA,GACHrG,EAAE,yBAAyB2D,YAAY,UACnC2C,EAAUC,KAAK,MAAMI,OAAS,EACjC3G,EAAE,mCAAmC2D,YAAY,UAEjD3D,EAAE,mCAAmC2D,YAAY,WAIO,IADjC3D,EAAE,qBACNgH,SAAS,MAAMA,WAAWL,OAC7C3G,EAAE,8BAA8B2D,YAAY,UAE5C3D,EAAE,mCAAmC2D,YAAY,mBClUlC","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$('#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/Share20/Manager.php b/lib/private/Share20/Manager.php
index 2a76ddafb25..3fca9e3fe14 100644
--- a/lib/private/Share20/Manager.php
+++ b/lib/private/Share20/Manager.php
@@ -1783,9 +1783,21 @@ class Manager implements IManager {
/**
* Is password on public link requires
*
+ * @param bool Check group membership exclusion
* @return bool
*/
- public function shareApiLinkEnforcePassword() {
+ public function shareApiLinkEnforcePassword(bool $checkGroupMembership = true) {
+ $excludedGroups = $this->config->getAppValue('core', 'shareapi_enforce_links_password_excluded_groups', '');
+ if ($excludedGroups !== '' && $checkGroupMembership) {
+ $excludedGroups = json_decode($excludedGroups);
+ $user = $this->userSession->getUser();
+ if ($user) {
+ $userGroups = $this->groupManager->getUserGroupIds($user);
+ if ((bool)array_intersect($excludedGroups, $userGroups)) {
+ return false;
+ }
+ }
+ }
return $this->config->getAppValue('core', 'shareapi_enforce_links_password', 'no') === 'yes';
}
diff --git a/lib/private/legacy/OC_Util.php b/lib/private/legacy/OC_Util.php
index ceed79bc9d5..edee23995f1 100644
--- a/lib/private/legacy/OC_Util.php
+++ b/lib/private/legacy/OC_Util.php
@@ -116,15 +116,16 @@ class OC_Util {
}
/**
- * check if a password is required for each public link
+ * Check if a password is required for each public link
*
+ * @param bool $checkGroupMembership Check group membership exclusion
* @return boolean
* @suppress PhanDeprecatedFunction
*/
- public static function isPublicLinkPasswordRequired() {
+ public static function isPublicLinkPasswordRequired(bool $checkGroupMembership = true) {
/** @var IManager $shareManager */
$shareManager = \OC::$server->get(IManager::class);
- return $shareManager->shareApiLinkEnforcePassword();
+ return $shareManager->shareApiLinkEnforcePassword($checkGroupMembership);
}
/**
diff --git a/lib/public/Share/IManager.php b/lib/public/Share/IManager.php
index ff4b6af19e0..f6b74c4de4a 100644
--- a/lib/public/Share/IManager.php
+++ b/lib/public/Share/IManager.php
@@ -321,10 +321,12 @@ interface IManager {
/**
* Is password on public link requires
*
+ * @param bool $checkGroupMembership Check group membership exclusion
* @return bool
* @since 9.0.0
+ * @since 24.0.0 Added optional $checkGroupMembership parameter
*/
- public function shareApiLinkEnforcePassword();
+ public function shareApiLinkEnforcePassword(bool $checkGroupMembership = true);
/**
* Is default expire date enabled
diff --git a/lib/public/Util.php b/lib/public/Util.php
index cd6f5f34a69..c8b55bb10e2 100644
--- a/lib/public/Util.php
+++ b/lib/public/Util.php
@@ -547,12 +547,14 @@ class Util {
}
/**
- * check if a password is required for each public link
+ * Check if a password is required for each public link
+ *
+ * @param bool $checkGroupMembership Check group membership exclusion
* @return boolean
* @since 7.0.0
*/
- public static function isPublicLinkPasswordRequired() {
- return \OC_Util::isPublicLinkPasswordRequired();
+ public static function isPublicLinkPasswordRequired(bool $checkGroupMembership = true) {
+ return \OC_Util::isPublicLinkPasswordRequired($checkGroupMembership);
}
/**
diff --git a/tests/lib/Share20/ManagerTest.php b/tests/lib/Share20/ManagerTest.php
index 9b8bc629594..2ed99519df6 100644
--- a/tests/lib/Share20/ManagerTest.php
+++ b/tests/lib/Share20/ManagerTest.php
@@ -505,14 +505,46 @@ class ManagerTest extends \Test\TestCase {
$this->expectExceptionMessage('Passwords are enforced for link and mail shares');
$this->config->method('getAppValue')->willReturnMap([
+ ['core', 'shareapi_enforce_links_password_excluded_groups', '', ''],
['core', 'shareapi_enforce_links_password', 'no', 'yes'],
]);
self::invokePrivate($this->manager, 'verifyPassword', [null]);
}
+ public function testVerifyPasswordNotEnforcedGroup() {
+ $this->config->method('getAppValue')->willReturnMap([
+ ['core', 'shareapi_enforce_links_password_excluded_groups', '', '["admin"]'],
+ ['core', 'shareapi_enforce_links_password', 'no', 'yes'],
+ ]);
+
+ // Create admin user
+ $user = $this->createMock(IUser::class);
+ $this->userSession->method('getUser')->willReturn($user);
+ $this->groupManager->method('getUserGroupIds')->with($user)->willReturn(['admin']);
+
+ $result = self::invokePrivate($this->manager, 'verifyPassword', [null]);
+ $this->assertNull($result);
+ }
+
+ public function testVerifyPasswordNotEnforcedMultipleGroups() {
+ $this->config->method('getAppValue')->willReturnMap([
+ ['core', 'shareapi_enforce_links_password_excluded_groups', '', '["admin", "special"]'],
+ ['core', 'shareapi_enforce_links_password', 'no', 'yes'],
+ ]);
+
+ // Create admin user
+ $user = $this->createMock(IUser::class);
+ $this->userSession->method('getUser')->willReturn($user);
+ $this->groupManager->method('getUserGroupIds')->with($user)->willReturn(['special']);
+
+ $result = self::invokePrivate($this->manager, 'verifyPassword', [null]);
+ $this->assertNull($result);
+ }
+
public function testVerifyPasswordNull() {
$this->config->method('getAppValue')->willReturnMap([
+ ['core', 'shareapi_enforce_links_password_excluded_groups', '', ''],
['core', 'shareapi_enforce_links_password', 'no', 'no'],
]);
@@ -522,6 +554,7 @@ class ManagerTest extends \Test\TestCase {
public function testVerifyPasswordHook() {
$this->config->method('getAppValue')->willReturnMap([
+ ['core', 'shareapi_enforce_links_password_excluded_groups', '', ''],
['core', 'shareapi_enforce_links_password', 'no', 'no'],
]);
@@ -543,6 +576,7 @@ class ManagerTest extends \Test\TestCase {
$this->expectExceptionMessage('password not accepted');
$this->config->method('getAppValue')->willReturnMap([
+ ['core', 'shareapi_enforce_links_password_excluded_groups', '', ''],
['core', 'shareapi_enforce_links_password', 'no', 'no'],
]);