镜像自地址
https://github.com/nextcloud/server.git
已同步 2024-07-30 08:15:57 +02:00
fix(files): Properly handle denied ownership transfers
When the receiver denies the transfer the notification handler was missing, so no notification was created for the transfer owner. But also the internal notification was created two times: 1. When rejecting the transfer 2. By the reject function when dismissing the notification This is fixed by only relying on the dismiss function. Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
这个提交包含在:
父节点
b2dcb8e254
当前提交
320283b67d
@ -208,20 +208,10 @@ class TransferOwnershipController extends OCSController {
|
||||
->setObject('transfer', (string)$id);
|
||||
$this->notificationManager->markProcessed($notification);
|
||||
|
||||
$notification = $this->notificationManager->createNotification();
|
||||
$notification->setUser($transferOwnership->getSourceUser())
|
||||
->setApp($this->appName)
|
||||
->setDateTime($this->timeFactory->getDateTime())
|
||||
->setSubject('transferownershipRequestDenied', [
|
||||
'sourceUser' => $transferOwnership->getSourceUser(),
|
||||
'targetUser' => $transferOwnership->getTargetUser(),
|
||||
'nodeName' => $transferOwnership->getNodeName()
|
||||
])
|
||||
->setObject('transfer', (string)$transferOwnership->getId());
|
||||
$this->notificationManager->notify($notification);
|
||||
|
||||
$this->mapper->delete($transferOwnership);
|
||||
|
||||
// A "request denied" notification will be created by Notifier::dismissNotification
|
||||
|
||||
return new DataResponse([], Http::STATUS_OK);
|
||||
}
|
||||
}
|
||||
|
@ -88,23 +88,15 @@ class Notifier implements INotifier, IDismissableNotifier {
|
||||
throw new \InvalidArgumentException('Unhandled app');
|
||||
}
|
||||
|
||||
if ($notification->getSubject() === 'transferownershipRequest') {
|
||||
return $this->handleTransferownershipRequest($notification, $languageCode);
|
||||
}
|
||||
if ($notification->getSubject() === 'transferOwnershipFailedSource') {
|
||||
return $this->handleTransferOwnershipFailedSource($notification, $languageCode);
|
||||
}
|
||||
if ($notification->getSubject() === 'transferOwnershipFailedTarget') {
|
||||
return $this->handleTransferOwnershipFailedTarget($notification, $languageCode);
|
||||
}
|
||||
if ($notification->getSubject() === 'transferOwnershipDoneSource') {
|
||||
return $this->handleTransferOwnershipDoneSource($notification, $languageCode);
|
||||
}
|
||||
if ($notification->getSubject() === 'transferOwnershipDoneTarget') {
|
||||
return $this->handleTransferOwnershipDoneTarget($notification, $languageCode);
|
||||
}
|
||||
|
||||
throw new \InvalidArgumentException('Unhandled subject');
|
||||
return match($notification->getSubject()) {
|
||||
'transferownershipRequest' => $this->handleTransferownershipRequest($notification, $languageCode),
|
||||
'transferownershipRequestDenied' => $this->handleTransferOwnershipRequestDenied($notification, $languageCode),
|
||||
'transferOwnershipFailedSource' => $this->handleTransferOwnershipFailedSource($notification, $languageCode),
|
||||
'transferOwnershipFailedTarget' => $this->handleTransferOwnershipFailedTarget($notification, $languageCode),
|
||||
'transferOwnershipDoneSource' => $this->handleTransferOwnershipDoneSource($notification, $languageCode),
|
||||
'transferOwnershipDoneTarget' => $this->handleTransferOwnershipDoneTarget($notification, $languageCode),
|
||||
default => throw new \InvalidArgumentException('Unhandled subject')
|
||||
};
|
||||
}
|
||||
|
||||
public function handleTransferownershipRequest(INotification $notification, string $languageCode): INotification {
|
||||
@ -163,6 +155,29 @@ class Notifier implements INotifier, IDismissableNotifier {
|
||||
return $notification;
|
||||
}
|
||||
|
||||
public function handleTransferOwnershipRequestDenied(INotification $notification, string $languageCode): INotification {
|
||||
$l = $this->l10nFactory->get('files', $languageCode);
|
||||
$param = $notification->getSubjectParameters();
|
||||
|
||||
$targetUser = $this->getUser($param['targetUser']);
|
||||
$notification->setRichSubject($l->t('Ownership transfer denied'))
|
||||
->setRichMessage(
|
||||
$l->t('Your ownership transfer of {path} was denied by {user}.'),
|
||||
[
|
||||
'path' => [
|
||||
'type' => 'highlight',
|
||||
'id' => $param['targetUser'] . '::' . $param['nodeName'],
|
||||
'name' => $param['nodeName'],
|
||||
],
|
||||
'user' => [
|
||||
'type' => 'user',
|
||||
'id' => $targetUser->getUID(),
|
||||
'name' => $targetUser->getDisplayName(),
|
||||
],
|
||||
]);
|
||||
return $notification;
|
||||
}
|
||||
|
||||
public function handleTransferOwnershipFailedSource(INotification $notification, string $languageCode): INotification {
|
||||
$l = $this->l10nFactory->get('files', $languageCode);
|
||||
$param = $notification->getSubjectParameters();
|
||||
|
正在加载...
在新工单中引用
屏蔽一个用户