mirror of
https://github.com/pocoproject/poco.git
synced 2025-10-28 19:51:58 +01:00
Add password field for Redis Client (#1838)
* Add password field for Redis Client * Revert change for constructor and add property for authenticated result * Correct createObject when no password * Fix compile problem and add type check before return object * Remove password property in Redis pool factory * Remove validate for no password case * Correct return value for empty password
This commit is contained in:
committed by
Aleksandar Fabijanic
parent
6714322122
commit
0aec1e162f
@@ -115,6 +115,12 @@ public:
|
|||||||
void connect(const Net::SocketAddress& addrs, const Timespan& timeout);
|
void connect(const Net::SocketAddress& addrs, const Timespan& timeout);
|
||||||
/// Connects to the given Redis server.
|
/// Connects to the given Redis server.
|
||||||
|
|
||||||
|
bool sendAuth(const std::string& password);
|
||||||
|
/// Sends password to Redis server
|
||||||
|
|
||||||
|
bool isAuthenticated();
|
||||||
|
/// Returns true when the client is authenticated
|
||||||
|
|
||||||
void disconnect();
|
void disconnect();
|
||||||
/// Disconnects from the Redis server.
|
/// Disconnects from the Redis server.
|
||||||
|
|
||||||
@@ -198,6 +204,7 @@ private:
|
|||||||
Net::StreamSocket _socket;
|
Net::StreamSocket _socket;
|
||||||
RedisInputStream* _input;
|
RedisInputStream* _input;
|
||||||
RedisOutputStream* _output;
|
RedisOutputStream* _output;
|
||||||
|
bool _authenticated;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -231,6 +238,10 @@ inline void Client::setReceiveTimeout(const Timespan& timeout)
|
|||||||
_socket.setReceiveTimeout(timeout);
|
_socket.setReceiveTimeout(timeout);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline bool Client::isAuthenticated()
|
||||||
|
{
|
||||||
|
return _authenticated;
|
||||||
|
}
|
||||||
|
|
||||||
} } // namespace Poco::Redis
|
} } // namespace Poco::Redis
|
||||||
|
|
||||||
|
|||||||
@@ -90,8 +90,11 @@ public:
|
|||||||
virtual ~PooledConnection()
|
virtual ~PooledConnection()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
{
|
||||||
|
if (_client)
|
||||||
{
|
{
|
||||||
_pool.returnObject(_client);
|
_pool.returnObject(_client);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (...)
|
catch (...)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -28,7 +28,8 @@ Client::Client():
|
|||||||
_address(),
|
_address(),
|
||||||
_socket(),
|
_socket(),
|
||||||
_input(0),
|
_input(0),
|
||||||
_output(0)
|
_output(0),
|
||||||
|
_authenticated(false)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -37,7 +38,8 @@ Client::Client(const std::string& hostAndPort):
|
|||||||
_address(hostAndPort),
|
_address(hostAndPort),
|
||||||
_socket(),
|
_socket(),
|
||||||
_input(0),
|
_input(0),
|
||||||
_output(0)
|
_output(0),
|
||||||
|
_authenticated(false)
|
||||||
{
|
{
|
||||||
connect();
|
connect();
|
||||||
}
|
}
|
||||||
@@ -47,7 +49,8 @@ Client::Client(const std::string& host, int port):
|
|||||||
_address(host, port),
|
_address(host, port),
|
||||||
_socket(),
|
_socket(),
|
||||||
_input(0),
|
_input(0),
|
||||||
_output(0)
|
_output(0),
|
||||||
|
_authenticated(false)
|
||||||
{
|
{
|
||||||
connect();
|
connect();
|
||||||
}
|
}
|
||||||
@@ -57,7 +60,8 @@ Client::Client(const Net::SocketAddress& addrs):
|
|||||||
_address(addrs),
|
_address(addrs),
|
||||||
_socket(),
|
_socket(),
|
||||||
_input(0),
|
_input(0),
|
||||||
_output(0)
|
_output(0),
|
||||||
|
_authenticated(false)
|
||||||
{
|
{
|
||||||
connect();
|
connect();
|
||||||
}
|
}
|
||||||
@@ -67,6 +71,7 @@ Client::~Client()
|
|||||||
{
|
{
|
||||||
delete _input;
|
delete _input;
|
||||||
delete _output;
|
delete _output;
|
||||||
|
_socket.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -134,6 +139,26 @@ void Client::connect(const Net::SocketAddress& addrs, const Timespan& timeout)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool Client::sendAuth(const std::string& password)
|
||||||
|
{
|
||||||
|
Array cmd;
|
||||||
|
cmd << "AUTH" << password;
|
||||||
|
|
||||||
|
bool ret = true;
|
||||||
|
std::string response;
|
||||||
|
|
||||||
|
try {
|
||||||
|
response = execute<std::string>(cmd);
|
||||||
|
} catch (...) {
|
||||||
|
ret = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
_authenticated = (ret && (response == "OK"));
|
||||||
|
|
||||||
|
return _authenticated;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void Client::disconnect()
|
void Client::disconnect()
|
||||||
{
|
{
|
||||||
delete _input;
|
delete _input;
|
||||||
|
|||||||
Reference in New Issue
Block a user