From 89e3b95ca2e11ec037f7b5d972ef93019a549411 Mon Sep 17 00:00:00 2001 From: Lukas Forsberg Date: Wed, 22 Oct 2025 21:37:28 +0200 Subject: [PATCH] added better login support --- src/database/database.cpp | 1 - src/database/database.hpp | 8 +++++--- src/login/login.cpp | 13 ++++++++----- src/main.cpp | 15 ++++++++++++--- 4 files changed, 25 insertions(+), 12 deletions(-) diff --git a/src/database/database.cpp b/src/database/database.cpp index ea300db..4b55933 100644 --- a/src/database/database.cpp +++ b/src/database/database.cpp @@ -1,4 +1,3 @@ -#include "crow.h" #include "utils.hpp" #include "database.hpp" #include diff --git a/src/database/database.hpp b/src/database/database.hpp index 6508740..adf2964 100644 --- a/src/database/database.hpp +++ b/src/database/database.hpp @@ -8,6 +8,7 @@ #include #include #include +#include "crow.h" class Database { @@ -28,7 +29,7 @@ public: template std::optional getSqlData(sqlite3_stmt* stmt, int i) { - if ((stmt == nullptr) || (sqlite3_step(stmt) != SQLITE_ROW)) + if (stmt == nullptr) return {}; if constexpr (std::is_same_v) { @@ -51,9 +52,10 @@ public: template std::optional> get(const std::string sql, const QueryData& data){ sqlite3_stmt* stmt = bind(sql, data); - if ((stmt == nullptr) || (sqlite3_step(stmt) != SQLITE_ROW)) + if ( (stmt == nullptr) || (sqlite3_step(stmt) != SQLITE_ROW ) ) { + CROW_LOG_ERROR << "Failed to run statement: " << sqlite3_errmsg(m_db); return {}; - + } std::optional v1 = getSqlData(stmt, 0); std::optional v2 = getSqlData(stmt, 1); diff --git a/src/login/login.cpp b/src/login/login.cpp index 88510b0..f2bb85c 100644 --- a/src/login/login.cpp +++ b/src/login/login.cpp @@ -82,10 +82,11 @@ std::string random_string(size_t length) { std::optional loginUser(const std::string& username, const std::string& password) { - auto sql = "SELECT id password_hash FROM users WHERE username = '?' LIMIT 1;"; + auto sql = "SELECT id, password_hash FROM users WHERE username = ? LIMIT 1;"; auto db = Database(); - if (!db.open()) + if (!db.open()){ return {}; + } auto opt_pair = db.get(sql, {username}); if (opt_pair.has_value()) { @@ -131,7 +132,7 @@ bool initLogin(crow::SimpleApp& app) return false; } - // createUser("lukas", "Trollar%4928"); + // createUser("lukas", "Trollar4928"); CROW_ROUTE(app, "/login").methods("GET"_method) ([](const crow::request& req){ @@ -176,13 +177,15 @@ bool initLogin(crow::SimpleApp& app) std::optional userId = loginUser(username, password); - if (!userId.has_value()) return crow::response(401, "Invalid credentials"); + if (!userId.has_value()) { + return crow::response(401, "Invalid credentials"); + } // set user id sessions[session_id].user_id = std::to_string(userId.value()); crow::response res; - res.add_header("HX-Redirect", "/dashboard"); // htmx redirect + res.add_header("HX-Redirect", "/templates/dashboard.html"); // htmx redirect return res; }); diff --git a/src/main.cpp b/src/main.cpp index 3893982..56385f2 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -16,15 +16,24 @@ int main() { crow::SimpleApp app; CROW_ROUTE(app, "/")([] { - return crow::response(utils::loadFile("templates/index.html")); + auto data = utils::loadFile("templates/index.html"); + if (data.empty()) + return crow::response(404); + return crow::response(data); }); CROW_ROUTE(app, "/static/")([](const std::string& file) { - return crow::response(utils::loadFile("static/" + file)); + auto data = utils::loadFile("static/" + file); + if (data.empty()) + return crow::response(404); + return crow::response(data); }); CROW_ROUTE(app, "/templates/")([](const std::string& file) { - return crow::response(utils::loadFile("templates/" + file)); + auto data = utils::loadFile("templates/" + file); + if (data.empty()) + return crow::response(404); + return crow::response(data); }); // Static file redirector