diff options
author | Kevin Smith <git@kismith.co.uk> | 2011-05-18 09:23:43 (GMT) |
---|---|---|
committer | Kevin Smith <git@kismith.co.uk> | 2011-05-22 10:25:20 (GMT) |
commit | 106a3b296e37178ed6ee227120771116732ef6eb (patch) | |
tree | dec4ace2eaebdb462d138f3ac658391cc36b58d3 /Swiften/Client | |
parent | 206a1e4dc8a7362196b5e34193556a65895e4517 (diff) | |
download | swift-106a3b296e37178ed6ee227120771116732ef6eb.zip swift-106a3b296e37178ed6ee227120771116732ef6eb.tar.bz2 |
Eagle mode.
Disables password persistence.
Diffstat (limited to 'Swiften/Client')
-rw-r--r-- | Swiften/Client/ClientOptions.h | 12 | ||||
-rw-r--r-- | Swiften/Client/CoreClient.cpp | 24 | ||||
-rw-r--r-- | Swiften/Client/CoreClient.h | 1 |
3 files changed, 33 insertions, 4 deletions
diff --git a/Swiften/Client/ClientOptions.h b/Swiften/Client/ClientOptions.h index 1155b46..cc80dc2 100644 --- a/Swiften/Client/ClientOptions.h +++ b/Swiften/Client/ClientOptions.h @@ -12,7 +12,7 @@ struct ClientOptions { UseTLSWhenAvailable }; - ClientOptions() : useStreamCompression(true), useTLS(UseTLSWhenAvailable), useStreamResumption(false) { + ClientOptions() : useStreamCompression(true), useTLS(UseTLSWhenAvailable), useStreamResumption(false), forgetPassword(false) { } /** @@ -35,5 +35,15 @@ struct ClientOptions { * Default: false */ bool useStreamResumption; + + /** + * Forget the password once it's used. + * This makes the Client useless after the first login attempt. + * + * FIXME: This is a temporary workaround. + * + * Default: false + */ + bool forgetPassword; }; diff --git a/Swiften/Client/CoreClient.cpp b/Swiften/Client/CoreClient.cpp index 9521bd9..8684de2 100644 --- a/Swiften/Client/CoreClient.cpp +++ b/Swiften/Client/CoreClient.cpp @@ -9,6 +9,10 @@ #include <boost/bind.hpp> #include <boost/smart_ptr/make_shared.hpp> +#include <Swiften/Base/IDGenerator.h> +#include <Swiften/Base/Log.h> +#include <Swiften/Base/foreach.h> +#include <Swiften/Base/Algorithm.h> #include <Swiften/Client/ClientSession.h> #include <Swiften/TLS/PlatformTLSFactories.h> #include <Swiften/TLS/CertificateVerificationError.h> @@ -17,10 +21,7 @@ #include <Swiften/TLS/PKCS12Certificate.h> #include <Swiften/Session/BasicSessionStream.h> #include <Swiften/Queries/IQRouter.h> -#include <Swiften/Base/IDGenerator.h> #include <Swiften/Client/ClientSessionStanzaChannel.h> -#include <Swiften/Base/Log.h> -#include <Swiften/Base/foreach.h> #include <Swiften/Network/PlatformProxyProvider.h> #include <Swiften/Network/SOCKS5ProxiedConnectionFactory.h> #include <Swiften/Network/HTTPConnectProxiedConnectionFactory.h> @@ -50,6 +51,7 @@ CoreClient::~CoreClient() { stanzaChannel_->onPresenceReceived.disconnect(boost::bind(&CoreClient::handlePresenceReceived, this, _1)); stanzaChannel_->onStanzaAcked.disconnect(boost::bind(&CoreClient::handleStanzaAcked, this, _1)); delete stanzaChannel_; + purgePassword(); } void CoreClient::connect(const ClientOptions& o) { @@ -88,6 +90,9 @@ void CoreClient::handleConnectorFinished(boost::shared_ptr<Connection> connectio } if (!connection) { + if (options.forgetPassword) { + purgePassword(); + } onDisconnected(disconnectRequested_ ? boost::optional<ClientError>() : boost::optional<ClientError>(ClientError::ConnectionError)); } else { @@ -121,6 +126,9 @@ void CoreClient::handleConnectorFinished(boost::shared_ptr<Connection> connectio } void CoreClient::disconnect() { + if (options.forgetPassword) { + purgePassword(); + } // FIXME: We should be able to do without this boolean. We just have to make sure we can tell the difference between // connector finishing without a connection due to an error or because of a disconnect. disconnectRequested_ = true; @@ -137,6 +145,9 @@ void CoreClient::setCertificate(const std::string& certificate) { } void CoreClient::handleSessionFinished(boost::shared_ptr<Error> error) { + if (options.forgetPassword) { + purgePassword(); + } session_->onFinished.disconnect(boost::bind(&CoreClient::handleSessionFinished, this, _1)); session_->onNeedCredentials.disconnect(boost::bind(&CoreClient::handleNeedCredentials, this)); @@ -248,6 +259,9 @@ void CoreClient::handleSessionFinished(boost::shared_ptr<Error> error) { void CoreClient::handleNeedCredentials() { assert(session_); session_->sendCredentials(password_); + if (options.forgetPassword) { + purgePassword(); + } } void CoreClient::handleDataRead(const std::string& data) { @@ -318,4 +332,8 @@ const JID& CoreClient::getJID() const { } } +void CoreClient::purgePassword() { + safeClear(password_); +} + } diff --git a/Swiften/Client/CoreClient.h b/Swiften/Client/CoreClient.h index 6dc8392..9806d35 100644 --- a/Swiften/Client/CoreClient.h +++ b/Swiften/Client/CoreClient.h @@ -199,6 +199,7 @@ namespace Swift { void handlePresenceReceived(boost::shared_ptr<Presence>); void handleMessageReceived(boost::shared_ptr<Message>); void handleStanzaAcked(boost::shared_ptr<Stanza>); + void purgePassword(); private: JID jid_; |