forked from berhsi/matrix-register
131 lines
4.1 KiB
PHP
131 lines
4.1 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.
|
|
*
|
|
* Achtung: Die Variable hält in diesem Skript nicht das Token der
|
|
* Validierung, sondern das temporäre Passwort! Das ursprüngliche Token
|
|
* bleibt in $_GET['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->n("Validation started for token: {$_GET['token']}");
|
|
if ($this->checkToken() === true) {
|
|
if ($this->generateToken(24) === true) {
|
|
if ($this->registerMXID($this->token) === true) {
|
|
if ($this->removeRequest() === true) {
|
|
$nick = htmlspecialchars($this->dataSet[0]['nick']);
|
|
$message = "We have successfull registered your
|
|
account. Your temporary password is:<br/>{$this->token}
|
|
<br/>Please immediately change your password!";
|
|
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->e("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[0]['nick']}");
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
private function registerMXID(string $tmp_passwd): bool {
|
|
|
|
/**
|
|
* Registriert den Nutzer am Matrixserver. Dazu bekommt die Funktion
|
|
* einen zufällig erzeugten String als vorläufiges Passwort
|
|
* übergeben. Dieser wird zusammen mit dem Nick aus der Datenbank an
|
|
* den Befehl 'register_new_matrix_user' übergeben.
|
|
*/
|
|
|
|
$response = null;
|
|
$output = null;
|
|
$nick = escapeshellarg($this->dataSet[0]['nick']);
|
|
$pass = escapeshellarg($tmp_passwd);
|
|
$cmd = "register_new_matrix_user -u " . $nick . " -p " . $pass;
|
|
exec($cmd, $output, $response);
|
|
if ($response === 1) {
|
|
$this->log->n("Account for '{$nick}' successfull registered");
|
|
return true;
|
|
} else {
|
|
$this->log->e("Failed to register account for {$nick}");
|
|
}
|
|
return false;
|
|
}
|
|
|
|
private function removeRequest(): bool {
|
|
|
|
/**
|
|
* Läßt den Request aus der tabelle requests entfernen.
|
|
*/
|
|
|
|
$id = $this->dataSet[0]['id'];
|
|
$nick = $this->dataSet[0]['nick'];
|
|
$token = $this->dataSet[0]['token'];
|
|
try {
|
|
$response = $this->db->removeRequest($id);
|
|
} catch (Exception $e) {
|
|
$this->log->e("Error: {$e->getMessage()}");
|
|
return false;
|
|
}
|
|
$this->log->n("Request for {$nick} ($token) successfull removed");
|
|
return true;
|
|
}
|
|
|
|
}
|
|
|
|
?>
|