aboutsummaryrefslogtreecommitdiffstats
path: root/apps/settings/src/admin.js
diff options
context:
space:
mode:
Diffstat (limited to 'apps/settings/src/admin.js')
-rw-r--r--apps/settings/src/admin.js335
1 files changed, 335 insertions, 0 deletions
diff --git a/apps/settings/src/admin.js b/apps/settings/src/admin.js
new file mode 100644
index 00000000000..24f95ccb2a6
--- /dev/null
+++ b/apps/settings/src/admin.js
@@ -0,0 +1,335 @@
+import $ from 'jquery'
+import 'jquery-ui-dist/jquery-ui'
+
+window.addEventListener('DOMContentLoaded', () => {
+ $('#excludedGroups,#linksExcludedGroups').each((index, element) => {
+ OC.Settings.setupGroupsSelect($(element))
+ $(element).change((ev) => {
+ let groups = ev.val || []
+ groups = JSON.stringify(groups)
+ OCP.AppConfig.setValue('core', $(this).attr('name'), groups)
+ })
+ })
+
+ $('#loglevel').change(() => {
+ $.post(OC.generateUrl('/settings/admin/log/level'), { level: $(this).val() }, () => {
+ OC.Log.reload()
+ })
+ })
+
+ $('#backgroundjobs span.crondate').tooltip({ placement: 'top' })
+
+ $('#backgroundjobs input').change(() => {
+ if ($(this).is(':checked')) {
+ const mode = $(this).val()
+ if (mode === 'ajax' || mode === 'webcron' || mode === 'cron') {
+ OCP.AppConfig.setValue('core', 'backgroundjobs_mode', mode, {
+ success: () => {
+ // clear cron errors on background job mode change
+ OCP.AppConfig.deleteKey('core', 'cronErrors')
+ }
+ })
+ }
+ }
+ })
+
+ $('#shareAPIEnabled').change(() => {
+ $('#shareAPI p:not(#enable)').toggleClass('hidden', !this.checked)
+ })
+
+ $('#enableEncryption').change(() => {
+ $('#encryptionAPI div#EncryptionWarning').toggleClass('hidden')
+ })
+
+ $('#reallyEnableEncryption').click(() => {
+ $('#encryptionAPI div#EncryptionWarning').toggleClass('hidden')
+ $('#encryptionAPI div#EncryptionSettingsArea').toggleClass('hidden')
+ OCP.AppConfig.setValue('core', 'encryption_enabled', 'yes')
+ $('#enableEncryption').attr('disabled', 'disabled')
+ })
+
+ $('#startmigration').click((event) => {
+ $(window).on('beforeunload.encryption', (e) => {
+ return t('settings', 'Migration in progress. Please wait until the migration is finished')
+ })
+ event.preventDefault()
+ $('#startmigration').prop('disabled', true)
+ OC.msg.startAction('#startmigration_msg', t('settings', 'Migration started …'))
+ $.post(OC.generateUrl('/settings/admin/startmigration'), '', function(data) {
+ OC.msg.finishedAction('#startmigration_msg', data)
+ if (data.status === 'success') {
+ $('#encryptionAPI div#selectEncryptionModules').toggleClass('hidden')
+ $('#encryptionAPI div#migrationWarning').toggleClass('hidden')
+ } else {
+ $('#startmigration').prop('disabled', false)
+ }
+ $(window).off('beforeunload.encryption')
+
+ })
+ })
+
+ $('#shareapiExpireAfterNDays').on('input', function() {
+ this.value = this.value.replace(/\D/g, '')
+ })
+
+ $('#shareAPI input:not(.noJSAutoUpdate)').change(function() {
+ let value = $(this).val()
+ if ($(this).attr('type') === 'checkbox') {
+ if (this.checked) {
+ value = 'yes'
+ } else {
+ value = 'no'
+ }
+ }
+ OCP.AppConfig.setValue('core', $(this).attr('name'), value)
+ })
+
+ $('#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)
+ if (!this.checked) {
+ savePublicShareDisclaimerText('')
+ }
+ })
+
+ $('#shareApiDefaultPermissionsSection input').change(function(ev) {
+ const $el = $('#shareApiDefaultPermissions')
+ const $target = $(ev.target)
+
+ let value = $el.val()
+ if ($target.is(':checked')) {
+ value = value | $target.val()
+ } else {
+ value = value & ~$target.val()
+ }
+
+ // always set read permission
+ value |= OC.PERMISSION_READ
+
+ // this will trigger the field's change event and will save it
+ $el.val(value).change()
+
+ ev.preventDefault()
+
+ return false
+ })
+
+ const savePublicShareDisclaimerText = _.debounce(function(value) {
+ const options = {
+ success: () => {
+ OC.msg.finishedSuccess('#publicShareDisclaimerStatus', t('settings', 'Saved'))
+ },
+ error: () => {
+ OC.msg.finishedError('#publicShareDisclaimerStatus', t('settings', 'Not saved'))
+ }
+ }
+
+ OC.msg.startSaving('#publicShareDisclaimerStatus')
+ if (_.isString(value) && value !== '') {
+ OCP.AppConfig.setValue('core', 'shareapi_public_link_disclaimertext', value, options)
+ } else {
+ $('#publicShareDisclaimerText').val('')
+ OCP.AppConfig.deleteKey('core', 'shareapi_public_link_disclaimertext', options)
+ }
+ }, 500)
+
+ $('#publicShareDisclaimerText').on('change, keyup', function() {
+ savePublicShareDisclaimerText(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() {
+ if (!this.checked) {
+ $('#mail_credentials').addClass('hidden')
+ } else {
+ $('#mail_credentials').removeClass('hidden')
+ }
+ })
+
+ $('#mail_smtpmode').change(function() {
+ if ($(this).val() !== 'smtp') {
+ $('#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')
+ } else {
+ $('#setting_smtpauth').removeClass('hidden')
+ $('#setting_smtphost').removeClass('hidden')
+ $('#mail_smtpsecure_label').removeClass('hidden')
+ $('#mail_smtpsecure').removeClass('hidden')
+ if ($('#mail_smtpauth').is(':checked')) {
+ $('#mail_credentials').removeClass('hidden')
+ }
+ $('#mail_sendmailmode_label, #mail_sendmailmode').addClass('hidden')
+ }
+ })
+
+ const changeEmailSettings = function() {
+ if (OC.PasswordConfirmation.requiresPasswordConfirmation()) {
+ OC.PasswordConfirmation.requirePasswordConfirmation(changeEmailSettings)
+ return
+ }
+
+ OC.msg.startSaving('#mail_settings_msg')
+ $.ajax({
+ url: OC.generateUrl('/settings/admin/mailsettings'),
+ type: 'POST',
+ data: $('#mail_general_settings_form').serialize(),
+ success: () => {
+ OC.msg.finishedSuccess('#mail_settings_msg', t('settings', 'Saved'))
+ },
+ error: (xhr) => {
+ OC.msg.finishedError('#mail_settings_msg', xhr.responseJSON)
+ }
+ })
+ }
+
+ const toggleEmailCredentials = function() {
+ if (OC.PasswordConfirmation.requiresPasswordConfirmation()) {
+ OC.PasswordConfirmation.requirePasswordConfirmation(toggleEmailCredentials)
+ return
+ }
+
+ OC.msg.startSaving('#mail_settings_msg')
+ $.ajax({
+ url: OC.generateUrl('/settings/admin/mailsettings/credentials'),
+ type: 'POST',
+ data: $('#mail_credentials_settings').serialize(),
+ success: () => {
+ OC.msg.finishedSuccess('#mail_settings_msg', t('settings', 'Saved'))
+ },
+ error: (xhr) => {
+ OC.msg.finishedError('#mail_settings_msg', xhr.responseJSON)
+ }
+ })
+ }
+
+ $('#mail_general_settings_form').change(changeEmailSettings)
+ $('#mail_credentials_settings_submit').click(toggleEmailCredentials)
+ $('#mail_smtppassword').click(() => {
+ if (this.type === 'text' && this.value === '********') {
+ this.type = 'password'
+ this.value = ''
+ }
+ })
+
+ $('#sendtestemail').click((event) => {
+ event.preventDefault()
+ OC.msg.startAction('#sendtestmail_msg', t('settings', 'Sending…'))
+
+ $.ajax({
+ url: OC.generateUrl('/settings/admin/mailtest'),
+ type: 'POST',
+ success: () => {
+ OC.msg.finishedSuccess('#sendtestmail_msg', t('settings', 'Email sent'))
+ },
+ error: (xhr) => {
+ OC.msg.finishedError('#sendtestmail_msg', xhr.responseJSON)
+ }
+ })
+ })
+
+ $('#allowGroupSharing').change(() => {
+ $('#allowGroupSharing').toggleClass('hidden', !this.checked)
+ })
+
+ $('#shareapiExcludeGroups').change(() => {
+ $('#selectExcludedGroups').toggleClass('hidden', !this.checked)
+ })
+
+ const setupChecks = () => {
+ // run setup checks then gather error messages
+ $.when(
+ OC.SetupChecks.checkWebDAV(),
+ OC.SetupChecks.checkWellKnownUrl('GET', '/.well-known/webfinger', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true, [200, 404], true),
+ OC.SetupChecks.checkWellKnownUrl('GET', '/.well-known/nodeinfo', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true, [200, 404], true),
+ OC.SetupChecks.checkWellKnownUrl('PROPFIND', '/.well-known/caldav', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true),
+ OC.SetupChecks.checkWellKnownUrl('PROPFIND', '/.well-known/carddav', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true),
+ OC.SetupChecks.checkProviderUrl(OC.getRootPath() + '/ocm-provider/', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true),
+ OC.SetupChecks.checkProviderUrl(OC.getRootPath() + '/ocs-provider/', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true),
+ OC.SetupChecks.checkSetup(),
+ OC.SetupChecks.checkGeneric(),
+ OC.SetupChecks.checkWOFF2Loading(OC.filePath('core', '', 'fonts/NotoSans-Regular-latin.woff2'), OC.theme.docPlaceholderUrl),
+ OC.SetupChecks.checkDataProtected()
+ ).then((check1, check2, check3, check4, check5, check6, check7, check8, check9, check10, check11) => {
+ const messages = [].concat(check1, check2, check3, check4, check5, check6, check7, check8, check9, check10, check11)
+ const $el = $('#postsetupchecks')
+ $('#security-warning-state-loading').addClass('hidden')
+
+ let hasMessages = false
+ const $errorsEl = $el.find('.errors')
+ const $warningsEl = $el.find('.warnings')
+ const $infoEl = $el.find('.info')
+
+ for (let i = 0; i < messages.length; i++) {
+ switch (messages[i].type) {
+ case OC.SetupChecks.MESSAGE_TYPE_INFO:
+ $infoEl.append('<li>' + messages[i].msg + '</li>')
+ break
+ case OC.SetupChecks.MESSAGE_TYPE_WARNING:
+ $warningsEl.append('<li>' + messages[i].msg + '</li>')
+ break
+ case OC.SetupChecks.MESSAGE_TYPE_ERROR:
+ default:
+ $errorsEl.append('<li>' + messages[i].msg + '</li>')
+ }
+ }
+
+ if ($errorsEl.find('li').length > 0) {
+ $errorsEl.removeClass('hidden')
+ hasMessages = true
+ }
+ if ($warningsEl.find('li').length > 0) {
+ $warningsEl.removeClass('hidden')
+ hasMessages = true
+ }
+ if ($infoEl.find('li').length > 0) {
+ $infoEl.removeClass('hidden')
+ hasMessages = true
+ }
+
+ if (hasMessages) {
+ $('#postsetupchecks-hint').removeClass('hidden')
+ if ($errorsEl.find('li').length > 0) {
+ $('#security-warning-state-failure').removeClass('hidden')
+ } else {
+ $('#security-warning-state-warning').removeClass('hidden')
+ }
+ } else {
+ const securityWarning = $('#security-warning')
+ if (securityWarning.children('ul').children().length === 0) {
+ $('#security-warning-state-ok').removeClass('hidden')
+ } else {
+ $('#security-warning-state-failure').removeClass('hidden')
+ }
+ }
+ })
+ }
+
+ if (document.getElementById('security-warning') !== null) {
+ setupChecks()
+ }
+})