From 58d37b51b714181d9c562c58c92361acd133b1be Mon Sep 17 00:00:00 2001 From: Lukas Forsberg Date: Mon, 16 Feb 2026 23:24:31 +0100 Subject: [PATCH] added CORS --- CMakeLists.txt | 40 +++++++++++----------- PKGBUILD | 1 + README.md | 7 +++- assets/settings.json | 5 +-- shadowrun-server.install | 4 +++ shadowrun-server.service | 3 ++ source/cors.h | 29 ++++++++++++++++ {src => source}/database/database.cpp | 0 {src => source}/database/database.hpp | 0 {src => source}/database/databasepool.h | 0 {src => source}/json_settings.cpp | 3 +- {src => source}/json_settings.h | 3 +- {src => source}/login/Session.cpp | 0 {src => source}/login/Session.hpp | 0 {src => source}/login/SessionHandler.cpp | 0 {src => source}/login/SessionHandler.hpp | 0 {src => source}/login/login.cpp | 2 +- {src => source}/login/login.hpp | 3 +- {src => source}/login/loginDb.cpp | 0 {src => source}/login/loginDb.hpp | 0 {src => source}/main.cpp | 7 ++-- {src => source}/shadowrun/ShadowrunApi.cpp | 2 +- {src => source}/shadowrun/ShadowrunApi.hpp | 3 +- {src => source}/shadowrun/ShadowrunDb.cpp | 0 {src => source}/shadowrun/ShadowrunDb.hpp | 0 {src => source}/utils.cpp | 0 {src => source}/utils.hpp | 0 27 files changed, 80 insertions(+), 32 deletions(-) create mode 100644 shadowrun-server.install create mode 100644 source/cors.h rename {src => source}/database/database.cpp (100%) rename {src => source}/database/database.hpp (100%) rename {src => source}/database/databasepool.h (100%) rename {src => source}/json_settings.cpp (93%) rename {src => source}/json_settings.h (76%) rename {src => source}/login/Session.cpp (100%) rename {src => source}/login/Session.hpp (100%) rename {src => source}/login/SessionHandler.cpp (100%) rename {src => source}/login/SessionHandler.hpp (100%) rename {src => source}/login/login.cpp (98%) rename {src => source}/login/login.hpp (86%) rename {src => source}/login/loginDb.cpp (100%) rename {src => source}/login/loginDb.hpp (100%) rename {src => source}/main.cpp (95%) rename {src => source}/shadowrun/ShadowrunApi.cpp (99%) rename {src => source}/shadowrun/ShadowrunApi.hpp (70%) rename {src => source}/shadowrun/ShadowrunDb.cpp (100%) rename {src => source}/shadowrun/ShadowrunDb.hpp (100%) rename {src => source}/utils.cpp (100%) rename {src => source}/utils.hpp (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index d61b64f..49e7a73 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -35,37 +35,37 @@ endforeach() include_directories( modules/cpp-libraries/include/ - src - src/shadowrun - src/database - src/login + source + source/shadowrun + source/database + source/login ) add_executable(${TARGET_NAME} modules/cpp-libraries/src/sqlite3.c modules/cpp-libraries/src/monocypher.c - src/main.cpp - src/utils.hpp - src/utils.cpp - src/json_settings.cpp - src/json_settings.h + source/main.cpp + source/utils.hpp + source/utils.cpp + source/json_settings.cpp + source/json_settings.h - src/database/database.cpp - src/database/database.hpp + source/database/database.cpp + source/database/database.hpp # Shadowrun - src/shadowrun/ShadowrunApi.cpp - src/shadowrun/ShadowrunApi.hpp - src/shadowrun/ShadowrunDb.cpp - src/shadowrun/ShadowrunDb.hpp + source/shadowrun/ShadowrunApi.cpp + source/shadowrun/ShadowrunApi.hpp + source/shadowrun/ShadowrunDb.cpp + source/shadowrun/ShadowrunDb.hpp # login - src/login/login.cpp - src/login/login.hpp - src/login/loginDb.cpp - src/login/Session.cpp - src/login/SessionHandler.cpp + source/login/login.cpp + source/login/login.hpp + source/login/loginDb.cpp + source/login/Session.cpp + source/login/SessionHandler.cpp ) # warnings to ignore diff --git a/PKGBUILD b/PKGBUILD index a057d7f..964a0a5 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -11,6 +11,7 @@ makedepends=('cmake' 'gcc') source=( ${pkgname}-${pkgver}.tar.gz ) +install=shadowrun-server.install md5sums=('SKIP') # SKIP if local files build() { cmake -S "${srcdir}" \ diff --git a/README.md b/README.md index 15dc166..1357bd2 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ npm run build 1. tar the source files to make it cleaner ``` -tar czf pkg/shadowrun-server-0.1.1.tar.gz src/ modules/ assets/ frontend/build/ shadowrun-server.service CMakeLists.txt +tar czf shadowrun-server-0.1.1.tar.gz source/ modules/ assets/ frontend/build/ shadowrun-server.service CMakeLists.txt shadowrun-server.install ``` 2. create the package @@ -41,6 +41,11 @@ tar czf pkg/shadowrun-server-0.1.1.tar.gz src/ modules/ assets/ frontend/build/ makepkg -f ``` +3. place the package in archrepo on server +``` +scp shadowrun-server-0.1.1-1-x86_64.pkg.tar.zst lukas@192.168.1.101:/home/lukas/Drive/archrepo/x86_64/ +``` + ## Database ### Attributes diff --git a/assets/settings.json b/assets/settings.json index bd6747c..5c01519 100644 --- a/assets/settings.json +++ b/assets/settings.json @@ -1,4 +1,5 @@ { "http_port" : 3010, - "db_path": "/var/lib/shadowrun-server/shadowrun.db" -} \ No newline at end of file + "db_path": "/var/lib/shadowrun-server/shadowrun.db", + "url": "*" +} \ No newline at end of file diff --git a/shadowrun-server.install b/shadowrun-server.install new file mode 100644 index 0000000..b742acc --- /dev/null +++ b/shadowrun-server.install @@ -0,0 +1,4 @@ +post_install() { + getent group shadowrun >/dev/null || groupadd -r shadowrun + getent passwd shadowrun >/dev/null || useradd -r -g shadowrun -d /var/lib/shadowrun-server -s /usr/bin/nologin shadowrun +} \ No newline at end of file diff --git a/shadowrun-server.service b/shadowrun-server.service index 72b6fa4..e5ef54a 100644 --- a/shadowrun-server.service +++ b/shadowrun-server.service @@ -3,6 +3,9 @@ Description=shadowrun server Service After=network.target [Service] +User=shadowrun +Group=shadowrun +StateDirectory=shadowrun-server Type=simple WorkingDirectory=/usr/share/shadowrun-server ExecStart=/usr/bin/shadowrun-server diff --git a/source/cors.h b/source/cors.h new file mode 100644 index 0000000..351111e --- /dev/null +++ b/source/cors.h @@ -0,0 +1,29 @@ +#ifndef __CORS_H__ +#define __CORS_H__ + +#include "crow.h" +#include "json_settings.h" + +extern AppSettings::Settings settings; + +struct CORS { + // required inner type for Crow middleware + struct context {}; + + void before_handle(crow::request& req, crow::response& res, context& /*ctx*/) { + // allow all origins (for dev); replace "*" with your frontend URL in production + res.add_header("Access-Control-Allow-Origin", settings.url); + res.add_header("Access-Control-Allow-Methods", "POST, GET, OPTIONS"); + res.add_header("Access-Control-Allow-Headers", "Content-Type"); + + // automatically handle preflight + if (req.method == crow::HTTPMethod::OPTIONS) { + res.end(); // stop here — no routing needed + } + } + + // run after handler (not needed for CORS, but must be present) + void after_handle(crow::request&, crow::response&, context&) {} +}; + +#endif // __CORS_H__ \ No newline at end of file diff --git a/src/database/database.cpp b/source/database/database.cpp similarity index 100% rename from src/database/database.cpp rename to source/database/database.cpp diff --git a/src/database/database.hpp b/source/database/database.hpp similarity index 100% rename from src/database/database.hpp rename to source/database/database.hpp diff --git a/src/database/databasepool.h b/source/database/databasepool.h similarity index 100% rename from src/database/databasepool.h rename to source/database/databasepool.h diff --git a/src/json_settings.cpp b/source/json_settings.cpp similarity index 93% rename from src/json_settings.cpp rename to source/json_settings.cpp index 106fbee..4104251 100644 --- a/src/json_settings.cpp +++ b/source/json_settings.cpp @@ -11,7 +11,8 @@ using namespace::AppSettings; Settings AppSettings::deafult(){ return Settings { .http_port = 3010, - .db_path = "/var/lib/shadowrun-server/shadowrun.db" + .db_path = "/var/lib/shadowrun-server/shadowrun.db", + .url = "*" }; } diff --git a/src/json_settings.h b/source/json_settings.h similarity index 76% rename from src/json_settings.h rename to source/json_settings.h index 88aea3d..9be49cb 100644 --- a/src/json_settings.h +++ b/source/json_settings.h @@ -10,11 +10,12 @@ static constexpr char settingsFile[] = "assets/settings.json"; struct Settings { int http_port; std::string db_path; + std::string url; }; Settings load(); Settings deafult(); -NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(Settings, http_port, db_path); +NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(Settings, http_port, db_path, url); } #endif // JSON_SETTINGS_H \ No newline at end of file diff --git a/src/login/Session.cpp b/source/login/Session.cpp similarity index 100% rename from src/login/Session.cpp rename to source/login/Session.cpp diff --git a/src/login/Session.hpp b/source/login/Session.hpp similarity index 100% rename from src/login/Session.hpp rename to source/login/Session.hpp diff --git a/src/login/SessionHandler.cpp b/source/login/SessionHandler.cpp similarity index 100% rename from src/login/SessionHandler.cpp rename to source/login/SessionHandler.cpp diff --git a/src/login/SessionHandler.hpp b/source/login/SessionHandler.hpp similarity index 100% rename from src/login/SessionHandler.hpp rename to source/login/SessionHandler.hpp diff --git a/src/login/login.cpp b/source/login/login.cpp similarity index 98% rename from src/login/login.cpp rename to source/login/login.cpp index 49e52c1..6974fbe 100644 --- a/src/login/login.cpp +++ b/source/login/login.cpp @@ -45,7 +45,7 @@ std::optional loginUser(const std::string& username, const std::str return {}; } -void initLogin(crow::SimpleApp& app) +void initLogin(crow::App& app) { createUser("lukas", "Trollar4928"); diff --git a/src/login/login.hpp b/source/login/login.hpp similarity index 86% rename from src/login/login.hpp rename to source/login/login.hpp index 9031e59..690ffa7 100644 --- a/src/login/login.hpp +++ b/source/login/login.hpp @@ -4,10 +4,11 @@ #pragma once #include +#include "cors.h" namespace login { -void initLogin(crow::SimpleApp& app); +void initLogin(crow::App& app); std::optional isLoggedIn(const crow::request& req); diff --git a/src/login/loginDb.cpp b/source/login/loginDb.cpp similarity index 100% rename from src/login/loginDb.cpp rename to source/login/loginDb.cpp diff --git a/src/login/loginDb.hpp b/source/login/loginDb.hpp similarity index 100% rename from src/login/loginDb.hpp rename to source/login/loginDb.hpp diff --git a/src/main.cpp b/source/main.cpp similarity index 95% rename from src/main.cpp rename to source/main.cpp index 36461db..92ec944 100644 --- a/src/main.cpp +++ b/source/main.cpp @@ -2,16 +2,17 @@ #include #include "json_settings.h" #include "utils.hpp" +#include "cors.h" #include "login.hpp" #include "ShadowrunApi.hpp" #include "databasepool.h" using namespace std; -int main() { - crow::SimpleApp app; +AppSettings::Settings settings = AppSettings::load(); - auto settings = AppSettings::load(); +int main() { + crow::App app; // create global database dbpool = std::make_unique(settings.db_path); diff --git a/src/shadowrun/ShadowrunApi.cpp b/source/shadowrun/ShadowrunApi.cpp similarity index 99% rename from src/shadowrun/ShadowrunApi.cpp rename to source/shadowrun/ShadowrunApi.cpp index b8eb143..be46955 100644 --- a/src/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::SimpleApp& app){ +void initApi(crow::App& app){ CROW_ROUTE(app, "/assets/shadowrun/") ([&](const crow::request& req, const std::string& p) { diff --git a/src/shadowrun/ShadowrunApi.hpp b/source/shadowrun/ShadowrunApi.hpp similarity index 70% rename from src/shadowrun/ShadowrunApi.hpp rename to source/shadowrun/ShadowrunApi.hpp index 9f76086..ede7333 100644 --- a/src/shadowrun/ShadowrunApi.hpp +++ b/source/shadowrun/ShadowrunApi.hpp @@ -1,11 +1,12 @@ #ifndef __SHADOWRUNAPI_H__ #define __SHADOWRUNAPI_H__ +#include "cors.h" #include namespace shadowrun { -void initApi(crow::SimpleApp& app); +void initApi(crow::App& app); } #endif // __SHADOWRUNAPI_H__ \ No newline at end of file diff --git a/src/shadowrun/ShadowrunDb.cpp b/source/shadowrun/ShadowrunDb.cpp similarity index 100% rename from src/shadowrun/ShadowrunDb.cpp rename to source/shadowrun/ShadowrunDb.cpp diff --git a/src/shadowrun/ShadowrunDb.hpp b/source/shadowrun/ShadowrunDb.hpp similarity index 100% rename from src/shadowrun/ShadowrunDb.hpp rename to source/shadowrun/ShadowrunDb.hpp diff --git a/src/utils.cpp b/source/utils.cpp similarity index 100% rename from src/utils.cpp rename to source/utils.cpp diff --git a/src/utils.hpp b/source/utils.hpp similarity index 100% rename from src/utils.hpp rename to source/utils.hpp