Compare commits

...

3 Commits

Author SHA1 Message Date
Finn ff17240641
register autojoin job 2021-12-18 19:13:52 +01:00
Finn b62c2ba537
add autojoin for matrix invites 2021-12-18 19:13:52 +01:00
Finn a403b6b614
reformat code 2021-12-18 19:13:47 +01:00
5 changed files with 134 additions and 23 deletions

View File

@ -11,6 +11,9 @@
<namespace>UPschooling</namespace>
<category>tools</category>
<bugs>https://gitea.rs485.network/UPschooling/Nextcloud-App/issues</bugs>
<background-jobs>
<job>OCA\UPschooling\BackgroundJob\MatrixListener</job>
</background-jobs>
<dependencies>
<nextcloud min-version="20" max-version="22"/>
</dependencies>

View File

@ -0,0 +1,28 @@
<?php
namespace OCA\UPschooling\BackgroundJob;
use OCA\UPschooling\Service\MatrixListenerService;
use OCP\AppFramework\Utility\ITimeFactory;
use OCP\BackgroundJob\TimedJob;
use Psr\Log\LoggerInterface;
class MatrixListener extends TimedJob {
/** @var MatrixListenerService */
private $matrixListenerService;
/** @var LoggerInterface */
private $logger;
public function __construct(ITimeFactory $time, MatrixListenerService $matrixListenerService, LoggerInterface $logger) {
parent::__construct($time);
parent::setInterval(1);
$this->logger = $logger;
$this->matrixListenerService = $matrixListenerService;
}
protected function run($argument) {
$this->matrixListenerService->listen();
}
}

View File

@ -0,0 +1,14 @@
<?php
namespace OCA\UPschooling\Events;
use OCP\EventDispatcher\Event;
class NewMessageEvent extends Event {
public function __construct()
{
}
}

View File

@ -55,30 +55,30 @@ class Version000000Date20210918151800 extends SimpleMigrationStep {
$table->addIndex(['matrix_room'], 'upschooling_mx_room_id_idx');
}
if (!$schema->hasTable('upschooling_users')) {
$table = $schema->createTable('upschooling_users');
$table->addColumn('id', 'integer', [
'autoincrement' => true,
'notnull' => true,
]);
$table->addColumn('user_id', 'string', [
'notnull' => true,
'length' => 64,
]);
$table->addColumn('matrix_user', 'string', [
'notnull' => true,
'length' => 200,
]);
$table->addColumn('matrix_token', 'string', [
'notnull' => true,
'length' => 200,
]);
if (!$schema->hasTable('upschooling_users')) {
$table = $schema->createTable('upschooling_users');
$table->addColumn('id', 'integer', [
'autoincrement' => true,
'notnull' => true,
]);
$table->addColumn('user_id', 'string', [
'notnull' => true,
'length' => 64,
]);
$table->addColumn('matrix_user', 'string', [
'notnull' => true,
'length' => 200,
]);
$table->addColumn('matrix_token', 'string', [
'notnull' => true,
'length' => 200,
]);
$table->setPrimaryKey(['id']);
$table->addUniqueConstraint(['user_id'], 'upschooling_mx_user_nc_uniq');
$table->addUniqueConstraint(['matrix_user'], 'upschooling_mx_user_mx_uniq');
$table->addForeignKeyConstraint('users', ['user_id'], ['uid'], [], 'upschooling_mx_user_nc_fk');
}
$table->setPrimaryKey(['id']);
$table->addUniqueConstraint(['user_id'], 'upschooling_mx_user_nc_uniq');
$table->addUniqueConstraint(['matrix_user'], 'upschooling_mx_user_mx_uniq');
$table->addForeignKeyConstraint('users', ['user_id'], ['uid'], [], 'upschooling_mx_user_nc_fk');
}
return $schema;
}
}

View File

@ -0,0 +1,66 @@
<?php
namespace OCA\UPschooling\Service;
use Aryess\PhpMatrixSdk\Exceptions\MatrixException;
use Aryess\PhpMatrixSdk\Exceptions\MatrixHttpLibException;
use Aryess\PhpMatrixSdk\Exceptions\MatrixRequestException;
use Aryess\PhpMatrixSdk\Exceptions\ValidationException;
use Aryess\PhpMatrixSdk\MatrixClient;
use Psr\Log\LoggerInterface;
/**
*
*/
class MatrixListenerService {
/** @var LoggerInterface */
private $logger;
/** @var MatrixClient */
private $client;
/** @var string */
private $registrationSecret = "oyYh_iEJ7Aim.iB+ye.Xk;Gl3iHFab5*8K,zv~IulT85P=c-38";
/**
* @param LoggerInterface $logger
* @throws MatrixException
* @throws MatrixHttpLibException
* @throws MatrixRequestException
* @throws ValidationException
*/
public function __construct(LoggerInterface $logger) {
$this->logger = $logger;
$serverUrl = "http://synapse:8008";
$user = "upschooling";
$this->client = new MatrixClient($serverUrl);
$this->client->login($user, "secret", true);
$this->logger->debug("Logged in as " . $user . " on server " . $serverUrl);
}
/**
* Handle invites
*
* @throws MatrixException
*/
public function handleInvites(int $roomId, array $someState) {
$this->client->joinRoom($roomId);
}
public static function test() {
var_dump("Test");
}
public function listen() {
$syncResponse = $this->client->api()->sync();
foreach (array_get($syncResponse, 'rooms.invite', []) as $roomId => $inviteRoom) {
try {
$this->client->joinRoom($roomId);
} catch (\Exception $e) {
$this->logger->info("Join for room: " . $roomId . " failed.");
}
$this->logger->debug("joined " . $roomId);
}
}
}