13#include <nlohmann/json.hpp>
14#include <Simple-Web-Server/server_https.hpp>
19#define WEB_DIR SUNSHINE_ASSETS_DIR "/web/"
22 constexpr auto PORT_HTTPS = 1;
25 using https_server_t = SimpleWeb::Server<SimpleWeb::HTTPS>;
26 using resp_https_t = std::shared_ptr<typename SimpleWeb::ServerBase<SimpleWeb::HTTPS>::Response>;
27 using req_https_t = std::shared_ptr<typename SimpleWeb::ServerBase<SimpleWeb::HTTPS>::Request>;
32 void print_req(
const req_https_t &request);
33 void send_response(
const resp_https_t &response,
const nlohmann::json &output_tree);
35 void send_redirect(
const resp_https_t &response,
const req_https_t &request,
const char *path);
36 bool authenticate(
const resp_https_t &response,
const req_https_t &request);
37 void not_found(
const resp_https_t &response,
const req_https_t &request,
const std::string &error_message =
"Not Found");
38 void bad_request(
const resp_https_t &response,
const req_https_t &request,
const std::string &error_message =
"Bad Request");
39 bool check_content_type(
const resp_https_t &response,
const req_https_t &request,
const std::string_view &contentType);
41 bool validate_csrf_token(
const resp_https_t &response,
const req_https_t &request,
const std::string &client_id);
43 bool check_app_index(
const resp_https_t &response,
const req_https_t &request,
int index);
44 void getPage(
const resp_https_t &response,
const req_https_t &request,
const char *html_file,
bool require_auth =
true,
bool redirect_if_username =
false);
45 void getAsset(
const resp_https_t &response,
const req_https_t &request);
46 void browseDirectory(
const resp_https_t &response,
const req_https_t &request);
47 void getLocale(
const resp_https_t &response,
const req_https_t &request);
48 void getCSRFToken(
const resp_https_t &response,
const req_https_t &request);
77const std::map<std::string, std::string> mime_types = {
81 {
"html",
"text/html"},
82 {
"ico",
"image/x-icon"},
83 {
"jpeg",
"image/jpeg"},
84 {
"jpg",
"image/jpeg"},
85 {
"js",
"application/javascript"},
86 {
"json",
"application/json"},
88 {
"svg",
"image/svg+xml"},
90 {
"txt",
"text/plain"},
91 {
"woff2",
"font/woff2"},
std::string generate_csrf_token(const std::string &client_id)
Generate a new CSRF token for a client.
Definition confighttp.cpp:304
void not_found(const resp_https_t &response, const req_https_t &request, const std::string &error_message)
Send a 404 Not Found response.
Definition confighttp.cpp:210
void getCSRFToken(const resp_https_t &response, const req_https_t &request)
Get a CSRF token for the authenticated user.
Definition confighttp.cpp:562
bool check_app_index(const resp_https_t &response, const req_https_t &request, int index)
Validates the application index and sends an error response if invalid.
Definition confighttp.cpp:417
bool is_browsable_executable(const fs::directory_entry &entry, const fs::file_status &status)
Checks whether a directory entry qualifies as an executable file.
Definition confighttp.cpp:1471
void bad_request(const resp_https_t &response, const req_https_t &request, const std::string &error_message)
Send a 400 Bad Request response.
Definition confighttp.cpp:231
void send_unauthorized(const resp_https_t &response, const req_https_t &request)
Send a 401 Unauthorized response.
Definition confighttp.cpp:117
nlohmann::json build_browse_entries(const fs::path &dir_path, const std::string &type_str)
Lists, filters, and sorts the entries of a directory for the browse API.
Definition confighttp.cpp:1513
void print_req(const req_https_t &request)
Log the request details.
Definition confighttp.cpp:82
void getLocale(const resp_https_t &response, const req_https_t &request)
Get the locale setting. This endpoint does not require authentication.
Definition confighttp.cpp:942
std::string get_client_id(const req_https_t &request)
Get a unique client identifier for CSRF token management.
Definition confighttp.cpp:284
void send_response(const resp_https_t &response, const nlohmann::json &output_tree)
Send a response.
Definition confighttp.cpp:104
void getPage(const resp_https_t &response, const req_https_t &request, const char *html_file, const bool require_auth, const bool redirect_if_username)
Get an HTML page.
Definition confighttp.cpp:441
void getAsset(const resp_https_t &response, const req_https_t &request)
Get an asset.
Definition confighttp.cpp:517
nlohmann::json get_windows_drives()
Builds a JSON array of available Windows drive letters.
Definition confighttp.cpp:1489
bool check_content_type(const resp_https_t &response, const req_https_t &request, const std::string_view &contentType)
Validate the request content type and send a bad request when mismatched.
Definition confighttp.cpp:253
bool authenticate(const resp_https_t &response, const req_https_t &request)
Authenticate the user.
Definition confighttp.cpp:161
void browseDirectory(const resp_https_t &response, const req_https_t &request)
Browse the server filesystem.
Definition confighttp.cpp:1576
void send_redirect(const resp_https_t &response, const req_https_t &request, const char *path)
Send a redirect response.
Definition confighttp.cpp:144
Declarations for thread-safe data structures.