summaryrefslogtreecommitdiffstats
path: root/contrib/libs/poco/Net/src/HTTPBasicCredentials.cpp
diff options
context:
space:
mode:
authorDevtools Arcadia <[email protected]>2022-02-07 18:08:42 +0300
committerDevtools Arcadia <[email protected]>2022-02-07 18:08:42 +0300
commit1110808a9d39d4b808aef724c861a2e1a38d2a69 (patch)
treee26c9fed0de5d9873cce7e00bc214573dc2195b7 /contrib/libs/poco/Net/src/HTTPBasicCredentials.cpp
intermediate changes
ref:cde9a383711a11544ce7e107a78147fb96cc4029
Diffstat (limited to 'contrib/libs/poco/Net/src/HTTPBasicCredentials.cpp')
-rw-r--r--contrib/libs/poco/Net/src/HTTPBasicCredentials.cpp134
1 files changed, 134 insertions, 0 deletions
diff --git a/contrib/libs/poco/Net/src/HTTPBasicCredentials.cpp b/contrib/libs/poco/Net/src/HTTPBasicCredentials.cpp
new file mode 100644
index 00000000000..5b5e89897e7
--- /dev/null
+++ b/contrib/libs/poco/Net/src/HTTPBasicCredentials.cpp
@@ -0,0 +1,134 @@
+//
+// HTTPBasicCredentials.cpp
+//
+// Library: Net
+// Package: HTTP
+// Module: HTTPBasicCredentials
+//
+// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "Poco/Net/HTTPBasicCredentials.h"
+#include "Poco/Net/HTTPRequest.h"
+#include "Poco/Net/NetException.h"
+#include "Poco/Base64Encoder.h"
+#include "Poco/Base64Decoder.h"
+#include "Poco/String.h"
+#include <sstream>
+
+
+using Poco::Base64Decoder;
+using Poco::Base64Encoder;
+using Poco::icompare;
+
+
+namespace Poco {
+namespace Net {
+
+
+const std::string HTTPBasicCredentials::SCHEME = "Basic";
+
+
+HTTPBasicCredentials::HTTPBasicCredentials()
+{
+}
+
+
+HTTPBasicCredentials::HTTPBasicCredentials(const std::string& username, const std::string& password):
+ _username(username),
+ _password(password)
+{
+}
+
+
+HTTPBasicCredentials::HTTPBasicCredentials(const HTTPRequest& request)
+{
+ std::string scheme;
+ std::string authInfo;
+ request.getCredentials(scheme, authInfo);
+ if (icompare(scheme, SCHEME) == 0)
+ {
+ parseAuthInfo(authInfo);
+ }
+ else throw NotAuthenticatedException("Basic authentication expected");
+}
+
+
+HTTPBasicCredentials::HTTPBasicCredentials(const std::string& authInfo)
+{
+ parseAuthInfo(authInfo);
+}
+
+
+HTTPBasicCredentials::~HTTPBasicCredentials()
+{
+}
+
+
+void HTTPBasicCredentials::clear()
+{
+ _username.clear();
+ _password.clear();
+}
+
+
+void HTTPBasicCredentials::setUsername(const std::string& username)
+{
+ _username = username;
+}
+
+
+void HTTPBasicCredentials::setPassword(const std::string& password)
+{
+ _password = password;
+}
+
+
+void HTTPBasicCredentials::authenticate(HTTPRequest& request) const
+{
+ std::ostringstream ostr;
+ Base64Encoder encoder(ostr);
+ encoder.rdbuf()->setLineLength(0);
+ encoder << _username << ":" << _password;
+ encoder.close();
+ request.setCredentials(SCHEME, ostr.str());
+}
+
+
+void HTTPBasicCredentials::proxyAuthenticate(HTTPRequest& request) const
+{
+ std::ostringstream ostr;
+ Base64Encoder encoder(ostr);
+ encoder.rdbuf()->setLineLength(0);
+ encoder << _username << ":" << _password;
+ encoder.close();
+ request.setProxyCredentials(SCHEME, ostr.str());
+}
+
+
+void HTTPBasicCredentials::parseAuthInfo(const std::string& authInfo)
+{
+ static const int eof = std::char_traits<char>::eof();
+
+ std::istringstream istr(authInfo);
+ Base64Decoder decoder(istr);
+ int ch = decoder.get();
+ while (ch != eof && ch != ':')
+ {
+ _username += (char) ch;
+ ch = decoder.get();
+ }
+ if (ch == ':') ch = decoder.get();
+ while (ch != eof)
+ {
+ _password += (char) ch;
+ ch = decoder.get();
+ }
+}
+
+
+} } // namespace Poco::Net