Mantis App v0.1.13
Loading...
Searching...
No Matches
app.h
Go to the documentation of this file.
1
11#ifndef APP_H
12#define APP_H
13
14#include <string>
15#include <mutex>
16#include <filesystem>
17#include <argparse/argparse.hpp>
18
19#include "../core/expr_evaluator.h"
20
21// For password management ... // TODO get a proper library
22#ifdef _WIN32
23#include <conio.h>
24#else
25#include <termios.h>
26#include <unistd.h>
27#endif
28
29namespace mantis
30{
31 namespace fs = std::filesystem;
32
33 class DatabaseUnit;
34 class HttpUnit;
35 class LoggingUnit;
36 class SettingsUnit;
37 class Router;
38 class Validator;
39
43 enum class DbType
44 {
45 SQLITE = 0x01,
46 PSQL,
47 MYSQL
48 };
49
63 {
64 public:
70 explicit MantisApp(int argc = 0, char** argv = nullptr);
71 ~MantisApp();
72
76 void init();
77
82 static MantisApp& instance();
83
88 [[nodiscard]]
89 int run() const;
90
96 void close() const;
97
104 static int quit(const int& exitCode = 0, const std::string& reason = "Something went wrong!");
105
110 [[nodiscard]] int port() const;
115 void setPort(const int& port);
116
121 [[nodiscard]] int poolSize() const;
126 void setPoolSize(const int& pool_size);
127
132 [[nodiscard]] std::string host() const;
137 void setHost(const std::string& host);
138
143 [[nodiscard]] std::string publicDir() const;
148 void setPublicDir(const std::string& dir);
149
154 [[nodiscard]] std::string dataDir() const;
159 void setDataDir(const std::string& dir);
160
165 [[nodiscard]] DbType dbType() const;
170 void setDbType(const DbType& dbType);
171
176 static std::string jwtSecretKey();
184 void ensureInitialized(const char* caller) const;
185
190 static std::string appVersion();
192 static int appMinorVersion();
194 static int appMajorVersion();
196 static int appPatchVersion();
197
199 [[nodiscard]] DatabaseUnit& db() const;
201 [[nodiscard]] LoggingUnit& log() const;
203 [[nodiscard]] HttpUnit& http() const;
205 [[nodiscard]] argparse::ArgumentParser& cmd() const;
207 [[nodiscard]] Router& router() const;
209 [[nodiscard]] Validator& validators() const;
211 [[nodiscard]] ExprEvaluator& evaluator() const;
213 [[nodiscard]] SettingsUnit& settings() const;
214
221 void openBrowserOnStart() const;
222
223 private:
224 // Points to externally constructed instance (no ownership)
225 static std::unique_ptr<MantisApp> s_instance;
226 static std::mutex s_mutex;
227
228 // Disable copying and moving
229 MantisApp(const MantisApp&) = delete;
230 MantisApp& operator=(const MantisApp&) = delete;
231 MantisApp(MantisApp&&) = delete;
232 MantisApp& operator=(MantisApp&&) = delete;
233
234 // Private members
235 void parseArgs();
236 void init_units();
237
238 [[nodiscard]]
239 bool ensureDirsAreCreated() const;
248 static std::string getUserValueSecurely(const std::string& prompt);
249
250 // Store commandline args passed in, to be used in the init phase.
251 std::vector<std::string> m_cmdArgs;
252
253 // Hold state if the instance has be initialized already!
254 bool initialized = false;
255
256 std::string m_publicDir;
257 std::string m_dataDir;
258 DbType m_dbType;
259 std::string m_connString{};
260
261 int m_port = 7070;
262 std::string m_host = "127.0.0.1";
263 int m_poolSize = 2;
264 bool m_toStartServer = false;
265
266 std::unique_ptr<DatabaseUnit> m_database;
267 std::unique_ptr<LoggingUnit> m_logger;
268 std::unique_ptr<HttpUnit> m_http;
269 std::unique_ptr<argparse::ArgumentParser> m_opts;
270 std::unique_ptr<Router> m_router;
271 std::unique_ptr<Validator> m_validators;
272 std::unique_ptr<ExprEvaluator> m_exprEval;
273 std::unique_ptr<SettingsUnit> m_settings;
274 };
275}
276
277#endif //APP_H
Database Management Class.
Definition database.h:28
Definition http.h:210
Definition logging.h:36
Mantis entry point.
Definition app.h:63
int poolSize() const
Retrieve the database pool size value.
Definition app.cpp:523
Router & router() const
Get the router object instance.
Definition app.cpp:397
argparse::ArgumentParser & cmd() const
Get the commandline parser object.
Definition app.cpp:391
static MantisApp & instance()
Retrieve existing application instance.
Definition app.cpp:82
void close() const
Close the application.
Definition app.cpp:348
static std::string appVersion()
Definition app.cpp:465
void setDbType(const DbType &dbType)
Definition app.cpp:439
~MantisApp()
Definition app.cpp:53
void init()
Run initialization actions for Mantis, ensuring all objects are initialized properly before use.
Definition app.cpp:62
DatabaseUnit & db() const
Get the database unit object.
Definition app.cpp:373
LoggingUnit & log() const
Get the logging unit object.
Definition app.cpp:379
ExprEvaluator & evaluator() const
Get the cparse expression evaluator unit object instance.
Definition app.cpp:409
void openBrowserOnStart() const
Launch browser with the admin dashboard page. If all goes well, the default OS browser should open (i...
Definition app.cpp:420
static int appPatchVersion()
Fetch the patch version.
Definition app.cpp:480
static std::string jwtSecretKey()
Retrieve the JWT secret key.
Definition app.cpp:445
SettingsUnit & settings() const
Get the settings unit object.
Definition app.cpp:415
DbType dbType() const
Retrieves the active database type.
Definition app.cpp:485
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:507
Validator & validators() const
Get the validators unit object instance in MantisApp.
Definition app.cpp:403
static int appMajorVersion()
Fetch the minor version.
Definition app.cpp:475
std::string publicDir() const
Retrieve the public static file directory.
Definition app.cpp:538
void setDataDir(const std::string &dir)
Update the data directory for MantisApp.
Definition app.cpp:559
void setPoolSize(const int &pool_size)
Set the database pool size value.
Definition app.cpp:529
void setHost(const std::string &host)
Update HTTP Server host address.
Definition app.cpp:513
HttpUnit & http() const
Get the http unit object.
Definition app.cpp:385
static int quit(const int &exitCode=0, const std::string &reason="Something went wrong!")
Quit the running application immediately.
Definition app.cpp:338
void setPort(const int &port)
Set a new port value for HTTP server.
Definition app.cpp:497
int port() const
Retrieve HTTP Listening port.
Definition app.cpp:491
std::string dataDir() const
Retrieves the data directory where SQLite db and files are stored.
Definition app.cpp:553
void ensureInitialized(const char *caller) const
Syntactic method to enforce.
Definition app.cpp:454
int run() const
Start the http server and start listening for requests.
Definition app.cpp:355
void setPublicDir(const std::string &dir)
Update HTTP server static file directory.
Definition app.cpp:544
static int appMinorVersion()
Fetch the major version.
Definition app.cpp:470
Router class allows for managing routes as well as acting as a top-wrapper on the HttpUnit.
Definition router.h:24
Manages application settings.
Definition settings.h:21
Definition models.h:19
router.h
Definition app.h:30
DbType
Enum for which database is currently selected.
Definition app.h:44
@ MYSQL
‍PostGreSQL Database
@ PSQL
‍SQLite Database
Struct instance for handling evaluation of database access rules.
Definition expr_evaluator.h:27