forked from berhsi/matrix-register
114 lines
3.2 KiB
PHP
114 lines
3.2 KiB
PHP
|
<?php
|
||
|
|
||
|
/**
|
||
|
* file: lib/register.php
|
||
|
* date: 28.08.2021
|
||
|
* user: bernd@nr18.space
|
||
|
* desc: Klasse Registrator - validiert einen Token und registriert einen
|
||
|
* User am synapse-matrix Server. Achtung: z.Z. noch keine Registrierung!
|
||
|
*/
|
||
|
|
||
|
require("base.php");
|
||
|
|
||
|
|
||
|
class Registrator extends BaseClass {
|
||
|
|
||
|
/**
|
||
|
* Die Klasse zum Aktivieren des Matrix Accounts. Erbt aus dem
|
||
|
* Konstruktor von BaseClass ein Konfigurations- und ein Datenbakobjekt
|
||
|
* ($this->config, $this->db), die Funktion generateToken(), sowie die
|
||
|
* Variable $this->token.
|
||
|
*/
|
||
|
|
||
|
private $dataSet = [];
|
||
|
|
||
|
public function registerUser(&$message): bool {
|
||
|
|
||
|
/**
|
||
|
* Hauptfunktion der Klasse Registrator - steuert die Validierung und
|
||
|
* das Registrieren der Anfrage.
|
||
|
*/
|
||
|
|
||
|
if (!isset($this->db)) {
|
||
|
$this->log->e("There is no database");
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
$this->log->d("Validation started for token: {$_GET['token']}");
|
||
|
if ($this->checkToken() === true) {
|
||
|
if ($this->generateToken($token, 32) === true) {
|
||
|
if ($this->registerMXID() === true) {
|
||
|
$message = "Your temporary password is {$tmp_passwd}. Please
|
||
|
immediately change your password!";
|
||
|
if ($this->removeToken() === true) {
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
private function checkToken(): bool {
|
||
|
|
||
|
/**
|
||
|
* Läßt in der Tabelle requests schauen, ob es $_GET['token'] gibt.
|
||
|
* Speichert das zurückgegebene Array in der Variable $dataSet. Gibt
|
||
|
* die Datenbank eine Exception zurück oder ist das Array leer, gibt
|
||
|
* sie False, andernfals True zurück.
|
||
|
*/
|
||
|
|
||
|
try {
|
||
|
$this->dataSet = $this->db->getToken();
|
||
|
} catch (Exception $e) {
|
||
|
$this->log->e("Error: {$e->getMessage()}");
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
$count = count($this->dataSet);
|
||
|
if ($count === 0) {
|
||
|
$this->log->d("Token {$_GET['token']} not found in database");
|
||
|
} else if ($count > 1) {
|
||
|
$this->log->e("Error: More than one token found");
|
||
|
} else {
|
||
|
$this->log->d("Token found for nick: {$this->dataSet[1]}");
|
||
|
return true;
|
||
|
}
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
private function registerMXID(string $tmp_passwd): bool {
|
||
|
|
||
|
/**
|
||
|
* Registriert den Nutzer am Matrixserver. Dazu wird ein zufälliger
|
||
|
* String erzeugt und zusammen mit dem Nick ein CLI Tool aus dem Paket
|
||
|
* Paket von matrix-synapse aufgerufen.
|
||
|
*/
|
||
|
|
||
|
// $cmd = "register_new_matrix_user -u {$this->dataSet[1]} -p {$tmp_pass}";
|
||
|
// $response = system($cmd);
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
private function removeToken(): bool {
|
||
|
|
||
|
/**
|
||
|
* Läßt den Request aus der tabelle requests entfernen.
|
||
|
*/
|
||
|
|
||
|
$id = $this->dataSet[0];
|
||
|
$nick = $this->dataSet[1];
|
||
|
$token = $this->dataSet[2];
|
||
|
try {
|
||
|
$response = $this->db->deleteToken($id);
|
||
|
} catch (Exception $e) {
|
||
|
$this->log->e("Error: {$e->getMessage()}");
|
||
|
return false;
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
?>
|