5#ifndef MANTISAPP_DUKTAPE_CUSTOM_TYPES_H
6#define MANTISAPP_DUKTAPE_CUSTOM_TYPES_H
10#ifdef MANTIS_ENABLE_SCRIPTING
11#include <dukglue/dukglue.h>
16#include "../utils/utils.h"
22#ifdef MANTIS_ENABLE_SCRIPTING
25 static duk_ret_t nativeConsoleInfo(duk_context *ctx);
27 static duk_ret_t nativeConsoleTrace(duk_context *ctx);
29 static duk_ret_t nativeConsoleTable(duk_context *ctx);
43 const httplib::Request &m_req;
46 const std::string __class_name__ =
"mb::MantisRequest";
108 bool hasHeader(
const std::string &key)
const;
117 std::string
getHeaderValue(
const std::string &key,
const char *def,
size_t id)
const;
140 bool hasTrailer(
const std::string &key)
const;
161 httplib::Match
matches()
const;
240 bool hasKey(
const std::string &key)
const;
254 std::pair<nlohmann::json, std::string>
getBodyAsJson()
const;
267 void set(
const std::string &key, T value) {
268 m_store.
set(key, value);
288 T &
getOr(
const std::string &key, T default_value) {
289 return m_store.
getOr<T>(key, default_value);
293#ifdef MANTIS_ENABLE_SCRIPTING
295 DukValue get_duk(
const std::string &key);
296 DukValue getOr_duk(
const std::string &key,
const DukValue &default_value);
297 void set_duk(
const std::string &key,
const DukValue &value);
319 httplib::Response &m_res;
321 const std::string __class_name__ =
"mb::MantisResponse";
365 [[nodiscard]] std::string
getBody()
const;
371 void setBody(
const std::string &b);
389 [[nodiscard]] std::string
getReason()
const;
402 [[nodiscard]]
bool hasHeader(
const std::string &key)
const;
411 std::string
getHeaderValue(
const std::string &key,
const char *def =
"",
size_t id = 0)
const;
420 [[nodiscard]]
size_t getHeaderValueU64(
const std::string &key,
size_t def = 0,
size_t id = 0)
const;
434 void setHeader(
const std::string &key,
const std::string &val)
const;
441 [[nodiscard]]
bool hasTrailer(
const std::string &key)
const;
449 [[nodiscard]] std::string
getTrailerValue(
const std::string &key,
size_t id = 0)
const;
463 void setRedirect(
const std::string &url,
int status = httplib::StatusCode::Found_302)
const;
471 void setContent(
const char *s,
size_t n,
const std::string &content_type)
const;
478 void setContent(
const std::string &s,
const std::string &content_type)
const;
485 void setContent(std::string &&s,
const std::string &content_type)
const;
492 void setFileContent(
const std::string &path,
const std::string &content_type)
const;
506 void send(
int statusCode,
const std::string &data =
"",
const std::string &content_type =
"text/plain")
const;
516 void sendJSON(
int statusCode = 200,
const json &data = json::object())
const;
517#ifdef MANTIS_ENABLE_SCRIPTING
523 void sendJson(
int statusCode,
const DukValue &data)
const;
530 void sendText(
int statusCode = 200,
const std::string &data =
"")
const;
537 void sendHtml(
int statusCode = 200,
const std::string &data =
"")
const;
543 void sendEmpty(
int statusCode = 204)
const;
553 const httplib::ContentReader &m_reader;
556 std::vector<httplib::FormData> m_formData;
557 json m_json{}, m_filesMetadata{};
558 bool m_parsed =
false;
563 [[nodiscard]]
const httplib::ContentReader &
reader()
const;
567 [[nodiscard]]
const std::vector<httplib::FormData> &
formData()
const;
575 void writeFiles(
const std::string& entity_name);
584 void readMultipart();
588 static json getValueFromType(
const std::string& type,
const std::string& value);
Definition context_store.h:55
T & getOr(const std::string &key, T default_value)
Get context value given the key.
Definition context_store.h:112
void set(const std::string &key, T value)
Store a key-value data in the context.
Definition context_store.h:81
Represents a database table/entity with schema and CRUD operations.
Definition entity.h:39
‍Middleware shorthand for the content reader
Definition http.h:552
static std::string hashMultipartMetadata(const httplib::FormData &data)
Definition http_content_reader.cpp:214
void parseFormDataToEntity(const Entity &entity)
Definition http_content_reader.cpp:43
void writeFiles(const std::string &entity_name)
Definition http_content_reader.cpp:171
const httplib::ContentReader & reader() const
Definition http_content_reader.cpp:13
const json & filesMetadata() const
Definition http_content_reader.cpp:35
const json & jsonBody() const
Definition http_content_reader.cpp:39
const std::vector< httplib::FormData > & formData() const
Definition http_content_reader.cpp:31
bool isMultipartFormData() const
Definition http_content_reader.cpp:15
void undoWrittenFiles(const std::string &entity_name)
Definition http_content_reader.cpp:203
A wrapper class around httplib::Request offering a consistent API and allowing for easy wrapper metho...
Definition http.h:42
bool hasKey(const std::string &key) const
Check if context store has key.
Definition http_request.cpp:211
int getRemotePort() const
Get client remote port.
Definition http_request.cpp:47
std::string getBody() const
Get raw request body.
Definition http_request.cpp:14
void set(const std::string &key, T value)
Store value in request context (for middleware communication).
Definition http.h:267
bool hasQueryParam(const std::string &key) const
Check if query parameter exists.
Definition http_request.cpp:86
bool hasTrailer(const std::string &key) const
Check if trailer exists.
Definition http_request.cpp:71
std::pair< nlohmann::json, std::string > getBodyAsJson() const
Parse request body as JSON.
Definition http_request.cpp:219
bool hasPathParam(const std::string &key) const
Check if path parameter exists.
Definition http_request.cpp:105
std::string getRemoteAddr() const
Get client remote address.
Definition http_request.cpp:16
std::string getPathParamValue(const std::string &key) const
Get path parameter value.
Definition http_request.cpp:109
static void registerDuktapeMethods()
Register MantisRequest methods for JavaScript/Duktape.
std::string getLocalAddr() const
Get server local address.
Definition http_request.cpp:49
std::string getPath() const
Get request path.
Definition http_request.cpp:12
size_t getQueryParamValueCount(const std::string &key) const
Get count of query parameter values.
Definition http_request.cpp:99
size_t getTrailerValueCount(const std::string &key) const
Get count of trailer values.
Definition http_request.cpp:80
std::string getMethod() const
Get HTTP request method (GET, POST, etc.).
Definition http_request.cpp:10
bool isMultipartFormData() const
Check if request is multipart/form-data.
Definition http_request.cpp:123
size_t getHeaderValueU64(const std::string &key, size_t def, size_t id) const
Get header value as unsigned 64-bit integer.
Definition http_request.cpp:62
bool hasHeader(const std::string &key) const
Check if header exists.
Definition http_request.cpp:53
int getLocalPort() const
Get server local port.
Definition http_request.cpp:51
std::string getHeaderValue(const std::string &key, const char *def, size_t id) const
Get header value with default and index.
Definition http_request.cpp:57
std::string getBearerTokenAuth() const
Extract Bearer token from Authorization header.
Definition http_request.cpp:215
T & getOr(const std::string &key, T default_value)
Get value from context store or return default.
Definition http.h:288
std::string getTrailerValue(const std::string &key, size_t id) const
Get trailer value.
Definition http_request.cpp:75
size_t getHeaderValueCount(const std::string &key) const
Get count of header values.
Definition http_request.cpp:67
size_t getPathParamValueCount(const std::string &key) const
Get count of path parameter values.
Definition http_request.cpp:116
bool hasPathParams() const
Check if request has path parameters.
Definition http_request.cpp:103
std::string getQueryParamValue(const std::string &key) const
Get query parameter value (first occurrence).
Definition http_request.cpp:90
httplib::Match matches() const
Get route match information.
Definition http_request.cpp:84
Wrapper around httplib::Response for consistent API.
Definition http.h:318
std::string getHeaderValue(const std::string &key, const char *def="", size_t id=0) const
Get header value.
Definition http_response.cpp:69
bool hasHeader(const std::string &key) const
Check if header exists.
Definition http_response.cpp:64
void setRedirect(const std::string &url, int status=httplib::StatusCode::Found_302) const
Set redirect response.
Definition http_response.cpp:104
std::string getLocation() const
Get redirect location.
Definition http_response.cpp:44
size_t getHeaderValueCount(const std::string &key) const
Get count of header values.
Definition http_response.cpp:79
void sendText(int statusCode=200, const std::string &data="") const
Send text response.
Definition http_response.cpp:140
static void registerDuktapeMethods()
Register MantisResponse methods for JavaScript/Duktape.
void sendHtml(int statusCode=200, const std::string &data="") const
Send HTML response.
Definition http_response.cpp:172
void setFileContent(const std::string &path, const std::string &content_type) const
Set response content from file with MIME type.
Definition http_response.cpp:124
~MantisResponse()=default
Destructor.
void setVersion(const std::string &b)
Set HTTP version.
Definition http_response.cpp:29
void send(int statusCode, const std::string &data="", const std::string &content_type="text/plain") const
Send response with status, data, and content type.
Definition http_response.cpp:134
std::string getBody() const
Get response body.
Definition http_response.cpp:34
httplib::Response & getResponse() const
Definition http_response.cpp:12
void setLocation(const std::string &b)
Set redirect location.
Definition http_response.cpp:49
std::string getVersion() const
Get HTTP version.
Definition http_response.cpp:24
void sendEmpty(int statusCode=204) const
Send empty response (no body).
Definition http_response.cpp:177
void setHeader(const std::string &key, const std::string &val) const
Set response header.
Definition http_response.cpp:84
bool hasTrailer(const std::string &key) const
Check if trailer exists.
Definition http_response.cpp:89
std::string getTrailerValue(const std::string &key, size_t id=0) const
Get trailer value.
Definition http_response.cpp:94
void setContent(const char *s, size_t n, const std::string &content_type) const
Set response content from buffer.
Definition http_response.cpp:109
int getStatus() const
Get HTTP status code.
Definition http_response.cpp:14
void setReason(const std::string &b)
Set status reason phrase.
Definition http_response.cpp:59
void setStatus(int s)
Set HTTP status code.
Definition http_response.cpp:19
void setBody(const std::string &b)
Set response body.
Definition http_response.cpp:39
size_t getTrailerValueCount(const std::string &key) const
Get count of trailer values.
Definition http_response.cpp:99
size_t getHeaderValueU64(const std::string &key, size_t def=0, size_t id=0) const
Get header value as unsigned 64-bit integer.
Definition http_response.cpp:74
void sendJSON(int statusCode=200, const json &data=json::object()) const
Send JSON response.
Definition http_response.cpp:145
std::string getReason() const
Get status reason phrase.
Definition http_response.cpp:54
Entity class for database table operations and CRUD functionality.
Custom exception class for MantisBase errors.
router.h
Definition auth.h:15
nlohmann::json json
Shorten JSON namespace.
Definition context_store.h:18
Type definitions and aliases for MantisBase.