query($sql) as $row) { $first_name = $row["first_name"]; $last_name = $row["last_name"]; $username = $row["username"]; $email = $row["email"]; $state = $row["state"]; try { switch ($state) { case RegisterState::PendingEmailSend: $verify_url = $config["webroot"] . "/verify.php?t=" . $row["verify_token"]; $success = send_mail_pending_verification( $config["homeserver"], $row["first_name"] . " " . $row["last_name"], $row["email"], $verify_url); if ($success) { $mx_db->setRegistrationStateById(RegisterState::PendingEmailVerify, $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(__DIR__ . "/MatrixConnection.php"); $adminUrl = $config["webroot"] . "/verify_admin.php?t=" . $row["admin_token"]; $mxConn = new MatrixConnection($config["homeserver"], $config["access_token"]); $mxMsg = new MatrixMessage(); $mxMsg->set_body(strtr($language["MSG_USER_WANTS_REGISTER"], [ "@name" => (strlen($first_name . $last_name) > 0 ? $first_name . " " . $last_name : $username), "@note" => $note, "@adminUrl" => $adminUrl ])); if (isset($language["MSG_USER_WANTS_REGISTER_FORMATTED"])) { $mxMsg->set_formatted_body(strtr($language["MSG_USER_WANTS_REGISTER_FORMATTED"], [ "@name" => (strlen($first_name . $last_name) > 0 ? $first_name . " " . $last_name : $username), "@note" => $note, "@adminUrl" => $adminUrl ])); } $mxMsg->set_type("m.text"); $response = $mxConn->send($config["register_room"], $mxMsg); if ($response) { $mx_db->setRegistrationStateById(RegisterState::PendingAdminVerify, $row["id"]); send_mail_pending_approval($config["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 $password = $mx_db->addUser($row["first_name"], $row["last_name"], $row["username"], $row["email"]); if ($password != NULL) { // send registration_success $res = send_mail_registration_success( $config["homeserver"], strlen($first_name . $last_name) > 0 ? $first_name . " " . $last_name : $username, $email, $username, $password, $config["howToURL"] ); if ($res) { $mx_db->setRegistrationStateById(RegisterState::AllDone, $row["id"]); } else { $mx_db->setRegistrationStateById(RegisterState::PendingSendRegistrationMail, $row["id"]); } } else { send_mail_registration_allowed_but_failed($config["homeserver"], $first_name . " " . $last_name, $email); $mxMsg = new MatrixMessage(); $mxMsg->set_type("m.text"); $mxMsg->set_body(strtr($language["REGISTRATION_FAILED_FOR"], [ "@name" => strlen($first_name . $last_name) > 0 ? $first_name . " " . $last_name : $username, ])); $mxConn->send($config["register_room"], $mxMsg); throw new Exception($language["REGISTRATION_FAILED"]); } break; case RegisterState::PendingSendRegistrationMail: print ("Error: Unhandled state: PendingSendRegistrationMail for " . $first_name . " " . $last_name . " (" . $username . ")\n"); 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 . ")\n"); print($e->getMessage()); } } ?>