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>
This commit is contained in:
nfebe 2025-10-06 16:05:52 +01:00 committed by Andy Scherzinger
parent 6779ac7dd7
commit 033b54934b
3 changed files with 20 additions and 7 deletions

View file

@ -1339,10 +1339,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) {

View file

@ -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
}

View file

@ -976,7 +976,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')
}
@ -1139,7 +1143,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)) {