当前位置: 首页>>代码示例>>C++>>正文


C++ ResponseMessage::empty方法代码示例

本文整理汇总了C++中poco::mongodb::ResponseMessage::empty方法的典型用法代码示例。如果您正苦于以下问题:C++ ResponseMessage::empty方法的具体用法?C++ ResponseMessage::empty怎么用?C++ ResponseMessage::empty使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在poco::mongodb::ResponseMessage的用法示例。


在下文中一共展示了ResponseMessage::empty方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: authenticate

/// See https://pocoproject.org/forum/viewtopic.php?f=10&t=6326&p=11426&hilit=mongodb+auth#p11485
static void authenticate(Poco::MongoDB::Connection & connection,
	const std::string & database, const std::string & user, const std::string & password)
{
	Poco::MongoDB::Database db(database);

	/// Challenge-response authentication.
	std::string nonce;

	/// First step: request nonce.
	{
		auto command = db.createCommand();
		command->setNumberToReturn(1);
		command->selector().add<Int32>("getnonce", 1);

		Poco::MongoDB::ResponseMessage response;
		connection.sendRequest(*command, response);

		if (response.documents().empty())
			throw Exception("Cannot authenticate in MongoDB: server returned empty response for 'getnonce' command",
				ErrorCodes::MONGODB_CANNOT_AUTHENTICATE);

		auto doc = response.documents()[0];
		try
		{
			double ok = doc->get<double>("ok", 0);
			if (ok != 1)
				throw Exception("Cannot authenticate in MongoDB: server returned response for 'getnonce' command that"
					" has field 'ok' missing or having wrong value", ErrorCodes::MONGODB_CANNOT_AUTHENTICATE);

			nonce = doc->get<std::string>("nonce", "");
			if (nonce.empty())
				throw Exception("Cannot authenticate in MongoDB: server returned response for 'getnonce' command that"
					" has field 'nonce' missing or empty", ErrorCodes::MONGODB_CANNOT_AUTHENTICATE);
		}
		catch (Poco::NotFoundException & e)
		{
			throw Exception("Cannot authenticate in MongoDB: server returned response for 'getnonce' command that has missing required field: "
				+ e.displayText(), ErrorCodes::MONGODB_CANNOT_AUTHENTICATE);
		}
	}

	/// Second step: use nonce to calculate digest and send it back to the server.
	/// Digest is hex_md5(n.nonce + username + hex_md5(username + ":mongo:" + password))
	{
		std::string first = user + ":mongo:" + password;

		Poco::MD5Engine md5;
		md5.update(first);
		std::string digest_first(Poco::DigestEngine::digestToHex(md5.digest()));
		std::string second    =  nonce + user + digest_first;
		md5.reset();
		md5.update(second);
		std::string digest_second(Poco::DigestEngine::digestToHex(md5.digest()));

		auto command = db.createCommand();
		command->setNumberToReturn(1);
		command->selector()
			.add<Int32>("authenticate", 1)
			.add<std::string>("user", user)
			.add<std::string>("nonce", nonce)
			.add<std::string>("key", digest_second);

		Poco::MongoDB::ResponseMessage response;
		connection.sendRequest(*command, response);

		if (response.empty())
			throw Exception("Cannot authenticate in MongoDB: server returned empty response for 'authenticate' command",
				ErrorCodes::MONGODB_CANNOT_AUTHENTICATE);

		auto doc = response.documents()[0];
		try
		{
			double ok = doc->get<double>("ok", 0);
			if (ok != 1)
				throw Exception("Cannot authenticate in MongoDB: server returned response for 'authenticate' command that"
					" has field 'ok' missing or having wrong value", ErrorCodes::MONGODB_CANNOT_AUTHENTICATE);
		}
		catch (Poco::NotFoundException & e)
		{
			throw Exception("Cannot authenticate in MongoDB: server returned response for 'authenticate' command that has missing required field: "
				+ e.displayText(), ErrorCodes::MONGODB_CANNOT_AUTHENTICATE);
		}
	}
}
开发者ID:jacktang,项目名称:ClickHouse,代码行数:85,代码来源:MongoDBDictionarySource.cpp


注:本文中的poco::mongodb::ResponseMessage::empty方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。