diff options
Diffstat (limited to 'apps/federatedfilesharing/src')
4 files changed, 112 insertions, 27 deletions
diff --git a/apps/federatedfilesharing/src/components/AdminSettings.vue b/apps/federatedfilesharing/src/components/AdminSettings.vue index edf7dc15d09..84bf6b565a3 100644 --- a/apps/federatedfilesharing/src/components/AdminSettings.vue +++ b/apps/federatedfilesharing/src/components/AdminSettings.vue @@ -32,17 +32,23 @@ {{ 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"> @@ -60,12 +66,12 @@ <script> import { loadState } from '@nextcloud/initial-state' -import { showError } from '@nextcloud/dialogs' +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/dist/Components/NcCheckboxRadioSwitch.js' -import NcSettingsSection from '@nextcloud/vue/dist/Components/NcSettingsSection.js' +import NcCheckboxRadioSwitch from '@nextcloud/vue/components/NcCheckboxRadioSwitch' +import NcSettingsSection from '@nextcloud/vue/components/NcSettingsSection' import '@nextcloud/password-confirmation/dist/style.css' @@ -92,6 +98,74 @@ export default { } }, 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() diff --git a/apps/federatedfilesharing/src/components/PersonalSettings.vue b/apps/federatedfilesharing/src/components/PersonalSettings.vue index 33d9c01e90b..7906d4c31d8 100644 --- a/apps/federatedfilesharing/src/components/PersonalSettings.vue +++ b/apps/federatedfilesharing/src/components/PersonalSettings.vue @@ -23,25 +23,31 @@ <p class="social-button"> {{ t('federatedfilesharing', 'Share it so your friends can share files with you:') }}<br> - <NcButton @click="goTo(shareFacebookUrl)"> + <NcButton :href="shareFacebookUrl"> {{ t('federatedfilesharing', 'Facebook') }} <template #icon> <img class="social-button__icon social-button__icon--bright" :src="urlFacebookIcon"> </template> </NcButton> <NcButton :aria-label="t('federatedfilesharing', 'X (formerly Twitter)')" - @click="goTo(shareXUrl)"> + :href="shareXUrl"> {{ t('federatedfilesharing', 'formerly Twitter') }} <template #icon> <img class="social-button__icon" :src="urlXIcon"> </template> </NcButton> - <NcButton @click="goTo(shareMastodonUrl)"> + <NcButton :href="shareMastodonUrl"> {{ t('federatedfilesharing', 'Mastodon') }} <template #icon> <img class="social-button__icon" :src="urlMastodonIcon"> </template> </NcButton> + <NcButton :href="shareBlueSkyUrl"> + {{ t('federatedfilesharing', 'Bluesky') }} + <template #icon> + <img class="social-button__icon" :src="urlBlueSkyIcon"> + </template> + </NcButton> <NcButton class="social-button__website-button" @click="showHtml = !showHtml"> <template #icon> @@ -76,9 +82,9 @@ import { showSuccess } from '@nextcloud/dialogs' import { loadState } from '@nextcloud/initial-state' import { t } from '@nextcloud/l10n' import { imagePath } from '@nextcloud/router' -import NcSettingsSection from '@nextcloud/vue/dist/Components/NcSettingsSection.js' -import NcButton from '@nextcloud/vue/dist/Components/NcButton.js' -import NcInputField from '@nextcloud/vue/dist/Components/NcInputField.js' +import NcSettingsSection from '@nextcloud/vue/components/NcSettingsSection' +import NcButton from '@nextcloud/vue/components/NcButton' +import NcInputField from '@nextcloud/vue/components/NcInputField' import IconWeb from 'vue-material-design-icons/Web.vue' import IconCheck from 'vue-material-design-icons/Check.vue' import IconClipboard from 'vue-material-design-icons/ContentCopy.vue' @@ -101,6 +107,7 @@ export default { reference: loadState<string>('federatedfilesharing', 'reference'), urlFacebookIcon: imagePath('core', 'facebook'), urlMastodonIcon: imagePath('core', 'mastodon'), + urlBlueSkyIcon: imagePath('core', 'bluesky'), urlXIcon: imagePath('core', 'x'), } }, @@ -130,6 +137,9 @@ export default { shareFacebookUrl() { return `https://www.facebook.com/sharer/sharer.php?u=${encodeURIComponent(this.reference)}` }, + shareBlueSkyUrl() { + return `https://bsky.app/intent/compose?text=${encodeURIComponent(this.messageWithURL)}` + }, logoPathAbsolute() { return window.location.protocol + '//' + window.location.host + this.logoPath }, @@ -176,7 +186,7 @@ export default { .social-button { margin-top: 0.5rem; - button { + button, a { display: inline-flex; margin-inline-start: 0.5rem; margin-top: 1rem; diff --git a/apps/federatedfilesharing/src/components/RemoteShareDialog.vue b/apps/federatedfilesharing/src/components/RemoteShareDialog.vue index 68d1a9a00df..9ee44f586bf 100644 --- a/apps/federatedfilesharing/src/components/RemoteShareDialog.vue +++ b/apps/federatedfilesharing/src/components/RemoteShareDialog.vue @@ -5,8 +5,8 @@ <script setup lang="ts"> import { t } from '@nextcloud/l10n' import { computed, ref } from 'vue' -import NcDialog from '@nextcloud/vue/dist/Components/NcDialog.js' -import NcPasswordField from '@nextcloud/vue/dist/Components/NcPasswordField.js' +import NcDialog from '@nextcloud/vue/components/NcDialog' +import NcPasswordField from '@nextcloud/vue/components/NcPasswordField' const props = defineProps<{ /** Name of the share */ diff --git a/apps/federatedfilesharing/src/external.js b/apps/federatedfilesharing/src/external.js index fe12dcec8bc..3581a24e95a 100644 --- a/apps/federatedfilesharing/src/external.js +++ b/apps/federatedfilesharing/src/external.js @@ -35,7 +35,8 @@ window.OCA.Sharing.showAddExternalDialog = function(share, passwordProtected, ca .replace(/\/$/, '') // remove trailing slash showRemoteShareDialog(name, owner, remote, passwordProtected) - .then((result, password) => callback(result, { ...share, password })) + // eslint-disable-next-line n/no-callback-literal + .then((password) => callback(true, { ...share, password })) // eslint-disable-next-line n/no-callback-literal .catch(() => callback(false, share)) } @@ -138,13 +139,13 @@ async function processSharesToConfirm() { shares[index], false, function(result, share) { - if (result) { + if (result === false) { + // Delete + axios.delete(generateUrl('/apps/files_sharing/api/externalShares/' + share.id)) + } else { // Accept axios.post(generateUrl('/apps/files_sharing/api/externalShares'), { id: share.id }) .then(() => reloadFilesList()) - } else { - // Delete - axios.delete(generateUrl('/apps/files_sharing/api/externalShares/' + share.id)) } }, ) |