forked from berhsi/matrix-register
117 lines
3.5 KiB
PHP
117 lines
3.5 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->d("Validation started for token: {$_GET['token']}");
|
|
if ($this->checkToken() === true) {
|
|
if ($this->generateToken(32) === true) {
|
|
if ($this->registerMXID($this->token) === true) {
|
|
$message = "Your temporary password is {$this->token}. Please
|
|
immediately change your password!";
|
|
if ($this->removeRequest() === 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[0]['nick']}");
|
|
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[0]['nick']} -p {$tmp_pass}";
|
|
// $response = system($cmd);
|
|
return true;
|
|
}
|
|
|
|
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;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
}
|
|
|
|
?>
|