28 #if defined(_WIN32) || defined(_WIN64)
32 #define strcasecmp _stricmp
35 #include <mongo/client/dbclient.h>
37 #include "repo_database_handler_abstract.h"
38 #include "connectionpool/repo_connection_pool_mongo.h"
39 #include "../model/repo_node_utils.h"
40 #include "../model/bson/repo_bson.h"
41 #include "../model/bson/repo_bson_builder.h"
42 #include "../model/bson/repo_bson_role.h"
43 #include "../model/bson/repo_bson_user.h"
44 #include "../../lib/repo_stack.h"
50 enum class OPERATION { DROP, INSERT, UPDATE };
55 static const std::string ID;
56 static const std::string
UUID;
97 const std::string &host,
99 const uint32_t &maxConnections = 1,
100 const std::string &dbName = std::string(),
101 const std::string &username = std::string(),
102 const std::string &password = std::string(),
103 const bool &pwDigested =
false);
117 const std::string &host,
119 const uint32_t &maxConnections,
120 const std::string &dbName = std::string(),
129 const std::string &host)
143 const std::string &dbName,
144 const std::string &username,
145 const std::string &password,
146 const bool &pwDigested =
false)
148 mongo::BSONObj *mongoBSON = createAuthBSON(dbName, username, password, pwDigested);
164 const std::string &database,
165 const std::string &collection,
166 std::string &errMsg);
181 std::vector<repo::core::model::RepoBSON>
183 const std::string &database,
184 const std::string &collection,
185 const uint64_t &skip = 0,
186 const uint32_t &limit = 0,
187 const std::list<std::string> &fields = std::list<std::string>(),
188 const std::string &sortField = std::string(),
189 const int &sortOrder = -1);
197 std::list<std::string>
getCollections(
const std::string &database);
207 const std::string &database,
208 const std::string &collection,
209 std::string &errMsg);
216 std::list<std::string>
getDatabases(
const bool &sorted =
true);
223 const std::list<std::string> &databases,
224 const std::string &projectExt =
"history");
233 std::list<std::string>
getProjects(
const std::string &database,
const std::string &projectExt);
270 virtual void createCollection(
const std::string &database,
const std::string &name);
279 const std::string &database,
280 const std::string &collection,
281 std::string &errMsg);
289 const std::string &database,
290 std::string &errMsg);
301 const std::string &database,
302 const std::string &collection,
303 std::string &errMsg);
314 const std::string &database,
315 const std::string &collection,
316 std::string &errMsg);
326 const std::string &database,
327 const std::string &collection,
328 const std::string &fileName,
329 std::string &errMsg);
341 return performRoleCmd(OPERATION::DROP, role, errmsg);
354 return performUserCmd(OPERATION::DROP, user, errmsg);
366 const std::string &database,
367 const std::string &collection,
369 std::string &errMsg);
382 const std::string &database,
383 const std::string &collection,
384 const std::string &fileName,
385 const std::vector<uint8_t> &bin,
387 const std::string &contentType =
"binary/octet-stream"
400 return performRoleCmd(OPERATION::INSERT, role, errmsg);
413 return performUserCmd(OPERATION::INSERT, user, errmsg);
427 const std::string &database,
428 const std::string &collection,
430 const bool &overwrite,
431 std::string &errMsg);
443 return performRoleCmd(OPERATION::UPDATE, role, errmsg);
456 return performUserCmd(OPERATION::UPDATE, user, errmsg);
471 const std::string& database,
472 const std::string& collection,
483 const std::string& database,
484 const std::string& collection,
496 const std::string& database,
497 const std::string& collection,
499 const std::string& sortField =
""
513 const std::string& database,
514 const std::string& collection,
515 const repoUUID& uuid,
516 const std::string& sortField);
526 const std::string& database,
527 const std::string& collection,
528 const repoUUID& uuid);
538 const std::string& database,
539 const std::string& collection,
540 const std::string& fname
568 std::map<std::string, std::pair<std::string, std::string> > databasesAuthentication;
570 mongo::ConnectionString dbAddress;
589 const mongo::ConnectionString &dbAddress,
590 const uint32_t &maxConnections,
591 const std::string &dbName,
592 const std::string &username = std::string(),
593 const std::string &password = std::string(),
594 const bool &pwDigested =
false);
604 const mongo::ConnectionString &dbAddress,
605 const uint32_t &maxConnections,
606 const std::string &dbName,
621 mongo::DBClientBase *worker,
622 const std::string &database,
623 const std::string &collection,
624 const mongo::BSONObj &obj);
634 static mongo::BSONObj* createAuthBSON(
635 const std::string &database,
636 const std::string &username,
637 const std::string &password,
638 const bool &pwDigested);
645 mongo::BSONObj fieldsToReturn(
646 const std::list<std::string>& fields,
647 bool excludeIdField =
false);
654 std::string getCollectionFromNamespace(
const std::string &ns);
664 std::vector<uint8_t> getBigFile(
665 mongo::DBClientBase *worker,
666 const std::string &database,
667 const std::string &collection,
668 const std::string &fileName);
677 std::string getNamespace(
678 const std::string &database,
679 const std::string &collection);
686 std::string getProjectFromCollection(
const std::string &ns,
const std::string &projectExt);
698 std::string &errMsg);
710 std::string &errMsg);
723 mongo::DBClientBase *worker,
724 const std::string &database,
725 const std::string &collection,
727 std::string &errMsg);
735 static bool caseInsensitiveStringCompare(
const std::string& s1,
const std::string& s2);
repo::core::model::RepoBSON findOneByUniqueID(const std::string &database, const std::string &collection, const repoUUID &uuid)
Definition: repo_database_handler_mongo.cpp:537
~MongoDatabaseHandler()
Definition: repo_database_handler_mongo.cpp:75
Definition: repo_bson_collection_stats.h:30
uint64_t countItemsInCollection(const std::string &database, const std::string &collection, std::string &errMsg)
Definition: repo_database_handler_mongo.cpp:88
std::vector< uint8_t > getRawFile(const std::string &database, const std::string &collection, const std::string &fname)
Definition: repo_database_handler_mongo.cpp:846
static const std::list< std::string > ANY_DATABASE_ROLES
Built in any database roles. See http://docs.mongodb.org/manual/reference/built-in-roles/.
Definition: repo_database_handler_mongo.h:61
repo::core::model::RepoBSON findOneBySharedID(const std::string &database, const std::string &collection, const repoUUID &uuid, const std::string &sortField)
Definition: repo_database_handler_mongo.cpp:503
bool dropCollection(const std::string &database, const std::string &collection, std::string &errMsg)
Definition: repo_database_handler_mongo.cpp:193
static const std::string ADMIN_DATABASE
"uuid"
Definition: repo_database_handler_mongo.h:57
static const std::string UUID
"_id"
Definition: repo_database_handler_mongo.h:56
Definition: repo_connection_pool_mongo.h:36
std::list< std::string > getCollections(const std::string &database)
Definition: repo_database_handler_mongo.cpp:603
static void disconnectHandler()
Definition: repo_database_handler_mongo.cpp:179
Definition: repo_connection_pool_mongo.h:32
bool insertRole(const repo::core::model::RepoRole &role, std::string &errmsg)
Definition: repo_database_handler_mongo.h:396
static repo::core::model::RepoBSON * createBSONCredentials(const std::string &dbName, const std::string &username, const std::string &password, const bool &pwDigested=false)
Definition: repo_database_handler_mongo.h:142
std::list< std::string > getProjects(const std::string &database, const std::string &projectExt)
Definition: repo_database_handler_mongo.cpp:831
bool dropRole(const repo::core::model::RepoRole &role, std::string &errmsg)
Definition: repo_database_handler_mongo.h:337
bool dropDocument(const repo::core::model::RepoBSON bson, const std::string &database, const std::string &collection, std::string &errMsg)
Definition: repo_database_handler_mongo.cpp:249
Definition: repo_database_handler_abstract.h:37
bool insertUser(const repo::core::model::RepoUser &user, std::string &errmsg)
Definition: repo_database_handler_mongo.h:409
bool updateUser(const repo::core::model::RepoUser &user, std::string &errmsg)
Definition: repo_database_handler_mongo.h:452
std::vector< repo::core::model::RepoBSON > findAllByUniqueIDs(const std::string &database, const std::string &collection, const repo::core::model::RepoBSON &uuids)
Definition: repo_database_handler_mongo.cpp:456
static std::string getAdminDatabaseName()
Definition: repo_database_handler_mongo.h:248
bool insertDocument(const std::string &database, const std::string &collection, const repo::core::model::RepoBSON &obj, std::string &errMsg)
Definition: repo_database_handler_mongo.cpp:897
static MongoDatabaseHandler * getHandler(const std::string &host)
Definition: repo_database_handler_mongo.h:128
static MongoDatabaseHandler * getHandler(std::string &errMsg, const std::string &host, const int &port, const uint32_t &maxConnections=1, const std::string &dbName=std::string(), const std::string &username=std::string(), const std::string &password=std::string(), const bool &pwDigested=false)
Definition: repo_database_handler_mongo.cpp:748
bool dropDatabase(const std::string &database, std::string &errMsg)
Definition: repo_database_handler_mongo.cpp:222
std::vector< repo::core::model::RepoBSON > getAllFromCollectionTailable(const std::string &database, const std::string &collection, const uint64_t &skip=0, const uint32_t &limit=0, const std::list< std::string > &fields=std::list< std::string >(), const std::string &sortField=std::string(), const int &sortOrder=-1)
Definition: repo_database_handler_mongo.cpp:564
bool dropUser(const repo::core::model::RepoUser &user, std::string &errmsg)
Definition: repo_database_handler_mongo.h:350
bool dropRawFile(const std::string &database, const std::string &collection, const std::string &fileName, std::string &errMsg)
Definition: repo_database_handler_mongo.cpp:325
std::list< std::string > getStandardDatabaseRoles()
Definition: repo_database_handler_mongo.h:257
bool updateRole(const repo::core::model::RepoRole &role, std::string &errmsg)
Definition: repo_database_handler_mongo.h:439
std::list< std::string > getDatabases(const bool &sorted=true)
Definition: repo_database_handler_mongo.cpp:656
Definition: repo_bson.h:53
static const std::string SYSTEM_ROLES_COLLECTION
"admin"
Definition: repo_database_handler_mongo.h:58
static const std::string AUTH_MECH
"system.roles"
Definition: repo_database_handler_mongo.h:59
Definition: repo_bson_role.h:45
std::list< std::string > getAdminDatabaseRoles()
Definition: repo_database_handler_mongo.h:239
repo::core::model::CollectionStats getCollectionStats(const std::string &database, const std::string &collection, std::string &errMsg)
Definition: repo_database_handler_mongo.cpp:622
bool insertRawFile(const std::string &database, const std::string &collection, const std::string &fileName, const std::vector< uint8_t > &bin, std::string &errMsg, const std::string &contentType="binary/octet-stream")
Definition: repo_database_handler_mongo.cpp:929
virtual void createCollection(const std::string &database, const std::string &name)
Definition: repo_database_handler_mongo.cpp:135
std::map< std::string, std::list< std::string > > getDatabasesWithProjects(const std::list< std::string > &databases, const std::string &projectExt="history")
Definition: repo_database_handler_mongo.cpp:727
static const std::list< std::string > ADMIN_ONLY_DATABASE_ROLES
Built in admin database roles. See http://docs.mongodb.org/manual/reference/built-in-roles/.
Definition: repo_database_handler_mongo.h:63
bool upsertDocument(const std::string &database, const std::string &collection, const repo::core::model::RepoBSON &obj, const bool &overwrite, std::string &errMsg)
Definition: repo_database_handler_mongo.cpp:1120
Definition: repo_bson_user.h:69
repo::core::model::RepoBSON findOneByCriteria(const std::string &database, const std::string &collection, const repo::core::model::RepoBSON &criteria, const std::string &sortField="")
Definition: repo_database_handler_mongo.cpp:423
bool dropDocuments(const repo::core::model::RepoBSON criteria, const std::string &database, const std::string &collection, std::string &errMsg)
Definition: repo_database_handler_mongo.cpp:289
Definition: repo_database_handler_mongo.h:49
std::vector< repo::core::model::RepoBSON > findAllByCriteria(const std::string &database, const std::string &collection, const repo::core::model::RepoBSON &criteria)
Definition: repo_database_handler_mongo.cpp:384