Merge pull request #20938 from nextcloud/fix/share-talk-verification
Fix the Talk verification
This commit is contained in:
commit
497350a7d3
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -198,9 +198,9 @@
|
|||
<!-- password protected by Talk -->
|
||||
<ActionCheckbox v-if="isPasswordProtectedByTalkAvailable"
|
||||
:checked.sync="isPasswordProtectedByTalk"
|
||||
:disabled="saving"
|
||||
:disabled="!canTogglePasswordProtectedByTalkAvailable || saving"
|
||||
class="share-link-password-talk-checkbox"
|
||||
@change="queueUpdate('sendPasswordByTalk')">
|
||||
@change="onPasswordProtectedByTalkChange">
|
||||
{{ t('files_sharing', 'Video verification') }}
|
||||
</ActionCheckbox>
|
||||
|
||||
|
@ -481,6 +481,20 @@ export default {
|
|||
: false
|
||||
},
|
||||
|
||||
canTogglePasswordProtectedByTalkAvailable() {
|
||||
if (!this.isPasswordProtected) {
|
||||
// Makes no sense
|
||||
return false
|
||||
} else if (this.isEmailShareType && !this.hasUnsavedPassword) {
|
||||
// For email shares we need a new password in order to enable or
|
||||
// disable
|
||||
return false
|
||||
}
|
||||
|
||||
// Anything else should be fine
|
||||
return true
|
||||
},
|
||||
|
||||
/**
|
||||
* Pending data.
|
||||
* If the share still doesn't have an id, it is not synced
|
||||
|
@ -792,6 +806,22 @@ export default {
|
|||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Update the password along with "sendPasswordByTalk".
|
||||
*
|
||||
* If the password was modified the new password is sent; otherwise
|
||||
* updating a mail share would fail, as in that case it is required that
|
||||
* a new password is set when enabling or disabling
|
||||
* "sendPasswordByTalk".
|
||||
*/
|
||||
onPasswordProtectedByTalkChange() {
|
||||
if (this.hasUnsavedPassword) {
|
||||
this.share.password = this.share.newPassword.trim()
|
||||
}
|
||||
|
||||
this.queueUpdate('sendPasswordByTalk', 'password')
|
||||
},
|
||||
|
||||
/**
|
||||
* Save potential changed data on menu close
|
||||
*/
|
||||
|
|
|
@ -88,17 +88,11 @@ export default {
|
|||
* Update a share
|
||||
*
|
||||
* @param {number} id share id
|
||||
* @param {Object} data destructuring object
|
||||
* @param {string} data.property property to update
|
||||
* @param {any} data.value value to set
|
||||
* @param {Object} properties key-value object of the properties to update
|
||||
*/
|
||||
async updateShare(id, { property, value }) {
|
||||
async updateShare(id, properties) {
|
||||
try {
|
||||
// ocs api requires x-www-form-urlencoded
|
||||
const data = new URLSearchParams()
|
||||
data.append(property, value)
|
||||
|
||||
const request = await axios.put(shareUrl + `/${id}`, { [property]: value }, headers)
|
||||
const request = await axios.put(shareUrl + `/${id}`, properties, headers)
|
||||
if (!('ocs' in request.data)) {
|
||||
throw request
|
||||
}
|
||||
|
@ -107,7 +101,7 @@ export default {
|
|||
console.error('Error while updating share', error)
|
||||
OC.Notification.showTemporary(t('files_sharing', 'Error updating the share'), { type: 'error' })
|
||||
const message = error.response.data.ocs.meta.message
|
||||
throw new Error(`${property}, ${message}`)
|
||||
throw new Error(`${Object.keys(properties)}, ${message}`)
|
||||
}
|
||||
},
|
||||
},
|
||||
|
|
|
@ -224,31 +224,34 @@ export default {
|
|||
/**
|
||||
* Send an update of the share to the queue
|
||||
*
|
||||
* @param {string} property the property to sync
|
||||
* @param {string} propertyNames the properties to sync
|
||||
*/
|
||||
queueUpdate(property) {
|
||||
queueUpdate(...propertyNames) {
|
||||
if (propertyNames.length === 0) {
|
||||
// Nothing to update
|
||||
return
|
||||
}
|
||||
|
||||
if (this.share.id) {
|
||||
const properties = {}
|
||||
// force value to string because that is what our
|
||||
// share api controller accepts
|
||||
const value = this.share[property].toString()
|
||||
propertyNames.map(p => (properties[p] = this.share[p].toString()))
|
||||
|
||||
this.updateQueue.add(async() => {
|
||||
this.saving = true
|
||||
this.errors = {}
|
||||
try {
|
||||
await this.updateShare(this.share.id, {
|
||||
property,
|
||||
value,
|
||||
})
|
||||
await this.updateShare(this.share.id, properties)
|
||||
|
||||
// clear any previous errors
|
||||
this.$delete(this.errors, property)
|
||||
this.$delete(this.errors, propertyNames[0])
|
||||
|
||||
// reset password state after sync
|
||||
this.$delete(this.share, 'newPassword')
|
||||
} catch ({ message }) {
|
||||
if (message && message !== '') {
|
||||
this.onSyncError(property, message)
|
||||
this.onSyncError(propertyNames[0], message)
|
||||
}
|
||||
} finally {
|
||||
this.saving = false
|
||||
|
@ -288,6 +291,14 @@ export default {
|
|||
}
|
||||
break
|
||||
}
|
||||
case 'sendPasswordByTalk': {
|
||||
// show error
|
||||
this.$set(this.errors, property, message)
|
||||
|
||||
// Restore previous state
|
||||
this.share.sendPasswordByTalk = !this.share.sendPasswordByTalk
|
||||
break
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
|
|
Loading…
Reference in New Issue