get('home', '', [HomeController::class, 'getHome']); Container::$routeCollection->group('login', function (RouteCollection $routeCollection) { $routeCollection->get('login', '', [LoginController::class, 'getLoginForm']); $routeCollection->post('login-action', '', [LoginController::class, 'login']); $routeCollection->get('login.google', 'google', [LoginController::class, 'getGoogleLoginRedirect']); $routeCollection->get('login.google-action', 'google/code', [LoginController::class, 'loginWithGoogle']); }); Container::$routeCollection->group('oauth', function (RouteCollection $routeCollection) { $routeCollection->get('oauth.auth', 'auth', [OAuthAuthController::class, 'auth']); $routeCollection->post('oauth.token', 'token', [OAuthController::class, 'getToken']); $routeCollection->get('oauth.userinfo', 'userinfo', [OAuthController::class, 'getUserInfo']); $routeCollection->get('oauth.config', '.well-known/openid-configuration', [OAuthController::class, 'getConfig']); $routeCollection->get('oauth.certs', 'certs', [OAuthController::class, 'getCerts']); }); Container::$routeCollection->group('password', function (RouteCollection $routeCollection) { $routeCollection->get('password.requestReset', 'requestReset', [LoginController::class, 'getRequestPasswordResetForm']); $routeCollection->post('password.requestReset-action', 'requestReset', [LoginController::class, 'requestPasswordReset']); $routeCollection->get('password.requestReset.success', 'requestReset/success', [LoginController::class, 'getRequestPasswordResetSuccess']); $routeCollection->get('password.reset', 'reset/{token}', [LoginController::class, 'getResetPasswordForm']); $routeCollection->post('password.reset-action', 'reset/{token}', [LoginController::class, 'resetPassword']); }); Container::$routeCollection->get('logout', 'logout', [LoginController::class, 'logout']); Container::$routeCollection->group('account', function (RouteCollection $routeCollection) { $routeCollection->get('account', '', [UserController::class, 'getAccount']); $routeCollection->post('account-action', '', [UserController::class, 'saveAccount']); $routeCollection->get('account.googleConnect', 'googleConnect', [UserController::class, 'getGoogleConnectRedirect']); $routeCollection->get('account.googleConnect-confirm', 'googleConnect/code', [UserController::class, 'getGoogleConnectConfirm']); $routeCollection->post('account.googleConnect-action', 'googleConnect', [UserController::class, 'connectGoogle']); $routeCollection->get('account.googleDisconnect', 'googleDisconnect', [UserController::class, 'getGoogleDisconnectConfirm']); $routeCollection->post('account.googleDisconnect-action', 'googleDisconnect', [UserController::class, 'disconnectGoogle']); $routeCollection->get('account.googleAuthenticate', 'googleAuthenticate', [UserController::class, 'getGoogleAuthenticateRedirect']); $routeCollection->get('account.googleAuthenticate-action', 'googleAuthenticate/code', [UserController::class, 'authenticateWithGoogle']); }); Container::$routeCollection->get('searchUser', 'searchUser', [UserSearchController::class, 'searchUser']); Container::$routeCollection->group('now', function (RouteCollection $routeCollection) { $routeCollection->get('now.event', '', [EventRedirectController::class, 'getEvent']); $routeCollection->get('now.transactions.new', 'transaction', [EventRedirectController::class, 'getEventNewTransaction']); }); Container::$routeCollection->group('communities', function (RouteCollection $routeCollection) { $routeCollection->get('community.new', 'new', [CommunityController::class, 'getCommunityNew']); $routeCollection->post('community.new-action', 'new', [CommunityController::class, 'saveCommunity']); $routeCollection->group('{communitySlug}', function (RouteCollection $routeCollection) { $routeCollection->get('community', '', [CommunityController::class, 'getCommunityHome']); $routeCollection->get('community.settings', 'settings', [CommunityController::class, 'getCommunitySettings']); $routeCollection->get('community.edit', 'edit', [CommunityController::class, 'getCommunityEdit']); $routeCollection->post('community.edit-action', 'edit', [CommunityController::class, 'saveCommunity']); $routeCollection->post('community.delete-action', 'delete', [CommunityController::class, 'deleteCommunity']); $routeCollection->get('community.members', 'members', [CommunityController::class, 'getMembersEdit']); $routeCollection->post('community.members.new-action', 'members/new', [CommunityController::class, 'saveMember']); $routeCollection->post('community.members.edit-action', 'members/edit', [CommunityController::class, 'saveMember']); $routeCollection->post('community.members.delete-action', 'members/delete', [CommunityController::class, 'deleteMember']); $routeCollection->get('community.currencies', 'currencies', [CommunityController::class, 'getCurrenciesEdit']); $routeCollection->post('community.currencies.new-action', 'currencies/new', [CommunityController::class, 'saveCurrency']); $routeCollection->post('community.currencies.edit-action', 'currencies/edit', [CommunityController::class, 'saveCurrency']); $routeCollection->post('community.currencies.delete-action', 'currencies/delete', [CommunityController::class, 'deleteCurrency']); $routeCollection->group('currencyExchangeRates', function (RouteCollection $routeCollection) { $routeCollection->get('community.currencyExchangeRates', '{code}', [CommunityController::class, 'getCurrencyExchangeRates']); $routeCollection->post('community.currencyExchangeRates.new-action', '{code}/new', [CommunityController::class, 'saveCurrencyExchangeRate']); $routeCollection->post('community.currencyExchangeRates.edit-action', '{code}/edit', [CommunityController::class, 'saveCurrencyExchangeRate']); $routeCollection->post('community.currencyExchangeRates.delete-action', '{code}/delete', [CommunityController::class, 'deleteCurrencyExchangeRate']); }); $routeCollection->group('transactions', function (RouteCollection $routeCollection) { $routeCollection->get('community.transactions', '', [TransactionController::class, 'getTransactions']); $routeCollection->get('community.transactions.new', 'new', [TransactionController::class, 'getTransactionEdit']); $routeCollection->post('community.transactions.new-action', 'new', [TransactionController::class, 'saveTransaction']); $routeCollection->get('community.transactions.edit', '{transactionId}', [TransactionController::class, 'getTransactionEdit']); $routeCollection->post('community.transactions.edit-action', '{transactionId}', [TransactionController::class, 'saveTransaction']); $routeCollection->post('community.transactions.delete-action', '{transactionId}/delete', [TransactionController::class, 'deleteTransaction']); }); $routeCollection->group('events', function (RouteCollection $routeCollection) { $routeCollection->get('community.events', '', [EventController::class, 'getEvents']); $routeCollection->get('community.events.new', 'new', [EventController::class, 'getEventEdit']); $routeCollection->post('community.events.new-action', 'new', [EventController::class, 'saveEvent']); $routeCollection->get('community.events.search', 'search', [EventController::class, 'searchEvent']); $routeCollection->group('{eventSlug}', function (RouteCollection $routeCollection) { $routeCollection->get('community.event', '', [EventController::class, 'getEvent']); $routeCollection->get('community.event.edit', 'edit', [EventController::class, 'getEventEdit']); $routeCollection->post('community.event.edit-action', 'edit', [EventController::class, 'saveEvent']); $routeCollection->post('community.event.delete-action', 'delete', [EventController::class, 'deleteEvent']); }); }); }); }); Container::$sessionHandler = new DatabaseSessionHandler( Container::$dbConnection, 'sessions', new DateTime('-7 days') ); session_set_save_handler(Container::$sessionHandler, true); session_start([ 'gc_probability' => 0, // old sessions are deleted by MaintainDatabaseCommand 'cookie_lifetime' => 0, 'cookie_path' => '/', 'cookie_httponly' => true, 'cookie_samesite' => 'Lax' ]); Container::$request = new Request( $_SERVER['REQUEST_SCHEME'] . '://' . $_SERVER['HTTP_HOST'], $_GET, $_POST, getallheaders(), new Session($_SESSION), new UserRepository() ); if (!Container::$request->session()->has('anti_csrf_token')) { Container::$request->session()->set('anti_csrf_token', bin2hex(random_bytes(16))); } $appConfig = [ 'antiCsrfTokenName' => 'anti_csrf_token', 'antiCsrfTokenErrorResponse' => ['error' => 'no_valid_anti_csrf_token'], 'antiCsrfTokenExceptions' => ['/oauth/token'], 'loginRouteId' => 'login', 'error404View' => 'error/404', 'error500View' => 'error/500' ]; $httpReponse = new HttpResponse( Container::$request, Container::$dbConnection, Container::$routeCollection, $appConfig, $_SERVER['REQUEST_METHOD'], $_SERVER['REQUEST_URI'] ); $httpReponse->render();