mirror of
https://github.com/nextcloud/server.git
synced 2026-06-06 07:13:23 -04:00
Improve share logic for enforced password & expiry date
* It's possible for the admin to enforce and expiry date after, some shares have been created. This commit makes possible to update the share with the new admin constraints. * This commit would users to modify enforced expiry to anything within range and less than the enforced limit in the pre-create dialog for public shares. * This commit fixes, unable to update share without updating password. Signed-off-by: fenn-cs <fenn25.fn@gmail.com>
This commit is contained in:
parent
bcc1d57a03
commit
9d86a0444d
3 changed files with 35 additions and 36 deletions
|
|
@ -95,13 +95,13 @@
|
|||
</NcActionText>
|
||||
<NcActionInput v-if="pendingExpirationDate"
|
||||
class="share-link-expire-date"
|
||||
:disabled="saving || isExpiryDateEnforced"
|
||||
:disabled="saving"
|
||||
:is-native-picker="true"
|
||||
:hide-label="true"
|
||||
:value="new Date(share.expireDate)"
|
||||
type="date"
|
||||
:min="dateTomorrow"
|
||||
:max="dateMaxEnforced"
|
||||
:max="maxExpirationDateEnforced"
|
||||
@input="onExpirationChange">
|
||||
<!-- let's not submit when picked, the user
|
||||
might want to still edit or copy the password -->
|
||||
|
|
@ -300,12 +300,6 @@ export default {
|
|||
}
|
||||
return null
|
||||
},
|
||||
dateMaxEnforced() {
|
||||
if (this.config.isDefaultExpireDateEnforced) {
|
||||
return new Date(new Date().setDate(new Date().getDate() + this.config.defaultExpireDate))
|
||||
}
|
||||
return null
|
||||
},
|
||||
/**
|
||||
* Is the current share password protected ?
|
||||
*
|
||||
|
|
|
|||
|
|
@ -132,6 +132,9 @@ export default {
|
|||
const shareType = this.share.shareType ?? this.share.type
|
||||
return [this.SHARE_TYPES.SHARE_TYPE_LINK, this.SHARE_TYPES.SHARE_TYPE_EMAIL].includes(shareType)
|
||||
},
|
||||
isRemoteShare() {
|
||||
return this.share.type === this.SHARE_TYPES.SHARE_TYPE_REMOTE_GROUP || this.share.type === this.SHARE_TYPES.SHARE_TYPE_REMOTE
|
||||
},
|
||||
isShareOwner() {
|
||||
return this.share && this.share.owner === getCurrentUser().uid
|
||||
},
|
||||
|
|
@ -152,6 +155,19 @@ export default {
|
|||
]
|
||||
return !bundledPermissions.includes(this.share.permissions)
|
||||
},
|
||||
maxExpirationDateEnforced() {
|
||||
if (this.isExpiryDateEnforced) {
|
||||
if (this.isPublicShare) {
|
||||
return this.config.defaultExpirationDate
|
||||
}
|
||||
if (this.isRemoteShare) {
|
||||
return this.config.defaultRemoteExpirationDateString
|
||||
}
|
||||
// If it get's here then it must be an internal share
|
||||
return this.config.defaultInternalExpirationDate
|
||||
}
|
||||
return null
|
||||
},
|
||||
},
|
||||
|
||||
methods: {
|
||||
|
|
|
|||
|
|
@ -78,8 +78,8 @@
|
|||
</div>
|
||||
</div>
|
||||
<div class="sharingTabDetailsView__advanced-control">
|
||||
<NcButton type="tertiary"
|
||||
id="advancedSectionAccordionAdvancedControl"
|
||||
<NcButton id="advancedSectionAccordionAdvancedControl"
|
||||
type="tertiary"
|
||||
alignment="end-reverse"
|
||||
aria-controls="advancedSectionAccordionAdvanced"
|
||||
:aria-expanded="advancedControlExpandedValue"
|
||||
|
|
@ -91,8 +91,11 @@
|
|||
</template>
|
||||
</NcButton>
|
||||
</div>
|
||||
<div v-if="advancedSectionAccordionExpanded" id="advancedSectionAccordionAdvanced" class="sharingTabDetailsView__advanced"
|
||||
aria-labelledby="advancedSectionAccordionAdvancedControl" role="region">
|
||||
<div v-if="advancedSectionAccordionExpanded"
|
||||
id="advancedSectionAccordionAdvanced"
|
||||
class="sharingTabDetailsView__advanced"
|
||||
aria-labelledby="advancedSectionAccordionAdvancedControl"
|
||||
role="region">
|
||||
<section>
|
||||
<NcInputField v-if="isPublicShare"
|
||||
:value.sync="share.label"
|
||||
|
|
@ -427,19 +430,6 @@ export default {
|
|||
isFolder() {
|
||||
return this.fileInfo.type === 'dir'
|
||||
},
|
||||
maxExpirationDateEnforced() {
|
||||
if (this.isExpiryDateEnforced) {
|
||||
if (this.isPublicShare) {
|
||||
return this.config.defaultExpirationDate
|
||||
}
|
||||
if (this.isRemoteShare) {
|
||||
return this.config.defaultRemoteExpirationDateString
|
||||
}
|
||||
// If it get's here then it must be an internal share
|
||||
return this.config.defaultInternalExpirationDate
|
||||
}
|
||||
return null
|
||||
},
|
||||
/**
|
||||
* @return {boolean}
|
||||
*/
|
||||
|
|
@ -478,9 +468,6 @@ export default {
|
|||
isGroupShare() {
|
||||
return this.share.type === this.SHARE_TYPES.SHARE_TYPE_GROUP
|
||||
},
|
||||
isRemoteShare() {
|
||||
return this.share.type === this.SHARE_TYPES.SHARE_TYPE_REMOTE_GROUP || this.share.type === this.SHARE_TYPES.SHARE_TYPE_REMOTE
|
||||
},
|
||||
isNewShare() {
|
||||
return this.share.id === null || this.share.id === undefined
|
||||
},
|
||||
|
|
@ -654,7 +641,7 @@ export default {
|
|||
},
|
||||
advancedControlExpandedValue() {
|
||||
return this.advancedSectionAccordionExpanded ? 'true' : 'false'
|
||||
}
|
||||
},
|
||||
},
|
||||
watch: {
|
||||
setCustomPermissions(isChecked) {
|
||||
|
|
@ -731,6 +718,12 @@ export default {
|
|||
return
|
||||
}
|
||||
|
||||
// If there is an enforced expiry date, then existing shares created before enforcement
|
||||
// have no expiry date, hence we set it here.
|
||||
if (!this.isValidShareAttribute(this.share.expireDate) && this.isExpiryDateEnforced) {
|
||||
this.hasExpirationDate = true
|
||||
}
|
||||
|
||||
if (
|
||||
this.isValidShareAttribute(this.share.password)
|
||||
|| this.isValidShareAttribute(this.share.expireDate)
|
||||
|
|
@ -786,16 +779,12 @@ export default {
|
|||
if (!this.writeNoteToRecipientIsChecked) {
|
||||
this.share.note = ''
|
||||
}
|
||||
|
||||
if (this.isPasswordProtected) {
|
||||
if (this.isValidShareAttribute(this.share.newPassword)) {
|
||||
if (this.hasUnsavedPassword && this.isValidShareAttribute(this.share.newPassword)) {
|
||||
this.share.password = this.share.newPassword
|
||||
this.$delete(this.share, 'newPassword')
|
||||
} else {
|
||||
if (this.isPasswordEnforced) {
|
||||
this.passwordError = true
|
||||
return
|
||||
}
|
||||
} else if (this.isPasswordEnforced && !this.isValidShareAttribute(this.share.password)) {
|
||||
this.passwordError = true
|
||||
}
|
||||
} else {
|
||||
this.share.password = ''
|
||||
|
|
|
|||
Loading…
Reference in a new issue