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:
{$this->token}
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']; 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; } } ?>