addRoute('GET', '/', function(Request $req, Response $res) use($container) { $twig = $container->get('twig'); $postModel = $container->get('postModel'); $posts = $postModel->getPosts(); $res->getBody()->write( $twig->render("blogmain", [ "posts" => $posts ]) ); return $res; }); /** * Zeigt das Formular zum Erstellen eines neuen Blogposts (nur für eingeloggte Nutzer). * * @route GET /post/new * @param Request $req Die HTTP-Anfrage. * @param Response $res Die HTTP-Antwort. * @return Response Die Antwort mit gerendertem HTML-Inhalt. */ $router->addRoute('GET', '/post/new', function(Request $req, Response $res) use($container) { if(!AuthHelper::isLoggedIn()) { return $res->setStatus(403)->getBody()->write("403 - Nicht erlaubt."); } $twig = $container->get('twig'); $res->getBody()->write( $twig->render("post_new") ); return $res; }); /** * Verarbeitet das Formular zum Erstellen eines neuen Blogposts. * * @route POST /post/new * @param Request $req Die HTTP-Anfrage. * @param Response $res Die HTTP-Antwort. * @return Response Die Antwort mit Umleitung oder Fehlerstatus. */ $router->addRoute('POST', '/post/new', function(Request $req, Response $res) use($container) { if(!AuthHelper::isLoggedIn()) { return $res->setStatus(403)->getBody()->write("403 - Nicht erlaubt."); } if(!authMiddleware::validateCSRFToken($req)) { return $res->setStatus(419)->getBody()->write("419 - Ungültiger CSRF-Token."); } $title = $req->getPost('title'); $content = $req->getPost('content'); $authorId = $_SESSION['user']['id'] ?? null; if(!$title || !$content || !$authorId) { return $res->setStatus(400)->getBody()->write("400 - Fehlende Felder."); } $postModel = $container->get('postModel'); $postModel->createPost($title, $content, $authorId); return $res->redirect('/'); }); /** * Zeigt einen einzelnen Blogpost basierend auf der ID. * * @route GET /post/{id} * @param Request $req Die HTTP-Anfrage. * @param Response $res Die HTTP-Antwort. * @param string $id Die ID des Blogposts. * @return Response Die Antwort mit gerendertem Blogpost. */ $router->addRoute('GET', '/post/{id}', function(Request $req, Response $res, $id) use($container) { $twig = $container->get('twig'); $postModel = $container->get('postModel'); $post = $postModel->getPost($id); $res->getBody()->write( $twig->render("blogpost", [ "post" => $post ]) ); return $res; }); /** * Speichert Änderungen an einem Blogpost (nur für eingeloggte Nutzer). * * @route POST /post/{id}/edit * @param Request $req Die HTTP-Anfrage. * @param Response $res Die HTTP-Antwort. * @param string $id Die ID des Blogposts. * @return Response Die Antwort mit Umleitung oder Fehlerstatus. */ $router->addRoute('POST', '/post/{id}/edit', function(Request $req, Response $res, $id) use($container) { if(!AuthHelper::isLoggedIn()) { return $res->setStatus(403)->getBody()->write("403 - Nicht erlaubt."); } if (!authMiddleware::validateCSRFToken($req)) { return $res->setStatus(419)->getBody()->write("419 - Ungültiger CSRF-Token."); } $content = $req->getPost('content'); $postModel = $container->get('postModel'); $post = $postModel->getPost($id); if (!$post) { return $res->setStatus(404)->getBody()->write("404 - Post nicht gefunden."); } $postModel->updatePostContent($id, $content); return $res->redirect('/post/' . $id); }); /** * Löscht einen Blogpost basierend auf der ID (nur für eingeloggte Nutzer). * * @route POST /post/delete/{id} * @param Request $req Die HTTP-Anfrage. * @param Response $res Die HTTP-Antwort. * @param string $id Die ID des Blogposts. * @return Response Die Antwort mit Umleitung oder Fehlerstatus. */ $router->addRoute('POST', '/post/delete/{id}', function(Request $req, Response $res, $id) use($container) { if(!AuthHelper::isLoggedIn()) { return $res->setStatus(403)->getBody()->write("403 - Nicht erlaubt."); } if (!authMiddleware::validateCSRFToken($req)) { return $res->setStatus(419)->getBody()->write("419 - Ungültiger CSRF-Token."); } $postModel = $container->get('postModel'); $post = $postModel->getPost($id); if (!$post) { return $res->setStatus(404)->getBody()->write("404 - Post nicht gefunden."); } $postModel->deletePost($id); return $res->redirect('/'); }); /** * Zeigt die Login-Seite. * * @route GET /login * @param Request $req Die HTTP-Anfrage. * @param Response $res Die HTTP-Antwort. * @return Response Die Antwort mit gerendertem Loginformular. */ $router->addRoute('GET', '/login', function(Request $req, Response $res) use($container) { $twig = $container->get('twig'); $res->getBody()->write( $twig->render("login") ); return $res; }); /** * Verarbeitet die Login-Anfrage und authentifiziert den Nutzer. * * @route POST /login * @param Request $req Die HTTP-Anfrage. * @param Response $res Die HTTP-Antwort. * @return Response Die Antwort mit Umleitung oder Fehlerstatus. */ $router->addRoute('POST', '/login', function(Request $req, Response $res) use($container) { $twig = $container->get('twig'); $userModel = $container->get('userModel'); $username = $req->getPost('username'); $password = $req->getPost('password'); if(!authMiddleware::validateCSRFToken($req)) { return $res ->setStatus(419) ->getBody() ->write("419 - Session abgelaufen oder ungültiger CSRF-Token.") ->send(); } if(!AuthHelper::login($username, $password)) { $res ->setStatus(401) ->getBody() ->write("401 - Unauthorized: Invalid login information."); return $res; } return $res->redirect('/'); }); /** * Führt den Logout des Nutzers aus. * * @route GET /logout * @param Request $req Die HTTP-Anfrage. * @param Response $res Die HTTP-Antwort. * @return Response Die Antwort mit Umleitung zur Startseite. */ $router->addRoute('GET', '/logout', function(Request $req, Response $res) use($container) { AuthHelper::logout(); return $res->redirect('/'); });