aboutsummaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authornfebe <fenn25.fn@gmail.com>2024-12-09 01:20:20 +0100
committernfebe <fenn25.fn@gmail.com>2024-12-09 12:42:17 +0100
commitac0e075929a06eec45bdb11b4ef9ebc8c3092936 (patch)
tree5347418035580c4c985157b8ed4c77556488237a /apps
parentd2c60a8e53765200fa4e18b7c5512834c859f730 (diff)
downloadnextcloud-server-ac0e075929a06eec45bdb11b4ef9ebc8c3092936.tar.gz
nextcloud-server-ac0e075929a06eec45bdb11b4ef9ebc8c3092936.zip
fix(files_sharing): Stop infinite loop blocking link share requests
Fixes infinite loop preventing share link creation requests from being sent to the backend. Signed-off-by: nfebe <fenn25.fn@gmail.com>
Diffstat (limited to 'apps')
-rw-r--r--apps/files_sharing/src/components/SharingEntryLink.vue35
1 files changed, 22 insertions, 13 deletions
diff --git a/apps/files_sharing/src/components/SharingEntryLink.vue b/apps/files_sharing/src/components/SharingEntryLink.vue
index eca83847b67..fd593ccacc4 100644
--- a/apps/files_sharing/src/components/SharingEntryLink.vue
+++ b/apps/files_sharing/src/components/SharingEntryLink.vue
@@ -81,7 +81,7 @@
</template>
</NcActionInput>
- <NcActionCheckbox v-if="hasDefaultExpirationDate"
+ <NcActionCheckbox v-if="pendingDefaultExpirationDate"
:checked.sync="defaultExpirationDateEnabled"
:disabled="pendingEnforcedExpirationDate || saving"
class="share-link-expiration-date-checkbox"
@@ -90,7 +90,7 @@
</NcActionCheckbox>
<!-- expiration date -->
- <NcActionInput v-if="(hasDefaultExpirationDate || pendingEnforcedExpirationDate) && defaultExpirationDateEnabled"
+ <NcActionInput v-if="(pendingDefaultExpirationDate || pendingEnforcedExpirationDate) && defaultExpirationDateEnabled"
class="share-link-expire-date"
:label="pendingEnforcedExpirationDate ? t('files_sharing', 'Enter expiration date (enforced)') : t('files_sharing', 'Enter expiration date')"
:disabled="saving"
@@ -106,7 +106,7 @@
</template>
</NcActionInput>
- <NcActionButton @click.prevent.stop="onNewLinkShare">
+ <NcActionButton @click.prevent.stop="onNewLinkShare(true)">
<template #icon>
<CheckIcon :size="20" />
</template>
@@ -470,7 +470,7 @@ export default {
* @return {boolean}
*/
pendingDataIsMissing() {
- return this.pendingPassword || this.pendingEnforcedPassword || this.pendingEnforcedExpirationDate
+ return this.pendingPassword || this.pendingEnforcedPassword || this.pendingDefaultExpirationDate || this.pendingEnforcedExpirationDate
},
pendingPassword() {
return this.config.enableLinkPasswordByDefault && this.isPendingShare
@@ -481,18 +481,13 @@ export default {
pendingEnforcedExpirationDate() {
return this.config.isDefaultExpireDateEnforced && this.isPendingShare
},
- hasDefaultExpirationDate() {
+ pendingDefaultExpirationDate() {
return (this.config.defaultExpirationDate instanceof Date || !isNaN(new Date(this.config.defaultExpirationDate).getTime())) && this.isPendingShare
},
isPendingShare() {
return !!(this.share && !this.share.id)
},
-
- shareRequiresReview() {
- return this.defaultExpirationDateEnabled || this.config.enableLinkPasswordByDefault
- },
-
sharePolicyHasRequiredProperties() {
return this.config.enforcePasswordForPublicLink || this.config.isDefaultExpireDateEnforced
},
@@ -602,9 +597,23 @@ export default {
methods: {
/**
+ * Check if the share requires review
+ *
+ * @param {boolean} shareReviewComplete if the share was reviewed
+ * @return {boolean}
+ */
+ shareRequiresReview(shareReviewComplete) {
+ // If a user clicks 'Create share' it means they have reviewed the share
+ if (shareReviewComplete) {
+ return false
+ }
+ return this.defaultExpirationDateEnabled || this.config.enableLinkPasswordByDefault
+ },
+ /**
* Create a new share link and append it to the list
+ * @param {boolean} shareReviewComplete if the share was reviewed
*/
- async onNewLinkShare() {
+ async onNewLinkShare(shareReviewComplete = false) {
this.logger.debug('onNewLinkShare called (with this.share)', this.share)
// do not run again if already loading
if (this.loading) {
@@ -624,11 +633,11 @@ export default {
// Do not push yet if we need a password or an expiration date: show pending menu
// A share would require a review for example is default expiration date is set but not enforced, this allows
// the user to review the share and remove the expiration date if they don't want it
- if ((this.sharePolicyHasRequiredProperties && this.requiredPropertiesMissing) || this.shareRequiresReview) {
+ if ((this.sharePolicyHasEnforcedProperties && this.enforcedPropertiesMissing) || this.shareRequiresReview(shareReviewComplete === true)) {
this.pending = true
this.shareCreationComplete = false
- this.logger.info('Share policy requires mandated properties (password)...')
+ this.logger.info('Share policy requires a review or has mandated properties (password, expirationDate)...')
// ELSE, show the pending popovermenu
// if password default or enforced, pre-fill with random one