From d758bbd62ca4fea887f064c595f8f2077417fd5b Mon Sep 17 00:00:00 2001 From: Lukas Forsberg Date: Tue, 17 Feb 2026 17:48:37 +0100 Subject: [PATCH] added favicon --- .vscode/tasks.json | 12 +++++++--- CMakeLists.txt | 2 +- assets/favicon.ico | Bin 0 -> 977 bytes assets/favicon.png | Bin 0 -> 9295 bytes assets/settings.json | 4 ++-- frontend/src/app.html | 1 + frontend/static/favicon.ico | Bin 0 -> 977 bytes source/cors.h | 29 ------------------------ source/json_settings.cpp | 2 +- source/json_settings.h | 4 ++-- source/login/login.cpp | 3 +-- source/login/login.hpp | 4 ++-- source/main.cpp | 36 +++++++++++++++++++++++------- source/shadowrun/ShadowrunApi.cpp | 2 +- source/shadowrun/ShadowrunApi.hpp | 6 ++--- source/utils.cpp | 1 + source/utils.hpp | 5 ++++- 17 files changed, 56 insertions(+), 55 deletions(-) create mode 100644 assets/favicon.ico create mode 100644 assets/favicon.png create mode 100644 frontend/static/favicon.ico delete mode 100644 source/cors.h diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 2c7326f..c1b806a 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -4,7 +4,7 @@ { "label": "build", "type": "shell", - "command": "cmake -S . -B build && cmake --build build", + "command": "cmake -S . -B build -DCMAKE_EXPORT_COMPILE_COMMANDS=ON && cmake --build build && cp build/compile_commands.json compile_commands.json", "group": "build", "problemMatcher": [ "$gcc" @@ -13,7 +13,7 @@ { "label": "build release", "type": "shell", - "command": "cmake -S . -B build -DCMAKE_BUILD_TYPE=Release && cmake --build build", + "command": "cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_EXPORT_COMPILE_COMMANDS=ON && cmake --build build && cp build/compile_commands.json compile_commands.json ", "group": "build", "problemMatcher": [ "$gcc" @@ -26,6 +26,12 @@ "options": { "cwd": "frontend" } - } + }, + { + "label": "clean", + "type": "shell", + "command": "rm -rf build/*", + "group": "build", + }, ] } \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 49e7a73..4c0032d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -23,7 +23,7 @@ endif() file(GLOB_RECURSE ASSETS_FILES "${CMAKE_SOURCE_DIR}/assets/*") file(GLOB_RECURSE FRONTEND_FILES "${CMAKE_SOURCE_DIR}/frontend/build/*") -foreach(file IN LISTS STATIC_FILES) +foreach(file IN LISTS ASSETS_FILES) file(RELATIVE_PATH rel_path "${CMAKE_SOURCE_DIR}" "${file}") configure_file("${file}" "${CMAKE_BINARY_DIR}/${rel_path}" COPYONLY) endforeach() diff --git a/assets/favicon.ico b/assets/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..ac282d38fa55c2b84278d2c77f267ac83f4f9c2e GIT binary patch literal 977 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 BoLK+> literal 0 HcmV?d00001 diff --git a/assets/settings.json b/assets/settings.json index 5c01519..4f0edd5 100644 --- a/assets/settings.json +++ b/assets/settings.json @@ -1,5 +1,5 @@ { "http_port" : 3010, - "db_path": "/var/lib/shadowrun-server/shadowrun.db", - "url": "*" + "db_path": "shadowrun.db", + "domain": "*" } \ No newline at end of file diff --git a/frontend/src/app.html b/frontend/src/app.html index f273cc5..b9c45d8 100644 --- a/frontend/src/app.html +++ b/frontend/src/app.html @@ -3,6 +3,7 @@ + %sveltekit.head% diff --git a/frontend/static/favicon.ico b/frontend/static/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..ac282d38fa55c2b84278d2c77f267ac83f4f9c2e GIT binary patch literal 977 zcmV;?11|gk0096201yxW0000W0J{SK02TlM0EtjeM-2)Z3IG5A4M|8uQUCw|5C8xG z5C{eU001BJ|6u?C1A<9JK~#90U6WgA9AzBE&v%(`W_M}g3>T{lrFt&=R|rd2rhb|g~P3?v=IV(!<~u@8^b#`-%~yS-rHpJbx)B6{|20{~e@ z6kSNAI$E=ToN*kL>GNrJdNJ2q1Td70Hdv;3D&n)X^^HMavWaKkJ0$DYEzF%xAOH5T zIl3|==l1Mwz2QQpuED_JbIaaLZ^T<{Sp<$(B<|FpR~JjLvRdbJqyC0iI-p$^japuD zB%hgjacJjDTP4OPZ=<~D2g)EX2-pWpwCYGQv^~zKg9w~}`4H!d!{9SsabTuUx|HY2 zt10BC#l+MdoD~YIu4+ItUSqPr`>mvxxlfw~A?^c35J?b`!MQ!@2idbFJy*{W&JrsR zyi$S-!Pq=NY0aA&3|UvJ1TUBBSGu+^12M(~19Bj?&}8uB0u$>lfjf+m=1j^g0M_q| z+B8#_A9Rb~T&#}v24KG!fC^qSR!08v6VH-D;l z=#;YEQQM9`3;^#WoVJf$>-)ibw%j{gnty loginUser(const std::string& username, const std::str return {}; } -void initLogin(crow::App& app) -{ +void initLogin(crow::App& app){ createUser("lukas", "Trollar4928"); diff --git a/source/login/login.hpp b/source/login/login.hpp index 690ffa7..a7ea584 100644 --- a/source/login/login.hpp +++ b/source/login/login.hpp @@ -4,11 +4,11 @@ #pragma once #include -#include "cors.h" +#include "crow/middlewares/cors.h" namespace login { -void initLogin(crow::App& app); +void initLogin(crow::App& app); std::optional isLoggedIn(const crow::request& req); diff --git a/source/main.cpp b/source/main.cpp index 92ec944..a06625a 100644 --- a/source/main.cpp +++ b/source/main.cpp @@ -1,18 +1,24 @@ #include +#include "crow/middlewares/cors.h" #include #include "json_settings.h" #include "utils.hpp" -#include "cors.h" #include "login.hpp" #include "ShadowrunApi.hpp" #include "databasepool.h" using namespace std; -AppSettings::Settings settings = AppSettings::load(); - int main() { - crow::App app; + AppSettings::Settings settings = AppSettings::load(); + crow::App app; + + // init cors + auto& cors = app.get_middleware(); + cors.global() + .headers("Content-Type", "Authorization") + .methods("GET"_method, "POST"_method, "PUT"_method, "DELETE"_method, "OPTIONS"_method) + .origin(settings.domain); // create global database dbpool = std::make_unique(settings.db_path); @@ -33,10 +39,25 @@ int main() { return 1; } + // options path + CROW_ROUTE(app, "/") .methods("OPTIONS"_method) + ([&settings](const crow::request&, crow::response& res, const std::string&) { + res.add_header("Access-Control-Allow-Origin", settings.domain); + res.add_header("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS"); + res.add_header("Access-Control-Allow-Headers", "Content-Type, Authorization"); + res.add_header("Access-Control-Max-Age", "86400"); // Cache preflight for 24h + res.code = 204; + res.end(); + }); + // Root route CROW_ROUTE(app, "/")([&]() { - auto data = utils::read_file(utils::build_dir / "index.html"); - return crow::response(200, "text/html", data); + return utils::getFile(utils::build_dir / "index.html"); + }); + + CROW_ROUTE(app, "/favicon.ico").methods(crow::HTTPMethod::Get) + ([&]() { + return utils::getFile(utils::assets_dir / "favicon.ico"); }); shadowrun::initApi(app); @@ -45,8 +66,7 @@ int main() { // asssets is not svelte generated CROW_ROUTE(app, "/assets/") ([&](const std::string& p) { - const filesystem::path assets_dir = "assets/"; // <-- set your build folder - filesystem::path file_path = assets_dir / p; + filesystem::path file_path = utils::assets_dir / p; return utils::getFile(file_path); }); diff --git a/source/shadowrun/ShadowrunApi.cpp b/source/shadowrun/ShadowrunApi.cpp index be46955..d30c2ee 100644 --- a/source/shadowrun/ShadowrunApi.cpp +++ b/source/shadowrun/ShadowrunApi.cpp @@ -25,7 +25,7 @@ static std::unordered_map parse_query_string(const std return params; } -void initApi(crow::App& app){ +void initApi(crow::App& app){ CROW_ROUTE(app, "/assets/shadowrun/") ([&](const crow::request& req, const std::string& p) { diff --git a/source/shadowrun/ShadowrunApi.hpp b/source/shadowrun/ShadowrunApi.hpp index ede7333..db8870c 100644 --- a/source/shadowrun/ShadowrunApi.hpp +++ b/source/shadowrun/ShadowrunApi.hpp @@ -1,12 +1,12 @@ #ifndef __SHADOWRUNAPI_H__ #define __SHADOWRUNAPI_H__ -#include "cors.h" -#include +#include "crow.h" +#include "crow/middlewares/cors.h" namespace shadowrun { -void initApi(crow::App& app); +void initApi(crow::App& app); } #endif // __SHADOWRUNAPI_H__ \ No newline at end of file diff --git a/source/utils.cpp b/source/utils.cpp index 554c46c..d515edf 100644 --- a/source/utils.cpp +++ b/source/utils.cpp @@ -164,6 +164,7 @@ std::string get_mime_type(const std::string& path) { if (path.ends_with(".woff")) return "font/woff"; if (path.ends_with(".woff2")) return "font/woff2"; if (path.ends_with(".pdf")) return "application/pdf"; + if (path.ends_with(".ico")) return "image/x-icon"; return "application/octet-stream"; } diff --git a/source/utils.hpp b/source/utils.hpp index 0b558e8..50f37ee 100644 --- a/source/utils.hpp +++ b/source/utils.hpp @@ -10,7 +10,10 @@ #include "crow.h" namespace utils { - const std::filesystem::path build_dir = "frontend/build/"; // <-- set your build folder + // Svelte genereated files + const std::filesystem::path build_dir = "frontend/build/"; + // Non-autogenerated assets folder + const std::filesystem::path assets_dir = "assets/"; std::map parseBody(const std::string& body);