Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions lib/Db/ShareTokenRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
namespace OCA\Circles\Db;


use OCA\Circles\Exceptions\ShareTokenNotFoundException;
use OCA\Circles\Model\ShareToken;


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


/**
* @param string $token
*
* @return ShareToken
* @throws ShareTokenNotFoundException
*/
public function getByToken(string $token): ShareToken {
$qb = $this->getTokenSelectSql();
$qb->limitToToken($token);

return $this->getItemFromRequest($qb);
}

}

8 changes: 4 additions & 4 deletions lib/Db/ShareTokenRequestBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ protected function getTokenInsertSql(): CoreQueryBuilder {
*/
protected function getTokenUpdateSql(): CoreQueryBuilder {
$qb = $this->getQueryBuilder();
$qb->update(self::TABLE_SHARE);
$qb->update(self::TABLE_TOKEN);

return $qb;
}
Expand All @@ -74,8 +74,8 @@ protected function getTokenUpdateSql(): CoreQueryBuilder {
*/
protected function getTokenSelectSql(string $alias = CoreQueryBuilder::TOKEN): CoreQueryBuilder {
$qb = $this->getQueryBuilder();
$qb->generateSelect(self::TABLE_TOKEN, self::$tables[self::TABLE_SHARE], $alias)
->generateGroupBy(self::$tables[self::TABLE_SHARE], $alias);
$qb->generateSelect(self::TABLE_TOKEN, self::$tables[self::TABLE_TOKEN], $alias)
->generateGroupBy(self::$tables[self::TABLE_TOKEN], $alias);

return $qb;
}
Expand All @@ -88,7 +88,7 @@ protected function getTokenSelectSql(string $alias = CoreQueryBuilder::TOKEN): C
*/
protected function getTokenDeleteSql(): CoreQueryBuilder {
$qb = $this->getQueryBuilder();
$qb->delete(self::TABLE_SHARE);
$qb->delete(self::TABLE_TOKEN);

return $qb;
}
Expand Down
79 changes: 79 additions & 0 deletions lib/Service/MigrationService.php
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
use OCA\Circles\AppInfo\Application;
use OCA\Circles\Db\CircleRequest;
use OCA\Circles\Db\MemberRequest;
use OCA\Circles\Db\ShareTokenRequest;
use OCA\Circles\Exceptions\CircleNotFoundException;
use OCA\Circles\Exceptions\ContactAddressBookNotFoundException;
use OCA\Circles\Exceptions\ContactFormatException;
Expand All @@ -55,16 +56,19 @@
use OCA\Circles\Exceptions\RemoteNotFoundException;
use OCA\Circles\Exceptions\RemoteResourceNotFoundException;
use OCA\Circles\Exceptions\RequestBuilderException;
use OCA\Circles\Exceptions\ShareTokenNotFoundException;
use OCA\Circles\Exceptions\SingleCircleNotFoundException;
use OCA\Circles\Exceptions\UnknownRemoteException;
use OCA\Circles\Exceptions\UserTypeNotFoundException;
use OCA\Circles\Model\Circle;
use OCA\Circles\Model\FederatedUser;
use OCA\Circles\Model\Member;
use OCA\Circles\Model\ShareToken;
use OCA\DAV\CardDAV\ContactsManager;
use OCP\Contacts\IManager;
use OCP\IDBConnection;
use OCP\IURLGenerator;
use OCP\Share\IShare;


/**
Expand All @@ -91,6 +95,9 @@ class MigrationService {
/** @var MemberRequest */
private $memberRequest;

/** @var ShareTokenRequest */
private $shareTokenRequest;

/** @var MembershipService */
private $membershipService;

Expand Down Expand Up @@ -124,6 +131,7 @@ class MigrationService {
* @param IURLGenerator $urlGenerator
* @param CircleRequest $circleRequest
* @param MemberRequest $memberRequest
* @param ShareTokenRequest $shareTokenRequest
* @param MembershipService $membershipService
* @param FederatedUserService $federatedUserService
* @param CircleService $circleService
Expand All @@ -137,6 +145,7 @@ public function __construct(
IURLGenerator $urlGenerator,
CircleRequest $circleRequest,
MemberRequest $memberRequest,
ShareTokenRequest $shareTokenRequest,
MembershipService $membershipService,
FederatedUserService $federatedUserService,
CircleService $circleService,
Expand All @@ -149,6 +158,7 @@ public function __construct(
$this->urlGenerator = $urlGenerator;
$this->circleRequest = $circleRequest;
$this->memberRequest = $memberRequest;
$this->shareTokenRequest = $shareTokenRequest;
$this->membershipService = $membershipService;
$this->federatedUserService = $federatedUserService;
$this->circleService = $circleService;
Expand Down Expand Up @@ -208,6 +218,7 @@ private function migrationTo22(): void {

$this->migrationTo22_Circles();
$this->migrationTo22_Members();
$this->migrationTo22_Tokens();
$this->membershipService->resetMemberships('', true);
$this->membershipService->manageAll();

Expand Down Expand Up @@ -469,5 +480,73 @@ private function saveGeneratedMember(Member $member): void {
}
}


/**
*/
public function migrationTo22_Tokens(): void {
$qb = $this->dbConnection->getQueryBuilder();
$qb->select('*')->from('circle_tokens');

try {
$cursor = $qb->executeQuery();
$this->outputService->startMigrationProgress($cursor->rowCount());

while ($row = $cursor->fetch()) {
try {
$data = new SimpleDataStore($row);
$this->outputService->output(
'Migrating ShareToken \'' . $data->g('token') . '\' for \'' . $data->g('user_id')
. '\'',
true
);

$shareToken = $this->generateShareTokenFrom21($data);
$this->saveGeneratedShareToken($shareToken);
} catch (Exception $e) {
}
}

$cursor->closeCursor();
} catch (\OCP\DB\Exception $e) {
}

$this->outputService->finishMigrationProgress();
}


/**
* @param SimpleDataStore $data
*
* @return ShareToken
* @throws MemberNotFoundException
* @throws RequestBuilderException
*/
private function generateShareTokenFrom21(SimpleDataStore $data): ShareToken {
$shareToken = new ShareToken();
$member = $this->memberRequest->getMemberById($data->g('member_id'));

$shareToken->setShareId($data->gInt('share_id'))
->setCircleId($data->g('circle_id'))
->setSingleId($member->getSingleId())
->setMemberId($data->g('member_id'))
->setToken($data->g('token'))
->setPassword($data->g('password'))
->setAccepted(IShare::STATUS_ACCEPTED);

return $shareToken;
}

/**
* @param ShareToken $shareToken
*/
private function saveGeneratedShareToken(ShareToken $shareToken): void {
try {
$this->shareTokenRequest->getByToken($shareToken->getToken());
} catch (ShareTokenNotFoundException $e) {
$this->shareTokenRequest->save($shareToken);
} catch (RequestBuilderException $e) {
}
}

}