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 = $webroot . "/verify.php?t=" . $row["verify_token"]; $success = send_mail_pending_verification( $homeserver, $row["first_name"] . " " . $row["last_name"], $row["email"], $row["verify_url"]); 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=" . $row["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" . $row["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:
" . $row["note"] . "
" . "Zum Bearbeiten hier klicken"); $mxMsg->set_type("m.text"); $response = $mxConn->send($register_room, $mxMsg); 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($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()); } } ?>