Skip to content

Commit 90a53a8

Browse files
Merge pull request #62602 from nextcloud/fix/sharing/pass-share-user-instead-of-iuser
fix(Sharing): Pass ShareUser instead of IUser
2 parents b6013cc + b234390 commit 90a53a8

4 files changed

Lines changed: 60 additions & 30 deletions

File tree

apps/sharing/lib/SharingBackend.php

Lines changed: 38 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
use OCP\Sharing\Source\IShareSourceType;
3838
use OCP\Sharing\Source\ShareSource;
3939
use OCP\Snowflake\ISnowflakeGenerator;
40+
use RuntimeException;
4041

4142
// TODO: Add mapping table for class names in sources, recipients, permissions and properties
4243

@@ -59,7 +60,7 @@ public function __construct(
5960
}
6061

6162
#[\Override]
62-
public function createShare(IUser $owner): string {
63+
public function createShare(ShareUser $owner): string {
6364
$id = $this->snowflakeGenerator->nextId();
6465
$lastUpdated = $this->manager->generateTimestamp();
6566

@@ -68,7 +69,8 @@ public function createShare(IUser $owner): string {
6869
->insert('sharing_share')
6970
->values([
7071
'id' => $qb->createNamedParameter($id),
71-
'owner_user_id' => $qb->createNamedParameter($owner->getUID()),
72+
'owner_user_id' => $qb->createNamedParameter($owner->userId),
73+
'owner_instance' => $qb->createNamedParameter($owner->instance),
7274
'last_updated' => $qb->createNamedParameter($lastUpdated),
7375
'state' => $qb->createNamedParameter(ShareState::Draft->value),
7476
])
@@ -78,13 +80,18 @@ public function createShare(IUser $owner): string {
7880
}
7981

8082
#[\Override]
81-
public function onOwnerDeleted(IUser $owner): void {
83+
public function onOwnerDeleted(ShareUser $owner): void {
8284
$qb = $this->connection->getQueryBuilder();
8385
$qb
8486
->delete('sharing_share')
85-
->where($qb->expr()->eq('owner_user_id', $qb->createNamedParameter($owner->getUID())))
86-
->andWhere($qb->expr()->isNull('owner_instance'))
87-
->executeStatement();
87+
->where($qb->expr()->eq('owner_user_id', $qb->createNamedParameter($owner->userId)));
88+
if ($owner->instance === null) {
89+
$qb->andWhere($qb->expr()->isNull('owner_instance'));
90+
} else {
91+
$qb->andWhere($qb->expr()->eq('owner_instance', $qb->createNamedParameter($owner->instance)));
92+
}
93+
94+
$qb->executeStatement();
8895
}
8996

9097
#[\Override]
@@ -164,7 +171,11 @@ public function onSourceDeleted(ShareSource $source): array {
164171
}
165172

166173
#[\Override]
167-
public function addShareRecipient(string $id, IUser $initiator, ShareRecipient $recipient): void {
174+
public function addShareRecipient(string $id, ShareRecipient $recipient): void {
175+
if (!$recipient->initiator instanceof ShareUser) {
176+
throw new RuntimeException('The initiator must not be null.');
177+
}
178+
168179
try {
169180
$qb = $this->connection->getQueryBuilder();
170181

@@ -174,7 +185,8 @@ public function addShareRecipient(string $id, IUser $initiator, ShareRecipient $
174185
'recipient_value' => $qb->createNamedParameter($recipient->value),
175186
'recipient_instance' => $qb->createNamedParameter($recipient->instance),
176187
'recipient_secret' => $qb->createNamedParameter($this->manager->generateSecret()),
177-
'initiator_user_id' => $qb->createNamedParameter($initiator->getUID(), IQueryBuilder::PARAM_STR),
188+
'initiator_user_id' => $qb->createNamedParameter($recipient->initiator->userId),
189+
'initiator_instance' => $qb->createNamedParameter($recipient->initiator->instance),
178190
];
179191

180192
$qb
@@ -248,14 +260,19 @@ public function onRecipientDeleted(ShareRecipient $recipient): array {
248260
}
249261

250262
#[\Override]
251-
public function onInitiatorDeleted(IUser $initiator): array {
263+
public function onInitiatorDeleted(ShareUser $initiator): array {
252264
$qb = $this->connection->getQueryBuilder();
253-
$result = $qb
265+
$qb
254266
->selectDistinct('share_id')
255267
->from('sharing_share_recipients')
256-
->andWhere($qb->expr()->isNull('initiator_instance'))
257-
->andWhere($qb->expr()->eq('initiator_user_id', $qb->createNamedParameter($initiator->getUID())))
258-
->executeQuery();
268+
->where($qb->expr()->eq('initiator_user_id', $qb->createNamedParameter($initiator->userId)));
269+
if ($initiator->instance === null) {
270+
$qb->andWhere($qb->expr()->isNull('initiator_instance'));
271+
} else {
272+
$qb->andWhere($qb->expr()->eq('initiator_instance', $qb->createNamedParameter($initiator->instance)));
273+
}
274+
275+
$result = $qb->executeQuery();
259276

260277
/** @var list<string|int> $ids */
261278
$ids = $result->fetchFirstColumn();
@@ -274,9 +291,14 @@ public function onInitiatorDeleted(IUser $initiator): array {
274291
->set('initiator_user_id', $qb->createNamedParameter($owner->userId))
275292
->set('initiator_instance', $qb->createNamedParameter($owner->instance))
276293
->where($qb->expr()->eq('share_id', $qb->createNamedParameter($id)))
277-
->andWhere($qb->expr()->isNull('initiator_instance'))
278-
->andWhere($qb->expr()->eq('initiator_user_id', $qb->createNamedParameter($initiator->getUID())))
279-
->executeStatement();
294+
->andWhere($qb->expr()->eq('initiator_user_id', $qb->createNamedParameter($initiator->userId)));
295+
if ($initiator->instance === null) {
296+
$qb->andWhere($qb->expr()->isNull('initiator_instance'));
297+
} else {
298+
$qb->andWhere($qb->expr()->eq('initiator_instance', $qb->createNamedParameter($initiator->instance)));
299+
}
300+
301+
$qb->executeStatement();
280302
}
281303

282304
return $ids;

lib/private/Sharing/SharingManager.php

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -159,14 +159,14 @@ public function createShare(ShareAccessContext $accessContext): string {
159159
$this->assertInTransaction();
160160

161161
$backend = $this->getBackend(null);
162-
$id = $backend->createShare($currentUser);
162+
$id = $backend->createShare(new ShareUser($currentUser->getUID(), null));
163163
$this->backendCache->set($id, $backend::class);
164164

165165
return $id;
166166
}
167167

168168
#[\Override]
169-
public function onOwnerDeleted(ShareAccessContext $accessContext, IUser $owner): void {
169+
public function onOwnerDeleted(ShareAccessContext $accessContext, ShareUser $owner): void {
170170
if (!$accessContext->overrideChecks) {
171171
throw new RuntimeException('Only possible if checks are overridden.');
172172
}
@@ -301,7 +301,15 @@ public function addShareRecipient(ShareAccessContext $accessContext, string $id,
301301
$this->validateInteraction($accessContext, $owner, $share->sources, $share->getEnabledPermissions(), $recipients);
302302
}
303303

304-
$backend->addShareRecipient($id, $currentUser, $recipient);
304+
$recipient = new ShareRecipient(
305+
$recipient->class,
306+
$recipient->value,
307+
$recipient->instance,
308+
$recipient->secret,
309+
new ShareUser($currentUser->getUID(), null),
310+
);
311+
312+
$backend->addShareRecipient($id, $recipient);
305313
}
306314

307315
#[\Override]
@@ -353,7 +361,7 @@ public function onRecipientDeleted(ShareAccessContext $accessContext, ShareRecip
353361
}
354362

355363
#[\Override]
356-
public function onInitiatorDeleted(ShareAccessContext $accessContext, IUser $initiator): void {
364+
public function onInitiatorDeleted(ShareAccessContext $accessContext, ShareUser $initiator): void {
357365
if (!$accessContext->overrideChecks) {
358366
throw new RuntimeException('Only possible if checks are overridden.');
359367
}
@@ -518,10 +526,12 @@ public function getShares(ShareAccessContext $accessContext, ?string $filterSour
518526

519527
#[\Override]
520528
public function handle(Event $event): void {
529+
$shareUser = new ShareUser($event->getUser()->getUID(), null);
530+
521531
try {
522532
$this->dbConnection->beginTransaction();
523-
$this->onOwnerDeleted(new ShareAccessContext(overrideChecks: true), $event->getUser());
524-
$this->onInitiatorDeleted(new ShareAccessContext(overrideChecks: true), $event->getUser());
533+
$this->onOwnerDeleted(new ShareAccessContext(overrideChecks: true), $shareUser);
534+
$this->onInitiatorDeleted(new ShareAccessContext(overrideChecks: true), $shareUser);
525535
$this->dbConnection->commit();
526536
} catch (Exception $exception) {
527537
$this->dbConnection->rollBack();

lib/public/Sharing/ISharingBackend.php

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
namespace OCP\Sharing;
1111

1212
use OCP\AppFramework\Attribute\Implementable;
13-
use OCP\IUser;
1413
use OCP\Sharing\Exception\ShareInvalidException;
1514
use OCP\Sharing\Exception\ShareNotFoundException;
1615
use OCP\Sharing\Permission\ISharePermissionPreset;
@@ -31,14 +30,14 @@ interface ISharingBackend {
3130
*
3231
* @since 35.0.0
3332
*/
34-
public function createShare(IUser $owner): string;
33+
public function createShare(ShareUser $owner): string;
3534

3635
/**
3736
* Perform all updates when the owner was deleted.
3837
*
3938
* @since 35.0.0
4039
*/
41-
public function onOwnerDeleted(IUser $owner): void;
40+
public function onOwnerDeleted(ShareUser $owner): void;
4241

4342
/**
4443
* Update the state of a share.
@@ -80,7 +79,7 @@ public function onSourceDeleted(ShareSource $source): array;
8079
* @throws ShareNotFoundException
8180
* @since 35.0.0
8281
*/
83-
public function addShareRecipient(string $id, IUser $initiator, ShareRecipient $recipient): void;
82+
public function addShareRecipient(string $id, ShareRecipient $recipient): void;
8483

8584
/**
8685
* Remove an existing recipient from a share.
@@ -104,7 +103,7 @@ public function onRecipientDeleted(ShareRecipient $recipient): array;
104103
* @return list<string>
105104
* @since 35.0.0
106105
*/
107-
public function onInitiatorDeleted(IUser $initiator): array;
106+
public function onInitiatorDeleted(ShareUser $initiator): array;
108107

109108
/**
110109
* Update the secret of a recipient.

lib/public/Sharing/ISharingManager.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
namespace OCP\Sharing;
1111

1212
use OCP\AppFramework\Attribute\Consumable;
13-
use OCP\IUser;
1413
use OCP\Sharing\Exception\ShareInvalidException;
1514
use OCP\Sharing\Exception\ShareNotFoundException;
1615
use OCP\Sharing\Exception\ShareOperationForbiddenException;
@@ -68,7 +67,7 @@ public function createShare(ShareAccessContext $accessContext): string;
6867
*
6968
* @since 35.0.0
7069
*/
71-
public function onOwnerDeleted(ShareAccessContext $accessContext, IUser $owner): void;
70+
public function onOwnerDeleted(ShareAccessContext $accessContext, ShareUser $owner): void;
7271

7372
/**
7473
* Update the state of a share.
@@ -137,7 +136,7 @@ public function onRecipientDeleted(ShareAccessContext $accessContext, ShareRecip
137136
*
138137
* @since 35.0.0
139138
*/
140-
public function onInitiatorDeleted(ShareAccessContext $accessContext, IUser $initiator): void;
139+
public function onInitiatorDeleted(ShareAccessContext $accessContext, ShareUser $initiator): void;
141140

142141
/**
143142
* Update the secret of a recipient.

0 commit comments

Comments
 (0)