matrix-register/lib/register.php

118 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($token) === true) {
$message = "Your temporary password is {$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->deleteToken($id);
} catch (Exception $e) {
$this->log->e("Error: {$e->getMessage()}");
return false;
}
return true;
}
}
?>