bool MongoDatabaseHandler::performUserCmd( const OPERATION &op, const repo::core::model::RepoUser &user, std::string &errMsg) { bool success = true; mongo::DBClientBase *worker; if (!user.isEmpty()) { try{ worker = workerPool->getWorker(); repo::core::model::RepoBSONBuilder cmdBuilder; std::string username = user.getUserName(); switch (op) { case OPERATION::INSERT: cmdBuilder << "createUser" << username; break; case OPERATION::UPDATE: cmdBuilder << "updateUser" << username; break; case OPERATION::DROP: cmdBuilder << "dropUser" << username; } if (op != OPERATION::DROP) { std::string pw = user.getCleartextPassword(); if (!pw.empty()) cmdBuilder << "pwd" << pw; repo::core::model::RepoBSON customData = user.getCustomDataBSON(); if (!customData.isEmpty()) cmdBuilder << "customData" << customData; //compulsory, so no point checking if it's empty cmdBuilder.appendArray("roles", user.getRolesBSON()); } mongo::BSONObj info; worker->runCommand(ADMIN_DATABASE, cmdBuilder.obj(), info); std::string cmdError = info.getStringField("errmsg"); if (!cmdError.empty()) { success = false; errMsg += cmdError; } } catch (mongo::DBException &e) { success = false; std::string errString(e.what()); errMsg += errString; } workerPool->returnWorker(worker); } else { errMsg += "User bson is empty"; } return success; }