aboutsummaryrefslogtreecommitdiffstats
path: root/apps/federatedfilesharing/src/components/AdminSettings.vue
diff options
context:
space:
mode:
Diffstat (limited to 'apps/federatedfilesharing/src/components/AdminSettings.vue')
-rw-r--r--apps/federatedfilesharing/src/components/AdminSettings.vue153
1 files changed, 119 insertions, 34 deletions
diff --git a/apps/federatedfilesharing/src/components/AdminSettings.vue b/apps/federatedfilesharing/src/components/AdminSettings.vue
index f9de2e0858c..84bf6b565a3 100644
--- a/apps/federatedfilesharing/src/components/AdminSettings.vue
+++ b/apps/federatedfilesharing/src/components/AdminSettings.vue
@@ -1,25 +1,7 @@
<!--
- - @copyright 2022 Carl Schwan <carl@carlschwan.eu>
- -
- - @author Carl Schwan <carl@carlschwan.eu>
- -
- - @license GNU AGPL version 3 or any later version
- -
- - This program is free software: you can redistribute it and/or modify
- - it under the terms of the GNU Affero General Public License as
- - published by the Free Software Foundation, either version 3 of the
- - License, or (at your option) any later version.
- -
- - This program is distributed in the hope that it will be useful,
- - but WITHOUT ANY WARRANTY; without even the implied warranty of
- - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- - GNU Affero General Public License for more details.
- -
- - You should have received a copy of the GNU Affero General Public License
- - along with this program. If not, see <http://www.gnu.org/licenses/>.
- -
+ - SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors
+ - SPDX-License-Identifier: AGPL-3.0-or-later
-->
-
<template>
<NcSettingsSection :name="t('federatedfilesharing', 'Federated Cloud Sharing')"
:description="t('federatedfilesharing', 'Adjust how people can share between servers. This includes shares between people on this server as well if they are using federated sharing.')"
@@ -50,28 +32,47 @@
{{ t('federatedfilesharing', 'Allow people on this server to receive group shares from other servers') }}
</NcCheckboxRadioSwitch>
- <NcCheckboxRadioSwitch type="switch"
- :checked.sync="lookupServerEnabled"
- @update:checked="update('lookupServerEnabled', lookupServerEnabled)">
- {{ t('federatedfilesharing', 'Search global and public address book for people') }}
- </NcCheckboxRadioSwitch>
+ <fieldset>
+ <legend>{{ t('federatedfilesharing', 'The lookup server is only available for global scale.') }}</legend>
- <NcCheckboxRadioSwitch type="switch"
- :checked.sync="lookupServerUploadEnabled"
- @update:checked="update('lookupServerUploadEnabled', lookupServerUploadEnabled)">
- {{ t('federatedfilesharing', 'Allow people to publish their data to a global and public address book') }}
- </NcCheckboxRadioSwitch>
+ <NcCheckboxRadioSwitch type="switch"
+ :checked="lookupServerEnabled"
+ disabled
+ @update:checked="showLookupServerConfirmation">
+ {{ t('federatedfilesharing', 'Search global and public address book for people') }}
+ </NcCheckboxRadioSwitch>
+
+ <NcCheckboxRadioSwitch type="switch"
+ :checked="lookupServerUploadEnabled"
+ disabled
+ @update:checked="showLookupServerUploadConfirmation">
+ {{ t('federatedfilesharing', 'Allow people to publish their data to a global and public address book') }}
+ </NcCheckboxRadioSwitch>
+ </fieldset>
+
+ <!-- Trusted server handling -->
+ <div class="settings-subsection">
+ <h3 class="settings-subsection__name">
+ {{ t('federatedfilesharing', 'Trusted federation') }}
+ </h3>
+ <NcCheckboxRadioSwitch type="switch"
+ :checked.sync="federatedTrustedShareAutoAccept"
+ @update:checked="update('federatedTrustedShareAutoAccept', federatedTrustedShareAutoAccept)">
+ {{ t('federatedfilesharing', 'Automatically accept shares from trusted federated accounts and groups by default') }}
+ </NcCheckboxRadioSwitch>
+ </div>
</NcSettingsSection>
</template>
<script>
-import NcCheckboxRadioSwitch from '@nextcloud/vue/dist/Components/NcCheckboxRadioSwitch.js'
-import NcSettingsSection from '@nextcloud/vue/dist/Components/NcSettingsSection.js'
import { loadState } from '@nextcloud/initial-state'
-import { showError } from '@nextcloud/dialogs'
-import axios from '@nextcloud/axios'
+import { DialogBuilder, DialogSeverity, showError } from '@nextcloud/dialogs'
import { generateOcsUrl } from '@nextcloud/router'
import { confirmPassword } from '@nextcloud/password-confirmation'
+import axios from '@nextcloud/axios'
+import NcCheckboxRadioSwitch from '@nextcloud/vue/components/NcCheckboxRadioSwitch'
+import NcSettingsSection from '@nextcloud/vue/components/NcSettingsSection'
+
import '@nextcloud/password-confirmation/dist/style.css'
export default {
@@ -91,11 +92,80 @@ export default {
federatedGroupSharingSupported: loadState('federatedfilesharing', 'federatedGroupSharingSupported'),
lookupServerEnabled: loadState('federatedfilesharing', 'lookupServerEnabled'),
lookupServerUploadEnabled: loadState('federatedfilesharing', 'lookupServerUploadEnabled'),
+ federatedTrustedShareAutoAccept: loadState('federatedfilesharing', 'federatedTrustedShareAutoAccept'),
internalOnly: loadState('federatedfilesharing', 'internalOnly'),
sharingFederatedDocUrl: loadState('federatedfilesharing', 'sharingFederatedDocUrl'),
}
},
methods: {
+ setLookupServerUploadEnabled(state) {
+ if (state === this.lookupServerUploadEnabled) {
+ return
+ }
+ this.lookupServerUploadEnabled = state
+ this.update('lookupServerUploadEnabled', state)
+ },
+
+ async showLookupServerUploadConfirmation(state) {
+ // No confirmation needed for disabling
+ if (state === false) {
+ return this.setLookupServerUploadEnabled(false)
+ }
+
+ const dialog = new DialogBuilder(t('federatedfilesharing', 'Confirm data upload to lookup server'))
+ await dialog
+ .setSeverity(DialogSeverity.Warning)
+ .setText(
+ t('federatedfilesharing', 'When enabled, all account properties (e.g. email address) with scope visibility set to "published", will be automatically synced and transmitted to an external system and made available in a public, global address book.'),
+ )
+ .addButton({
+ callback: () => this.setLookupServerUploadEnabled(false),
+ label: t('federatedfilesharing', 'Disable upload'),
+ })
+ .addButton({
+ callback: () => this.setLookupServerUploadEnabled(true),
+ label: t('federatedfilesharing', 'Enable data upload'),
+ type: 'error',
+ })
+ .build()
+ .show()
+ },
+
+ setLookupServerEnabled(state) {
+ if (state === this.lookupServerEnabled) {
+ return
+ }
+ this.lookupServerEnabled = state
+ this.update('lookupServerEnabled', state)
+ },
+
+ async showLookupServerConfirmation(state) {
+ // No confirmation needed for disabling
+ if (state === false) {
+ return this.setLookupServerEnabled(false)
+ }
+
+ const dialog = new DialogBuilder(t('federatedfilesharing', 'Confirm querying lookup server'))
+ await dialog
+ .setSeverity(DialogSeverity.Warning)
+ .setText(
+ t('federatedfilesharing', 'When enabled, the search input when creating shares will be sent to an external system that provides a public and global address book.')
+ + t('federatedfilesharing', 'This is used to retrieve the federated cloud ID to make federated sharing easier.')
+ + t('federatedfilesharing', 'Moreover, email addresses of users might be sent to that system in order to verify them.'),
+ )
+ .addButton({
+ callback: () => this.setLookupServerEnabled(false),
+ label: t('federatedfilesharing', 'Disable querying'),
+ })
+ .addButton({
+ callback: () => this.setLookupServerEnabled(true),
+ label: t('federatedfilesharing', 'Enable querying'),
+ type: 'error',
+ })
+ .build()
+ .show()
+ },
+
async update(key, value) {
await confirmPassword()
@@ -128,3 +198,18 @@ export default {
},
}
</script>
+<style scoped>
+.settings-subsection {
+ margin-top: 20px;
+}
+
+.settings-subsection__name {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 16px;
+ font-weight: bold;
+ max-width: 900px;
+ margin-top: 0;
+}
+</style>