fix(files_sharing): Only send password on change

The password param should never be sent if the intention is not

remove it or update it.

This commit adapts the frontend and backend to this rule to avoid weird bugs

especially around updating new shares.

Signed-off-by: nfebe <fenn25.fn@gmail.com>

[skip ci]
pull/55983/head
nfebe 2025-10-06 16:05:52 +07:00 committed by nextcloud-command
parent e73a2b0de5
commit 424880c372
3 changed files with 20 additions and 7 deletions

@ -1342,10 +1342,13 @@ class ShareAPIController extends OCSController {
$share->setPermissions($permissions);
}
if ($password === '') {
$share->setPassword(null);
} elseif ($password !== null) {
$share->setPassword($password);
$passwordParamSent = $password !== null;
if ($passwordParamSent) {
if ($password === '') {
$share->setPassword(null);
} else {
$share->setPassword($password);
}
}
if ($label !== null) {

@ -320,7 +320,9 @@ export default {
// share api controller accepts
for (const name of propertyNames) {
if (name === 'password') {
properties[name] = this.share.newPassword ?? this.share.password
if (this.share.newPassword !== undefined) {
properties[name] = this.share.newPassword
}
continue
}

@ -979,7 +979,11 @@ export default {
},
async saveShare() {
const permissionsAndAttributes = ['permissions', 'attributes', 'note', 'expireDate']
const publicShareAttributes = ['label', 'password', 'hideDownload']
const publicShareAttributes = ['label', 'hideDownload']
// Only include password if it's being actively changed
if (this.hasUnsavedPassword) {
publicShareAttributes.push('password')
}
if (this.config.allowCustomTokens) {
publicShareAttributes.push('token')
}
@ -1142,7 +1146,11 @@ export default {
* "sendPasswordByTalk".
*/
onPasswordProtectedByTalkChange() {
this.queueUpdate('sendPasswordByTalk', 'password')
if (this.isEmailShareType || this.hasUnsavedPassword) {
this.queueUpdate('sendPasswordByTalk', 'password')
} else {
this.queueUpdate('sendPasswordByTalk')
}
},
isValidShareAttribute(value) {
if ([null, undefined].includes(value)) {