diff options
author | nfebe <fenn25.fn@gmail.com> | 2024-12-09 01:20:20 +0100 |
---|---|---|
committer | nfebe <fenn25.fn@gmail.com> | 2024-12-09 12:42:17 +0100 |
commit | ac0e075929a06eec45bdb11b4ef9ebc8c3092936 (patch) | |
tree | 5347418035580c4c985157b8ed4c77556488237a /apps | |
parent | d2c60a8e53765200fa4e18b7c5512834c859f730 (diff) | |
download | nextcloud-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.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 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 |