Skip to content

Commit 79d549f

Browse files
ArtificialOwlbackportbot[bot]
authored andcommitted
Migration of tokens
Signed-off-by: Maxence Lange <maxence@artificial-owl.com>
1 parent 2daed4b commit 79d549f

File tree

3 files changed

+98
-4
lines changed

3 files changed

+98
-4
lines changed

lib/Db/ShareTokenRequest.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
namespace OCA\Circles\Db;
3333

3434

35+
use OCA\Circles\Exceptions\ShareTokenNotFoundException;
3536
use OCA\Circles\Model\ShareToken;
3637

3738

@@ -63,5 +64,19 @@ public function save(ShareToken $token): void {
6364
$token->setDbId($id);
6465
}
6566

67+
68+
/**
69+
* @param string $token
70+
*
71+
* @return ShareToken
72+
* @throws ShareTokenNotFoundException
73+
*/
74+
public function getByToken(string $token): ShareToken {
75+
$qb = $this->getTokenSelectSql();
76+
$qb->limitToToken($token);
77+
78+
return $this->getItemFromRequest($qb);
79+
}
80+
6681
}
6782

lib/Db/ShareTokenRequestBuilder.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ protected function getTokenInsertSql(): CoreQueryBuilder {
6161
*/
6262
protected function getTokenUpdateSql(): CoreQueryBuilder {
6363
$qb = $this->getQueryBuilder();
64-
$qb->update(self::TABLE_SHARE);
64+
$qb->update(self::TABLE_TOKEN);
6565

6666
return $qb;
6767
}
@@ -74,8 +74,8 @@ protected function getTokenUpdateSql(): CoreQueryBuilder {
7474
*/
7575
protected function getTokenSelectSql(string $alias = CoreQueryBuilder::TOKEN): CoreQueryBuilder {
7676
$qb = $this->getQueryBuilder();
77-
$qb->generateSelect(self::TABLE_TOKEN, self::$tables[self::TABLE_SHARE], $alias)
78-
->generateGroupBy(self::$tables[self::TABLE_SHARE], $alias);
77+
$qb->generateSelect(self::TABLE_TOKEN, self::$tables[self::TABLE_TOKEN], $alias)
78+
->generateGroupBy(self::$tables[self::TABLE_TOKEN], $alias);
7979

8080
return $qb;
8181
}
@@ -88,7 +88,7 @@ protected function getTokenSelectSql(string $alias = CoreQueryBuilder::TOKEN): C
8888
*/
8989
protected function getTokenDeleteSql(): CoreQueryBuilder {
9090
$qb = $this->getQueryBuilder();
91-
$qb->delete(self::TABLE_SHARE);
91+
$qb->delete(self::TABLE_TOKEN);
9292

9393
return $qb;
9494
}

lib/Service/MigrationService.php

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
use OCA\Circles\AppInfo\Application;
4141
use OCA\Circles\Db\CircleRequest;
4242
use OCA\Circles\Db\MemberRequest;
43+
use OCA\Circles\Db\ShareTokenRequest;
4344
use OCA\Circles\Exceptions\CircleNotFoundException;
4445
use OCA\Circles\Exceptions\ContactAddressBookNotFoundException;
4546
use OCA\Circles\Exceptions\ContactFormatException;
@@ -55,16 +56,19 @@
5556
use OCA\Circles\Exceptions\RemoteNotFoundException;
5657
use OCA\Circles\Exceptions\RemoteResourceNotFoundException;
5758
use OCA\Circles\Exceptions\RequestBuilderException;
59+
use OCA\Circles\Exceptions\ShareTokenNotFoundException;
5860
use OCA\Circles\Exceptions\SingleCircleNotFoundException;
5961
use OCA\Circles\Exceptions\UnknownRemoteException;
6062
use OCA\Circles\Exceptions\UserTypeNotFoundException;
6163
use OCA\Circles\Model\Circle;
6264
use OCA\Circles\Model\FederatedUser;
6365
use OCA\Circles\Model\Member;
66+
use OCA\Circles\Model\ShareToken;
6467
use OCA\DAV\CardDAV\ContactsManager;
6568
use OCP\Contacts\IManager;
6669
use OCP\IDBConnection;
6770
use OCP\IURLGenerator;
71+
use OCP\Share\IShare;
6872

6973

7074
/**
@@ -91,6 +95,9 @@ class MigrationService {
9195
/** @var MemberRequest */
9296
private $memberRequest;
9397

98+
/** @var ShareTokenRequest */
99+
private $shareTokenRequest;
100+
94101
/** @var MembershipService */
95102
private $membershipService;
96103

@@ -124,6 +131,7 @@ class MigrationService {
124131
* @param IURLGenerator $urlGenerator
125132
* @param CircleRequest $circleRequest
126133
* @param MemberRequest $memberRequest
134+
* @param ShareTokenRequest $shareTokenRequest
127135
* @param MembershipService $membershipService
128136
* @param FederatedUserService $federatedUserService
129137
* @param CircleService $circleService
@@ -137,6 +145,7 @@ public function __construct(
137145
IURLGenerator $urlGenerator,
138146
CircleRequest $circleRequest,
139147
MemberRequest $memberRequest,
148+
ShareTokenRequest $shareTokenRequest,
140149
MembershipService $membershipService,
141150
FederatedUserService $federatedUserService,
142151
CircleService $circleService,
@@ -149,6 +158,7 @@ public function __construct(
149158
$this->urlGenerator = $urlGenerator;
150159
$this->circleRequest = $circleRequest;
151160
$this->memberRequest = $memberRequest;
161+
$this->shareTokenRequest = $shareTokenRequest;
152162
$this->membershipService = $membershipService;
153163
$this->federatedUserService = $federatedUserService;
154164
$this->circleService = $circleService;
@@ -208,6 +218,7 @@ private function migrationTo22(): void {
208218

209219
$this->migrationTo22_Circles();
210220
$this->migrationTo22_Members();
221+
$this->migrationTo22_Tokens();
211222
$this->membershipService->resetMemberships('', true);
212223
$this->membershipService->manageAll();
213224

@@ -469,5 +480,73 @@ private function saveGeneratedMember(Member $member): void {
469480
}
470481
}
471482

483+
484+
/**
485+
*/
486+
public function migrationTo22_Tokens(): void {
487+
$qb = $this->dbConnection->getQueryBuilder();
488+
$qb->select('*')->from('circle_tokens');
489+
490+
try {
491+
$cursor = $qb->executeQuery();
492+
$this->outputService->startMigrationProgress($cursor->rowCount());
493+
494+
while ($row = $cursor->fetch()) {
495+
try {
496+
$data = new SimpleDataStore($row);
497+
$this->outputService->output(
498+
'Migrating ShareToken \'' . $data->g('token') . '\' for \'' . $data->g('user_id')
499+
. '\'',
500+
true
501+
);
502+
503+
$shareToken = $this->generateShareTokenFrom21($data);
504+
$this->saveGeneratedShareToken($shareToken);
505+
} catch (Exception $e) {
506+
}
507+
}
508+
509+
$cursor->closeCursor();
510+
} catch (\OCP\DB\Exception $e) {
511+
}
512+
513+
$this->outputService->finishMigrationProgress();
514+
}
515+
516+
517+
/**
518+
* @param SimpleDataStore $data
519+
*
520+
* @return ShareToken
521+
* @throws MemberNotFoundException
522+
* @throws RequestBuilderException
523+
*/
524+
private function generateShareTokenFrom21(SimpleDataStore $data): ShareToken {
525+
$shareToken = new ShareToken();
526+
$member = $this->memberRequest->getMemberById($data->g('member_id'));
527+
528+
$shareToken->setShareId($data->gInt('share_id'))
529+
->setCircleId($data->g('circle_id'))
530+
->setSingleId($member->getSingleId())
531+
->setMemberId($data->g('member_id'))
532+
->setToken($data->g('token'))
533+
->setPassword($data->g('password'))
534+
->setAccepted(IShare::STATUS_ACCEPTED);
535+
536+
return $shareToken;
537+
}
538+
539+
/**
540+
* @param ShareToken $shareToken
541+
*/
542+
private function saveGeneratedShareToken(ShareToken $shareToken): void {
543+
try {
544+
$this->shareTokenRequest->getByToken($shareToken->getToken());
545+
} catch (ShareTokenNotFoundException $e) {
546+
$this->shareTokenRequest->save($shareToken);
547+
} catch (RequestBuilderException $e) {
548+
}
549+
}
550+
472551
}
473552

0 commit comments

Comments
 (0)