aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/poco/Net/src/HTTPAuthenticationParams.cpp
diff options
context:
space:
mode:
authororivej <orivej@yandex-team.ru>2022-02-10 16:45:01 +0300
committerDaniil Cherednik <dcherednik@yandex-team.ru>2022-02-10 16:45:01 +0300
commit2d37894b1b037cf24231090eda8589bbb44fb6fc (patch)
treebe835aa92c6248212e705f25388ebafcf84bc7a1 /contrib/libs/poco/Net/src/HTTPAuthenticationParams.cpp
parent718c552901d703c502ccbefdfc3c9028d608b947 (diff)
downloadydb-2d37894b1b037cf24231090eda8589bbb44fb6fc.tar.gz
Restoring authorship annotation for <orivej@yandex-team.ru>. Commit 2 of 2.
Diffstat (limited to 'contrib/libs/poco/Net/src/HTTPAuthenticationParams.cpp')
-rw-r--r--contrib/libs/poco/Net/src/HTTPAuthenticationParams.cpp630
1 files changed, 315 insertions, 315 deletions
diff --git a/contrib/libs/poco/Net/src/HTTPAuthenticationParams.cpp b/contrib/libs/poco/Net/src/HTTPAuthenticationParams.cpp
index 5d97adcf67..1c01ac268f 100644
--- a/contrib/libs/poco/Net/src/HTTPAuthenticationParams.cpp
+++ b/contrib/libs/poco/Net/src/HTTPAuthenticationParams.cpp
@@ -1,316 +1,316 @@
-//
-// HTTPAuthenticationParams.cpp
-//
-// Library: Net
-// Package: HTTP
-// Module: HTTPAuthenticationParams
-//
-// Copyright (c) 2011, Anton V. Yabchinskiy (arn at bestmx dot ru).
-// Copyright (c) 2012, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#include "Poco/Exception.h"
-#include "Poco/Net/HTTPAuthenticationParams.h"
-#include "Poco/Net/HTTPRequest.h"
-#include "Poco/Net/HTTPResponse.h"
-#include "Poco/Net/NetException.h"
-#include "Poco/String.h"
-#include "Poco/Ascii.h"
-
-
-using Poco::icompare;
-using Poco::Ascii;
-
-
-namespace
-{
- bool mustBeQuoted(const std::string& name)
- {
- return
- icompare(name, "cnonce") == 0 ||
- icompare(name, "domain") == 0 ||
- icompare(name, "nonce") == 0 ||
- icompare(name, "opaque") == 0 ||
- icompare(name, "qop") == 0 ||
- icompare(name, "realm") == 0 ||
- icompare(name, "response") == 0 ||
- icompare(name, "uri") == 0 ||
- icompare(name, "username") == 0;
- }
-
-
- void formatParameter(std::string& result, const std::string& name, const std::string& value)
- {
- result += name;
- result += '=';
- if (mustBeQuoted(name))
- {
- result += '"';
- result += value;
- result += '"';
- }
- else
- {
- result += value;
- }
- }
-}
-
-
-namespace Poco {
-namespace Net {
-
-
-const std::string HTTPAuthenticationParams::REALM("realm");
-const std::string HTTPAuthenticationParams::WWW_AUTHENTICATE("WWW-Authenticate");
-const std::string HTTPAuthenticationParams::PROXY_AUTHENTICATE("Proxy-Authenticate");
-
-
-HTTPAuthenticationParams::HTTPAuthenticationParams()
-{
-}
-
-
-HTTPAuthenticationParams::HTTPAuthenticationParams(const std::string& authInfo)
-{
+//
+// HTTPAuthenticationParams.cpp
+//
+// Library: Net
+// Package: HTTP
+// Module: HTTPAuthenticationParams
+//
+// Copyright (c) 2011, Anton V. Yabchinskiy (arn at bestmx dot ru).
+// Copyright (c) 2012, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "Poco/Exception.h"
+#include "Poco/Net/HTTPAuthenticationParams.h"
+#include "Poco/Net/HTTPRequest.h"
+#include "Poco/Net/HTTPResponse.h"
+#include "Poco/Net/NetException.h"
+#include "Poco/String.h"
+#include "Poco/Ascii.h"
+
+
+using Poco::icompare;
+using Poco::Ascii;
+
+
+namespace
+{
+ bool mustBeQuoted(const std::string& name)
+ {
+ return
+ icompare(name, "cnonce") == 0 ||
+ icompare(name, "domain") == 0 ||
+ icompare(name, "nonce") == 0 ||
+ icompare(name, "opaque") == 0 ||
+ icompare(name, "qop") == 0 ||
+ icompare(name, "realm") == 0 ||
+ icompare(name, "response") == 0 ||
+ icompare(name, "uri") == 0 ||
+ icompare(name, "username") == 0;
+ }
+
+
+ void formatParameter(std::string& result, const std::string& name, const std::string& value)
+ {
+ result += name;
+ result += '=';
+ if (mustBeQuoted(name))
+ {
+ result += '"';
+ result += value;
+ result += '"';
+ }
+ else
+ {
+ result += value;
+ }
+ }
+}
+
+
+namespace Poco {
+namespace Net {
+
+
+const std::string HTTPAuthenticationParams::REALM("realm");
+const std::string HTTPAuthenticationParams::WWW_AUTHENTICATE("WWW-Authenticate");
+const std::string HTTPAuthenticationParams::PROXY_AUTHENTICATE("Proxy-Authenticate");
+
+
+HTTPAuthenticationParams::HTTPAuthenticationParams()
+{
+}
+
+
+HTTPAuthenticationParams::HTTPAuthenticationParams(const std::string& authInfo)
+{
+ fromAuthInfo(authInfo);
+}
+
+
+HTTPAuthenticationParams::HTTPAuthenticationParams(const HTTPRequest& request)
+{
+ fromRequest(request);
+}
+
+
+HTTPAuthenticationParams::HTTPAuthenticationParams(const HTTPResponse& response, const std::string& header)
+{
+ fromResponse(response, header);
+}
+
+
+HTTPAuthenticationParams::~HTTPAuthenticationParams()
+{
+}
+
+
+HTTPAuthenticationParams& HTTPAuthenticationParams::operator = (const HTTPAuthenticationParams& authParams)
+{
+ NameValueCollection::operator = (authParams);
+
+ return *this;
+}
+
+
+void HTTPAuthenticationParams::fromAuthInfo(const std::string& authInfo)
+{
+ parse(authInfo.begin(), authInfo.end());
+}
+
+
+void HTTPAuthenticationParams::fromRequest(const HTTPRequest& request)
+{
+ std::string scheme;
+ std::string authInfo;
+
+ request.getCredentials(scheme, authInfo);
+
+ if (icompare(scheme, "Digest") != 0)
+ throw InvalidArgumentException("Could not parse non-Digest authentication information", scheme);
+
fromAuthInfo(authInfo);
-}
-
-
-HTTPAuthenticationParams::HTTPAuthenticationParams(const HTTPRequest& request)
-{
- fromRequest(request);
-}
-
-
-HTTPAuthenticationParams::HTTPAuthenticationParams(const HTTPResponse& response, const std::string& header)
-{
- fromResponse(response, header);
-}
-
-
-HTTPAuthenticationParams::~HTTPAuthenticationParams()
-{
-}
-
-
-HTTPAuthenticationParams& HTTPAuthenticationParams::operator = (const HTTPAuthenticationParams& authParams)
-{
- NameValueCollection::operator = (authParams);
-
- return *this;
-}
-
-
-void HTTPAuthenticationParams::fromAuthInfo(const std::string& authInfo)
-{
- parse(authInfo.begin(), authInfo.end());
-}
-
-
-void HTTPAuthenticationParams::fromRequest(const HTTPRequest& request)
-{
- std::string scheme;
- std::string authInfo;
-
- request.getCredentials(scheme, authInfo);
-
- if (icompare(scheme, "Digest") != 0)
- throw InvalidArgumentException("Could not parse non-Digest authentication information", scheme);
-
- fromAuthInfo(authInfo);
-}
-
-
-void HTTPAuthenticationParams::fromResponse(const HTTPResponse& response, const std::string& header)
-{
- NameValueCollection::ConstIterator it = response.find(header);
- if (it == response.end())
- throw NotAuthenticatedException("HTTP response has no authentication header");
-
- bool found = false;
- while (!found && it != response.end() && icompare(it->first, header) == 0)
- {
- const std::string& header2 = it->second;
- if (icompare(header2, 0, 6, "Basic ") == 0)
- {
- parse(header2.begin() + 6, header2.end());
- found = true;
- }
- else if (icompare(header2, 0, 7, "Digest ") == 0)
- {
- parse(header2.begin() + 7, header2.end());
- found = true;
- }
- ++it;
- }
- if (!found) throw NotAuthenticatedException("No Basic or Digest authentication header found");
-}
-
-
-const std::string& HTTPAuthenticationParams::getRealm() const
-{
- return get(REALM);
-}
-
-
-void HTTPAuthenticationParams::setRealm(const std::string& realm)
-{
- set(REALM, realm);
-}
-
-
-std::string HTTPAuthenticationParams::toString() const
-{
- ConstIterator iter = begin();
- std::string result;
-
- if (iter != end())
- {
- formatParameter(result, iter->first, iter->second);
- ++iter;
- }
-
- for (; iter != end(); ++iter)
- {
- result.append(", ");
- formatParameter(result, iter->first, iter->second);
- }
-
- return result;
-}
-
-
-void HTTPAuthenticationParams::parse(std::string::const_iterator first, std::string::const_iterator last)
-{
- enum State
- {
- STATE_INITIAL = 0x0100,
- STATE_FINAL = 0x0200,
-
- STATE_SPACE = STATE_INITIAL | 0,
- STATE_TOKEN = 1,
- STATE_EQUALS = 2,
- STATE_VALUE = STATE_FINAL | 3,
- STATE_VALUE_QUOTED = 4,
- STATE_VALUE_ESCAPE = 5,
- STATE_COMMA = STATE_FINAL | 6
- };
-
- int state = STATE_SPACE;
- std::string token;
- std::string value;
-
- for (std::string::const_iterator it = first; it != last; ++it)
- {
- switch (state)
- {
- case STATE_SPACE:
- if (Ascii::isAlphaNumeric(*it) || *it == '_' || *it == '-')
- {
- token += *it;
- state = STATE_TOKEN;
- }
- else if (Ascii::isSpace(*it))
- {
- // Skip
- }
- else throw SyntaxException("Invalid authentication information");
- break;
-
- case STATE_TOKEN:
- if (*it == '=')
- {
- state = STATE_EQUALS;
- }
- else if (Ascii::isAlphaNumeric(*it) || *it == '_' || *it == '-')
- {
- token += *it;
- }
- else throw SyntaxException("Invalid authentication information");
- break;
-
- case STATE_EQUALS:
- if (Ascii::isAlphaNumeric(*it) || *it == '_')
- {
- value += *it;
- state = STATE_VALUE;
- }
- else if (*it == '"')
- {
- state = STATE_VALUE_QUOTED;
- }
- else throw SyntaxException("Invalid authentication information");
- break;
-
- case STATE_VALUE_QUOTED:
- if (*it == '\\')
- {
- state = STATE_VALUE_ESCAPE;
- }
- else if (*it == '"')
- {
- add(token, value);
- token.clear();
- value.clear();
- state = STATE_COMMA;
- }
- else
- {
- value += *it;
- }
- break;
-
- case STATE_VALUE_ESCAPE:
- value += *it;
- state = STATE_VALUE_QUOTED;
- break;
-
- case STATE_VALUE:
- if (Ascii::isSpace(*it))
- {
- add(token, value);
- token.clear();
- value.clear();
- state = STATE_COMMA;
- }
- else if (*it == ',')
- {
- add(token, value);
- token.clear();
- value.clear();
- state = STATE_SPACE;
- }
- else
- {
- value += *it;
- }
- break;
-
- case STATE_COMMA:
- if (*it == ',')
- {
- state = STATE_SPACE;
- }
- else if (Ascii::isSpace(*it))
- {
- // Skip
- }
- else throw SyntaxException("Invalid authentication information");
- break;
- }
- }
-
- if (state == STATE_VALUE)
- add(token, value);
-
- if (!(state & STATE_FINAL))
- throw SyntaxException("Invalid authentication information");
-}
-
-
-} } // namespace Poco::Net
+}
+
+
+void HTTPAuthenticationParams::fromResponse(const HTTPResponse& response, const std::string& header)
+{
+ NameValueCollection::ConstIterator it = response.find(header);
+ if (it == response.end())
+ throw NotAuthenticatedException("HTTP response has no authentication header");
+
+ bool found = false;
+ while (!found && it != response.end() && icompare(it->first, header) == 0)
+ {
+ const std::string& header2 = it->second;
+ if (icompare(header2, 0, 6, "Basic ") == 0)
+ {
+ parse(header2.begin() + 6, header2.end());
+ found = true;
+ }
+ else if (icompare(header2, 0, 7, "Digest ") == 0)
+ {
+ parse(header2.begin() + 7, header2.end());
+ found = true;
+ }
+ ++it;
+ }
+ if (!found) throw NotAuthenticatedException("No Basic or Digest authentication header found");
+}
+
+
+const std::string& HTTPAuthenticationParams::getRealm() const
+{
+ return get(REALM);
+}
+
+
+void HTTPAuthenticationParams::setRealm(const std::string& realm)
+{
+ set(REALM, realm);
+}
+
+
+std::string HTTPAuthenticationParams::toString() const
+{
+ ConstIterator iter = begin();
+ std::string result;
+
+ if (iter != end())
+ {
+ formatParameter(result, iter->first, iter->second);
+ ++iter;
+ }
+
+ for (; iter != end(); ++iter)
+ {
+ result.append(", ");
+ formatParameter(result, iter->first, iter->second);
+ }
+
+ return result;
+}
+
+
+void HTTPAuthenticationParams::parse(std::string::const_iterator first, std::string::const_iterator last)
+{
+ enum State
+ {
+ STATE_INITIAL = 0x0100,
+ STATE_FINAL = 0x0200,
+
+ STATE_SPACE = STATE_INITIAL | 0,
+ STATE_TOKEN = 1,
+ STATE_EQUALS = 2,
+ STATE_VALUE = STATE_FINAL | 3,
+ STATE_VALUE_QUOTED = 4,
+ STATE_VALUE_ESCAPE = 5,
+ STATE_COMMA = STATE_FINAL | 6
+ };
+
+ int state = STATE_SPACE;
+ std::string token;
+ std::string value;
+
+ for (std::string::const_iterator it = first; it != last; ++it)
+ {
+ switch (state)
+ {
+ case STATE_SPACE:
+ if (Ascii::isAlphaNumeric(*it) || *it == '_' || *it == '-')
+ {
+ token += *it;
+ state = STATE_TOKEN;
+ }
+ else if (Ascii::isSpace(*it))
+ {
+ // Skip
+ }
+ else throw SyntaxException("Invalid authentication information");
+ break;
+
+ case STATE_TOKEN:
+ if (*it == '=')
+ {
+ state = STATE_EQUALS;
+ }
+ else if (Ascii::isAlphaNumeric(*it) || *it == '_' || *it == '-')
+ {
+ token += *it;
+ }
+ else throw SyntaxException("Invalid authentication information");
+ break;
+
+ case STATE_EQUALS:
+ if (Ascii::isAlphaNumeric(*it) || *it == '_')
+ {
+ value += *it;
+ state = STATE_VALUE;
+ }
+ else if (*it == '"')
+ {
+ state = STATE_VALUE_QUOTED;
+ }
+ else throw SyntaxException("Invalid authentication information");
+ break;
+
+ case STATE_VALUE_QUOTED:
+ if (*it == '\\')
+ {
+ state = STATE_VALUE_ESCAPE;
+ }
+ else if (*it == '"')
+ {
+ add(token, value);
+ token.clear();
+ value.clear();
+ state = STATE_COMMA;
+ }
+ else
+ {
+ value += *it;
+ }
+ break;
+
+ case STATE_VALUE_ESCAPE:
+ value += *it;
+ state = STATE_VALUE_QUOTED;
+ break;
+
+ case STATE_VALUE:
+ if (Ascii::isSpace(*it))
+ {
+ add(token, value);
+ token.clear();
+ value.clear();
+ state = STATE_COMMA;
+ }
+ else if (*it == ',')
+ {
+ add(token, value);
+ token.clear();
+ value.clear();
+ state = STATE_SPACE;
+ }
+ else
+ {
+ value += *it;
+ }
+ break;
+
+ case STATE_COMMA:
+ if (*it == ',')
+ {
+ state = STATE_SPACE;
+ }
+ else if (Ascii::isSpace(*it))
+ {
+ // Skip
+ }
+ else throw SyntaxException("Invalid authentication information");
+ break;
+ }
+ }
+
+ if (state == STATE_VALUE)
+ add(token, value);
+
+ if (!(state & STATE_FINAL))
+ throw SyntaxException("Invalid authentication information");
+}
+
+
+} } // namespace Poco::Net