diff options
author | nfebe <fenn25.fn@gmail.com> | 2024-12-09 01:20:20 +0100 |
---|---|---|
committer | nfebe <fenn25.fn@gmail.com> | 2024-12-09 01:40:39 +0100 |
commit | e7dc141fd321739023ad1711aa43cc0a5b483ed3 (patch) | |
tree | 3370e408a25a56acd03ea8c7a90c47569ef8cb5f | |
parent | 2060802a0c8355236dd74f17a6e446771e064c0f (diff) | |
download | nextcloud-server-e7dc141fd321739023ad1711aa43cc0a5b483ed3.tar.gz nextcloud-server-e7dc141fd321739023ad1711aa43cc0a5b483ed3.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>
-rw-r--r-- | apps/files_sharing/src/components/SharingEntryLink.vue | 35 |
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 7986d7e53ed..d1ad87ec6a8 100644 --- a/apps/files_sharing/src/components/SharingEntryLink.vue +++ b/apps/files_sharing/src/components/SharingEntryLink.vue @@ -82,7 +82,7 @@ </template> </NcActionInput> - <NcActionCheckbox v-if="hasDefaultExpirationDate" + <NcActionCheckbox v-if="pendingDefaultExpirationDate" :checked.sync="defaultExpirationDateEnabled" :disabled="pendingEnforcedExpirationDate || saving" class="share-link-expiration-date-checkbox" @@ -91,7 +91,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" @@ -107,7 +107,7 @@ </template> </NcActionInput> - <NcActionButton @click.prevent.stop="onNewLinkShare"> + <NcActionButton @click.prevent.stop="onNewLinkShare(true)"> <template #icon> <CheckIcon :size="20" /> </template> @@ -472,7 +472,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 @@ -483,18 +483,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 }, @@ -604,9 +599,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) { @@ -626,11 +635,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 |