17#include <argparse/argparse.hpp>
20#include "../core/expr_evaluator.h"
32 namespace fs = std::filesystem;
72 explicit MantisApp(
int argc = 0,
char** argv =
nullptr);
109 static int quit(
const int& exitCode = 0,
const std::string& reason =
"Something went wrong!");
115 [[nodiscard]]
int port()
const;
137 [[nodiscard]] std::string
host()
const;
148 [[nodiscard]] std::string
publicDir()
const;
159 [[nodiscard]] std::string
dataDir()
const;
210 [[nodiscard]] argparse::ArgumentParser&
cmd()
const;
235 std::chrono::time_point<std::chrono::steady_clock>
startTime()
const;
240 const std::string __class_name__ =
"mantis::MantisApp";
244 static std::mutex s_mutex;
257 bool ensureDirsAreCreated()
const;
266 static std::string getUserValueSecurely(
const std::string& prompt);
269 std::vector<std::string> m_cmdArgs;
272 bool initialized =
false;
274 std::string m_publicDir;
275 std::string m_dataDir;
279 std::chrono::time_point<std::chrono::steady_clock> m_startTime;
283 std::string m_host =
"127.0.0.1";
286 bool m_toStartServer =
false;
287 bool m_launchAdminPanel =
false;
288 bool m_isDevMode =
false;
290 std::unique_ptr<DatabaseUnit> m_database;
291 std::unique_ptr<LoggingUnit> m_logger;
292 std::unique_ptr<HttpUnit> m_http;
293 std::unique_ptr<argparse::ArgumentParser> m_opts;
294 std::unique_ptr<Router> m_router;
295 std::unique_ptr<Validator> m_validators;
296 std::unique_ptr<ExprEvaluator> m_exprEval;
297 std::unique_ptr<SettingsUnit> m_settings;
298 std::unique_ptr<FileUnit> m_files;
Database Management Class.
Definition database.h:29
Handle file management for record type files.
Definition fileunit.h:27
Mantis entry point.
Definition app.h:65
int poolSize() const
Retrieve the database pool size value.
Definition app.cpp:580
Router & router() const
Get the router object instance.
Definition app.cpp:431
argparse::ArgumentParser & cmd() const
Get the commandline parser object.
Definition app.cpp:425
static MantisApp & instance()
Retrieve existing application instance.
Definition app.cpp:92
static std::string appVersion()
Definition app.cpp:522
void setDbType(const DbType &dbType)
Definition app.cpp:496
~MantisApp()
Definition app.cpp:57
void init()
Run initialization actions for Mantis, ensuring all objects are initialized properly before use.
Definition app.cpp:72
DatabaseUnit & db() const
Get the database unit object.
Definition app.cpp:407
LoggingUnit & log() const
Get the logging unit object.
Definition app.cpp:413
ExprEvaluator & evaluator() const
Get the cparse expression evaluator unit object instance.
Definition app.cpp:443
void openBrowserOnStart() const
Launch browser with the admin dashboard page. If all goes well, the default OS browser should open (i...
Definition app.cpp:461
static int appPatchVersion()
Fetch the patch version.
Definition app.cpp:537
static std::string jwtSecretKey()
Retrieve the JWT secret key.
Definition app.cpp:502
SettingsUnit & settings() const
Get the settings unit object.
Definition app.cpp:449
DbType dbType() const
Retrieves the active database type.
Definition app.cpp:542
void close()
Close the application and reset object instances that are dependent on the class.
Definition app.cpp:370
bool isDevMode() const
Definition app.cpp:491
std::chrono::time_point< std::chrono::steady_clock > startTime() const
Get the server start time in std::chrono::
Definition app.cpp:486
int run()
Start the http server and start listening for requests.
Definition app.cpp:386
FileUnit & files() const
Get the file unit object.
Definition app.cpp:455
std::string host() const
Retrieve HTTP Server host address. For instance, a host of 127.0.0.1, 0.0.0.0, etc.
Definition app.cpp:564
Validator & validators() const
Get the validators unit object instance in MantisApp.
Definition app.cpp:437
static int appMajorVersion()
Fetch the minor version.
Definition app.cpp:532
std::string publicDir() const
Retrieve the public static file directory.
Definition app.cpp:595
void setDataDir(const std::string &dir)
Update the data directory for MantisApp.
Definition app.cpp:616
void setPoolSize(const int &pool_size)
Set the database pool size value.
Definition app.cpp:586
void setHost(const std::string &host)
Update HTTP Server host address.
Definition app.cpp:570
HttpUnit & http() const
Get the http unit object.
Definition app.cpp:419
static int quit(const int &exitCode=0, const std::string &reason="Something went wrong!")
Quit the running application immediately.
Definition app.cpp:357
void setPort(const int &port)
Set a new port value for HTTP server.
Definition app.cpp:554
int port() const
Retrieve HTTP Listening port.
Definition app.cpp:548
std::string dataDir() const
Retrieves the data directory where SQLite db and files are stored.
Definition app.cpp:610
void ensureInitialized(const char *caller) const
Syntactic method to enforce.
Definition app.cpp:511
void setPublicDir(const std::string &dir)
Update HTTP server static file directory.
Definition app.cpp:601
static int appMinorVersion()
Fetch the major version.
Definition app.cpp:527
Router class allows for managing routes as well as acting as a top-wrapper on the HttpUnit.
Definition router.h:22
Manages application settings.
Definition settings.h:21
router.h
Definition app.h:31
DbType
Enum for which database is currently selected.
Definition app.h:46
@ MYSQL
PostGreSQL Database
Struct instance for handling evaluation of database access rules.
Definition expr_evaluator.h:27