def makeNewDb(dbName: String, dbUser: String, dbPass: String): Try[BSONDocument] = {
val checkUri: Try[ParsedURI] = MongoConnection.parseURI(config.getString("admindb.uri").get)
val database: Future[DefaultDB] = reactiveMongoApi.driver.connection(checkUri.get).database("admin")
val createUsrCmd = BSONDocument("createUser" -> dbUser, "pwd" -> dbPass,
"roles" -> BSONArray(BSONDocument("role" -> "readWrite", "db" -> dbName)))
val runner: CommandWithPackRunner[BSONSerializationPack.type] = Command.run(BSONSerializationPack, FailoverStrategy.default)
val defDb: DefaultDB = Await.result(database, Duration(5, TimeUnit.SECONDS))
val siblingDb: DefaultDB = defDb.sibling(dbName)
val create = siblingDb[BSONCollection]("deleteme").create()
val one: Future[BSONDocument] = runner.apply(siblingDb, runner.rawCommand(createUsrCmd)).one(ReadPreference.primaryPreferred)
val result: Future[Try[BSONDocument]] = one map (document => {
if (document.contains("errmsg")) {
val errMsg: String = document.getAs[String]("errmsg").get
LOG.error(s"Failed to add new user ${dbUser} for the database: ${errMsg}")
Failure[BSONDocument](new Error(errMsg))
}
else {
LOG.debug(s"Successfully finished adding new user ${dbUser} for the database: ${dbName} ")
Success[BSONDocument](document)
}
})
Await.result(result, Duration(3, duration.SECONDS))
}