aboutsummaryrefslogtreecommitdiffstats
path: root/apps/federatedfilesharing/src
diff options
context:
space:
mode:
Diffstat (limited to 'apps/federatedfilesharing/src')
-rw-r--r--apps/federatedfilesharing/src/components/AdminSettings.vue100
-rw-r--r--apps/federatedfilesharing/src/components/PersonalSettings.vue24
-rw-r--r--apps/federatedfilesharing/src/components/RemoteShareDialog.vue4
-rw-r--r--apps/federatedfilesharing/src/external.js11
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))
}
},
)