further implement cron.php; autoformat
- set Register_Accept to 6 internally as it reflects the same state as PendingSendRequest - cleanups
This commit is contained in:
99
cron.php
99
cron.php
@@ -1,9 +1,17 @@
|
||||
<?php
|
||||
// This file is meant to do tasks that failed on the first attempt
|
||||
|
||||
require_once("config.php");
|
||||
require_once("mail_templates.php");
|
||||
require_once("database.php");
|
||||
|
||||
$sql = "SELECT first_name, last_name, username, email, state FROM registrations WHERE admin_token = '" . $token
|
||||
. "' AND state = " . RegisterState::PendingAdminVerify . " LIMIT 1;";
|
||||
$sql = "SELECT id, first_name, last_name, username, email, state, verify_token FROM registrations "
|
||||
."WHERE state = ". RegisterState::PendingEmailSend
|
||||
. " OR state = " . RegisterState::PendingAdminSend
|
||||
. " OR state = " . RegisterState::PendingRegistration
|
||||
. " OR state = " . RegisterState::PendingSendRegistrationMail
|
||||
. " OR state = " . RegisterState::RegistrationDeclined
|
||||
. " OR state = " . RegisterState::AllDone . ";";
|
||||
foreach ($db->query($sql) as $row) {
|
||||
// will only be executed once
|
||||
$first_name = $row["first_name"];
|
||||
@@ -13,34 +21,75 @@ foreach ($db->query($sql) as $row) {
|
||||
$state = $row["state"];
|
||||
|
||||
try {
|
||||
|
||||
switch ($state) {
|
||||
case RegisterState::RegistrationAccepted:
|
||||
// Registration got accepted but registration failed
|
||||
case RegisterState::PendingEmailSend:
|
||||
$verify_url = $webroot . "/verify.php?t=" . $row["verify_token"];
|
||||
$success = send_mail_pending_verification(
|
||||
$homeserver,
|
||||
$row["first_name"] . " " . $row["last_name"],
|
||||
$row["email"],
|
||||
$row["verify_url"]);
|
||||
|
||||
// register user
|
||||
require_once("MatrixConnection.php");
|
||||
$mxConn = new MatrixConnection($homeserver, $access_token);
|
||||
|
||||
// generate a password with 8 characters
|
||||
$password = bin2hex(openssl_random_pseudo_bytes(4));
|
||||
|
||||
$res = $mxConn->register($username, $password, $shared_secret);
|
||||
if ($res) {
|
||||
// send registration_success
|
||||
send_mail_registration_success($homeserver, $first_name . " " . $last_name, $email, $username, $password, $howToURL);
|
||||
} else {
|
||||
send_mail_registration_allowed_but_failed($homeserver, $first_name . " " . $last_name, $email);
|
||||
if ($success) {
|
||||
$db->exec("UPDATE registrations SET state = " . RegisterState::PendingEmailVerify)
|
||||
. " WHERE id = " . $row["id"] . ";");
|
||||
} else {
|
||||
throw new Exception("Could not send mail to ".$row["first_name"]." ".$row["last_name"]."(".$row["id"].")");
|
||||
}
|
||||
break;
|
||||
case RegisterState::PendingAdminSend:
|
||||
require_once("../MatrixConnection.php");
|
||||
$adminUrl = $webroot . "/verify_admin.php?t=" . $admin_token;
|
||||
$mxConn = new MatrixConnection($homeserver, $access_token);
|
||||
$mxMsg = new MatrixMessage();
|
||||
$mxMsg->set_body($first_name . ' ' . $last_name . "möchte sich registrieren und hat folgende Notiz hinterlassen:\r\n"
|
||||
. $note . "\r\n"
|
||||
. "Zum Bearbeiten hier klicken:\r\n" . $adminUrl);
|
||||
$mxMsg->set_formatted_body($first_name . ' ' . $last_name . " möchte sich registrieren und hat folgende Notiz hinterlassen:<br />"
|
||||
. $note . "<br />"
|
||||
. "Zum Bearbeiten <a href=\"". $adminUrl . "\">hier</a> klicken");
|
||||
$mxMsg->set_type("m.text");
|
||||
$mxMsg->set_body("Fehler beim Registrieren von " . $first_name . " " . $last_name . ".");
|
||||
$mxConn->send($mxMsg);
|
||||
throw new Exception($language["REGISTRATION_FAILED"]);
|
||||
}
|
||||
break;
|
||||
$response = $mxConn->send($register_room, $mxMsg);
|
||||
|
||||
case RegisterState::RegistrationDeclined:
|
||||
break;
|
||||
if ($response) {
|
||||
$db->exec("UPDATE registrations SET state = " . RegisterState::PendingAdminVerify
|
||||
. " WHERE id = " . $row["id"] . "';");
|
||||
|
||||
send_mail_pending_approval($homeserver, $first_name . " " . $last_name, $email);
|
||||
} else {
|
||||
throw new Exception("Could not send notification for ".$row["first_name"]." ".$row["last_name"]."(".$row["id"].") to admins.");
|
||||
}
|
||||
break;
|
||||
case RegisterState::PendingRegistration:
|
||||
// Registration got accepted but registration failed
|
||||
|
||||
// register user
|
||||
require_once("MatrixConnection.php");
|
||||
$mxConn = new MatrixConnection($homeserver, $access_token);
|
||||
|
||||
// generate a password with 8 characters
|
||||
$password = bin2hex(openssl_random_pseudo_bytes(4));
|
||||
|
||||
$res = $mxConn->register($username, $password, $shared_secret);
|
||||
if ($res) {
|
||||
// send registration_success
|
||||
send_mail_registration_success($homeserver, $first_name . " " . $last_name, $email, $username, $password, $howToURL);
|
||||
} else {
|
||||
send_mail_registration_allowed_but_failed($homeserver, $first_name . " " . $last_name, $email);
|
||||
$mxMsg = new MatrixMessage();
|
||||
$mxMsg->set_type("m.text");
|
||||
$mxMsg->set_body("Fehler beim Registrieren von " . $first_name . " " . $last_name . ".");
|
||||
$mxConn->send($mxMsg);
|
||||
throw new Exception($language["REGISTRATION_FAILED"]);
|
||||
}
|
||||
break;
|
||||
case RegisterState::PendingSendRegistrationMail:
|
||||
print ("Error: Unhandled state: PendingSendRegistrationMail for " . $first_name . " " . $last_name . " (" . $username . ")");
|
||||
break;
|
||||
case RegisterState::RegistrationDeclined:
|
||||
case RegisterState::AllDone:
|
||||
// do reqular cleanup
|
||||
break;
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
print("Error while handling cron for " . $first_name . " " . $last_name . " (" . $username . ")");
|
||||
|
||||
Reference in New Issue
Block a user