Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/spreed.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoas Schilling <coding@schilljs.com>2021-12-03 17:15:31 +0300
committerJoas Schilling <coding@schilljs.com>2022-02-17 18:31:00 +0300
commit55121e46170af29d752eece2b99cc72bb8b6f1e2 (patch)
treee172a19ecc15b8a74d5c76f399b86589f9259116
parent4080f6d0905c60741c5acfcfd976e8d4cb226cdc (diff)
Change database structure
Signed-off-by: Joas Schilling <coding@schilljs.com>
-rw-r--r--appinfo/info.xml2
-rw-r--r--lib/Federation/FederationManager.php6
-rw-r--r--lib/Manager.php31
-rw-r--r--lib/Migration/Version14000Date20211203132513.php47
-rw-r--r--lib/Model/SelectHelper.php3
-rw-r--r--lib/Room.php20
6 files changed, 86 insertions, 23 deletions
diff --git a/appinfo/info.xml b/appinfo/info.xml
index c58d3d080..9d9ee699d 100644
--- a/appinfo/info.xml
+++ b/appinfo/info.xml
@@ -16,7 +16,7 @@ And in the works for the [coming versions](https://github.com/nextcloud/spreed/m
]]></description>
- <version>14.0.0-dev.0</version>
+ <version>14.0.0-dev.1</version>
<licence>agpl</licence>
<author>Aleksandra Lazarević</author>
diff --git a/lib/Federation/FederationManager.php b/lib/Federation/FederationManager.php
index f8368b23d..8efd86096 100644
--- a/lib/Federation/FederationManager.php
+++ b/lib/Federation/FederationManager.php
@@ -135,7 +135,7 @@ class FederationManager {
// Add user to the room
$room = $this->manager->getRoomById($invitation->getRoomId());
if (
- !$this->notifications->sendShareAccepted($room->getServerUrl(), $invitation->getRemoteId(), $invitation->getAccessToken())
+ !$this->notifications->sendShareAccepted($room->getRemoteServer(), $invitation->getRemoteId(), $invitation->getAccessToken())
) {
throw new CannotReachRemoteException();
}
@@ -147,7 +147,7 @@ class FederationManager {
'actorId' => $user->getUID(),
'displayName' => $user->getDisplayName(),
'accessToken' => $invitation->getAccessToken(),
- 'remoteId' => $invitation->getRemoteId(),
+ 'remoteId' => $invitation->getRemoteId(), // FIXME this seems unnecessary
]
];
$this->participantService->addUsers($room, $participant, $user);
@@ -171,7 +171,7 @@ class FederationManager {
$this->invitationMapper->delete($invitation);
- $this->notifications->sendShareDeclined($room->getServerUrl(), $invitation->getRemoteId(), $invitation->getAccessToken());
+ $this->notifications->sendShareDeclined($room->getRemoteServer(), $invitation->getRemoteId(), $invitation->getAccessToken());
}
/**
diff --git a/lib/Manager.php b/lib/Manager.php
index 993ade134..2e90625a9 100644
--- a/lib/Manager.php
+++ b/lib/Manager.php
@@ -186,7 +186,8 @@ class Manager {
(string) $row['name'],
(string) $row['description'],
(string) $row['password'],
- (string) $row['server_url'],
+ (string) $row['remote_server'],
+ (string) $row['remote_token'],
(int) $row['active_guests'],
(int) $row['default_permissions'],
(int) $row['call_permissions'],
@@ -662,13 +663,15 @@ class Manager {
$query->expr()->eq('a.actor_type', $query->createNamedParameter($actorType)),
$query->expr()->eq('a.actor_id', $query->createNamedParameter($actorId)),
$query->expr()->eq('a.room_id', 'r.id')
- ))
- ->where($query->expr()->eq('r.token', $query->createNamedParameter($token)));
+ ));
+
if ($serverUrl === null) {
- $query->andWhere($query->expr()->isNull('r.server_url'));
+ $query->where($query->expr()->eq('r.token', $query->createNamedParameter($token)));
} else {
- $query->andWhere($query->expr()->eq('r.server_url', $query->createNamedParameter($serverUrl)));
+ $query
+ ->where($query->expr()->eq('r.remote_token', $query->createNamedParameter($token)))
+ ->andWhere($query->expr()->eq('r.remote_server', $query->createNamedParameter($serverUrl)));
}
if ($sessionId !== null) {
@@ -702,7 +705,7 @@ class Manager {
/**
* @param string $token
- * @param string|null $preloadUserId Load this participants information if possible
+ * @param string|null $preloadUserId Load this participant's information if possible
* @return Room
* @throws RoomNotFoundException
*/
@@ -715,13 +718,14 @@ class Manager {
$query = $this->db->getQueryBuilder();
$helper = new SelectHelper();
$helper->selectRoomsTable($query);
- $query->from('talk_rooms', 'r')
- ->where($query->expr()->eq('r.token', $query->createNamedParameter($token)));
+ $query->from('talk_rooms', 'r');
if ($serverUrl === null) {
- $query->andWhere($query->expr()->isNull('r.server_url'));
+ $query->where($query->expr()->eq('r.token', $query->createNamedParameter($token)));
} else {
- $query->andWhere($query->expr()->eq('r.server_url', $query->createNamedParameter($serverUrl)));
+ $query
+ ->where($query->expr()->eq('r.remote_token', $query->createNamedParameter($token)))
+ ->andWhere($query->expr()->eq('r.remote_server', $query->createNamedParameter($serverUrl)));
}
@@ -951,7 +955,9 @@ class Manager {
* @return Room
* @throws DBException
*/
- public function createRemoteRoom(int $type, string $name, string $token, string $serverUrl): Room {
+ public function createRemoteRoom(int $type, string $name, string $remoteToken, string $remoteServer): Room {
+ $token = $this->getNewToken();
+
$qb = $this->db->getQueryBuilder();
$qb->insert('talk_rooms')
@@ -959,7 +965,8 @@ class Manager {
'name' => $qb->createNamedParameter($name),
'type' => $qb->createNamedParameter($type, IQueryBuilder::PARAM_INT),
'token' => $qb->createNamedParameter($token),
- 'server_url' => $qb->createNamedParameter($serverUrl),
+ 'remote_token' => $qb->createNamedParameter($remoteToken),
+ 'remote_server' => $qb->createNamedParameter($remoteServer),
]);
$qb->executeStatement();
diff --git a/lib/Migration/Version14000Date20211203132513.php b/lib/Migration/Version14000Date20211203132513.php
new file mode 100644
index 000000000..2c633e024
--- /dev/null
+++ b/lib/Migration/Version14000Date20211203132513.php
@@ -0,0 +1,47 @@
+<?php
+
+declare(strict_types=1);
+
+namespace OCA\Talk\Migration;
+
+use Closure;
+use Doctrine\DBAL\Types\Types;
+use OCP\DB\ISchemaWrapper;
+use OCP\Migration\IOutput;
+use OCP\Migration\SimpleMigrationStep;
+
+class Version14000Date20211203132513 extends SimpleMigrationStep {
+ /**
+ * @param IOutput $output
+ * @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper`
+ * @param array $options
+ * @return null|ISchemaWrapper
+ */
+ public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper {
+ /** @var ISchemaWrapper $schema */
+ $schema = $schemaClosure();
+
+ $table = $schema->getTable('talk_rooms');
+ if (!$table->hasColumn('remote_server')) {
+ $table->addColumn('remote_server', Types::STRING, [
+ 'notnull' => false,
+ 'length' => 512,
+ 'default' => null,
+ ]);
+ $table->addColumn('remote_token', Types::STRING, [
+ 'notnull' => false,
+ 'length' => 32,
+ 'default' => null,
+ ]);
+
+ // Can not be unique as we have null, null for all local rooms.
+ $table->addIndex(['remote_server', 'remote_token'], 'remote_id');
+ }
+
+ if ($table->hasColumn('server_url')) {
+ $table->dropColumn('server_url');
+ }
+
+ return $schema;
+ }
+}
diff --git a/lib/Model/SelectHelper.php b/lib/Model/SelectHelper.php
index 3b2d81ce3..d08fc8823 100644
--- a/lib/Model/SelectHelper.php
+++ b/lib/Model/SelectHelper.php
@@ -51,7 +51,8 @@ class SelectHelper {
->addSelect($alias . 'object_type')
->addSelect($alias . 'object_id')
->addSelect($alias . 'listable')
- ->addSelect($alias . 'server_url')
+ ->addSelect($alias . 'remote_server')
+ ->addSelect($alias . 'remote_token')
->selectAlias($alias . 'id', 'r_id');
}
diff --git a/lib/Room.php b/lib/Room.php
index 647462b40..d8520258d 100644
--- a/lib/Room.php
+++ b/lib/Room.php
@@ -185,7 +185,9 @@ class Room {
/** @var string */
private $password;
/** @var string */
- private $serverUrl;
+ private $remoteServer;
+ /** @var string */
+ private $remoteToken;
/** @var int */
private $activeGuests;
/** @var int */
@@ -228,7 +230,8 @@ class Room {
string $name,
string $description,
string $password,
- string $serverUrl,
+ string $remoteServer,
+ string $remoteToken,
int $activeGuests,
int $defaultPermissions,
int $callPermissions,
@@ -256,7 +259,8 @@ class Room {
$this->name = $name;
$this->description = $description;
$this->password = $password;
- $this->serverUrl = $serverUrl;
+ $this->remoteServer = $remoteServer;
+ $this->remoteToken = $remoteToken;
$this->activeGuests = $activeGuests;
$this->defaultPermissions = $defaultPermissions;
$this->callPermissions = $callPermissions;
@@ -401,12 +405,16 @@ class Room {
return $this->password;
}
- public function getServerUrl(): string {
- return $this->serverUrl;
+ public function getRemoteServer(): string {
+ return $this->remoteServer;
+ }
+
+ public function getRemoteToken(): string {
+ return $this->remoteToken;
}
public function isFederatedRemoteRoom(): bool {
- return $this->serverUrl !== '';
+ return $this->remoteServer !== '';
}
public function setParticipant(?string $userId, Participant $participant): void {