diff options
Diffstat (limited to 'umosapi.cpp')
-rw-r--r-- | umosapi.cpp | 85 |
1 files changed, 65 insertions, 20 deletions
diff --git a/umosapi.cpp b/umosapi.cpp index 8d5d90d..8b22de1 100644 --- a/umosapi.cpp +++ b/umosapi.cpp @@ -22,7 +22,13 @@ #include <json-c/json.h> +#include <fstream> +#include <nlohmann/json.hpp> + #include "clara.hpp" +#include "shared.h" + +std::map<std::string, std::string> config; using namespace std; using namespace Pistache; @@ -34,6 +40,8 @@ using bsoncxx::builder::stream::finalize; using bsoncxx::builder::stream::open_array; using bsoncxx::builder::stream::open_document; +using json = nlohmann::json; + using namespace clara; namespace Generic { @@ -42,6 +50,55 @@ namespace Generic { } } +void load_config(string config_path) { +std::ifstream is_file(config_path); + std::string line; + while( std::getline(is_file, line) ) + { + std::istringstream is_line(line); + std::string key; + if( std::getline(is_line, key, '=') ) + { + std::string value; + if( std::getline(is_line, value) ) + config[key] = value; + } + } + is_file.close(); + + string mongoURI = "mongodb://"; + + + if (config["mongo_db"] == "") { + config["mongo_db"] = "umosapi"; + } + + if (config["mongo_user"] != "") { + mongoURI.append(config["mongo_user"] + ":"); + } + + if (config["mongo_password"] != "") { + mongoURI.append(config["mongo_password"] + "@"); + } + + if (config["mongo_host"] == "") { + config["mongo_host"] = "127.0.0.1"; + } + mongoURI.append(config["mongo_host"]); + + if (config["mongo_port"] == "") { + config["mongo_port"] = "umosapi"; + } + mongoURI.append(":" + config["mongo_port"]); + + if (config["swaggerui"] == "") { + config["swaggerui"] = "/srv/http/swagger-ui"; + } + + config["mongoURI"] = mongoURI; + +} + class UmosapiService { public: @@ -106,9 +163,9 @@ class UmosapiService { } void retrieveAll(const Rest::Request& request, Http::ResponseWriter response) { - mongocxx::client conn{mongocxx::uri{"mongodb://127.0.0.1:27017"}}; + mongocxx::client conn{mongocxx::uri{config["mongoURI"]}}; - auto collection = conn["umosapi"][request.param(":mcollection").as<string>()]; + auto collection = conn[config["mongo_db"]][request.param(":mcollection").as<string>()]; auto cursor = collection.find({}); @@ -127,19 +184,6 @@ class UmosapiService { Rest::Router router; }; -std::string get_value(struct json_object *jobj, const char *key) { - struct json_object *tmp; - - - json_object_object_get_ex(jobj, key, &tmp); - - if (jobj == NULL) { - cout << "get_value: Json object is null" << endl; - return ""; - } else { - return json_object_get_string(tmp); - } -} int main(int argc, char *argv[]) { @@ -151,7 +195,7 @@ int main(int argc, char *argv[]) { } config_path.append(homedir); - config_path.append("/.config/umosapi/config.json"); + config_path.append("/.config/umosapi/config.txt"); bool showHelp = false; int config_port = 9080; @@ -183,16 +227,17 @@ int main(int argc, char *argv[]) { if (!std::filesystem::exists(config_path)) { cout << "Error fatal : config file '" << config_path << "' not found" << endl; - cout << "config.json is search here: ~/.config/umosapi/config.json" << endl; + cout << "config.txt is search here: ~/.config/umosapi/config.txt" << endl; exit (EXIT_FAILURE); } - auto config = json_object_from_file(config_path.c_str()); + load_config(config_path); - //cout << get_value(config, "swaggerui") << endl; + cout << "Using swaggerui " << config["swaggerui"] << " path" << endl; + cout << "Using mongoURI " << config["mongoURI"] << endl; UmosapiService umosapi(addr); umosapi.init(thr); - umosapi.start(get_value(config, "swaggerui")); + umosapi.start(config["swaggerui"]); } |