Merge pull request #49724 from nextcloud/backport/49442/stable30

[stable30] fix(files_sharing): Stop infinite loop blocking link share requests
This commit is contained in:
F. E Noel Nfebe 2024-12-09 14:24:55 +01:00 committed by GitHub
commit c1c64c7a80
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 30 additions and 21 deletions

View file

@ -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: {
/**
* Create a new share link and append it to the list
* Check if the share requires review
*
* @param {boolean} shareReviewComplete if the share was reviewed
* @return {boolean}
*/
async onNewLinkShare() {
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(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

File diff suppressed because one or more lines are too long

View file

@ -1 +0,0 @@
5153-5153.js.license

File diff suppressed because one or more lines are too long

1
dist/8142-8142.js.map vendored Normal file

File diff suppressed because one or more lines are too long

1
dist/8142-8142.js.map.license vendored Symbolic link
View file

@ -0,0 +1 @@
8142-8142.js.license

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long