conn); $user_manager = new UserManager($db->conn, $mail_manager); $tracking_manager = new TrackingManager($db->conn); // Handle request try { session_start(); $_SESSION["token"] = $_SESSION["token"] ?? Util::generate_csrf_token(); $_POST = Util::parse_post(); // Update database $db->auto_install($mail_manager, $user_manager, $tracking_manager); $db->auto_migrate(); // Dispatch request $dispatcher = new ActionDispatcher(); // GET actions $dispatcher->register_action(new StartSessionAction($config, $user_manager)); $dispatcher->register_action(new GetUserDataAction($user_manager)); $dispatcher->register_action(new ListTrackingsAction($tracking_manager)); $dispatcher->register_action(new ValidatePasswordResetTokenAction($user_manager)); // POST actions $dispatcher->register_action(new RegisterAction($user_manager)); $dispatcher->register_action(new LoginAction($user_manager)); $dispatcher->register_action(new LogoutAction()); $dispatcher->register_action(new ResendVerifyEmailAction($user_manager)); $dispatcher->register_action(new VerifyEmailAction($user_manager)); $dispatcher->register_action(new UpdateEmailAction($user_manager)); $dispatcher->register_action(new ToggleNotificationsAction($user_manager)); $dispatcher->register_action(new UpdatePasswordAction($user_manager)); $dispatcher->register_action(new SendPasswordResetAction($user_manager)); $dispatcher->register_action(new ResetPasswordAction($user_manager)); $dispatcher->register_action(new UserDeleteAction($user_manager)); $dispatcher->register_action(new AddTrackingAction($tracking_manager, $mediawiki)); $dispatcher->register_action(new RemoveTrackingAction($tracking_manager)); // CLI actions $cli_actions = [ new UpdateTrackingsCliAction($config, $db->conn, $tracking_manager, $mediawiki, $mail_manager), new ProcessEmailQueueCliAction($config, $mail_manager), ]; $dispatcher->register_action($cli_actions[0]); $dispatcher->register_action($cli_actions[1]); $dispatcher->register_action(new EmulateCronCliAction($cli_actions)); // Dispatch if (isset($_GET["action"])) $response = $dispatcher->handle(ActionMethod::GET); else if (isset($_POST["action"])) $response = $dispatcher->handle(ActionMethod::POST); else if ($argc > 1) $response = $dispatcher->handle(ActionMethod::CLI); else $response = Response::satisfied(); } catch (Exception $exception) { $response = Response::unsatisfied("An unexpected error occurred. Please try again later."); $logger->error("An unexpected error occurred. Please try again later.", ["cause" => $exception]); } // Respond header("Content-type:application/json;charset=utf-8"); exit(json_encode([ "payload" => $response->payload, "satisfied" => $response->satisfied, "token" => $_SESSION["token"] ]));