1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef NET_HTTP_HTTP_AUTH_CHALLENGE_TOKENIZER_ 6#define NET_HTTP_HTTP_AUTH_CHALLENGE_TOKENIZER_ 7 8#include <string> 9 10#include "net/base/net_export.h" 11#include "net/http/http_util.h" 12 13namespace net { 14 15// Breaks up a challenge string into the the auth scheme and parameter list, 16// according to RFC 2617 Sec 1.2: 17// challenge = auth-scheme 1*SP 1#auth-param 18// 19// Depending on the challenge scheme, it may be appropriate to interpret the 20// parameters as either a base-64 encoded string or a comma-delimited list 21// of name-value pairs. param_pairs() and base64_param() methods are provided 22// to support either usage. 23class NET_EXPORT_PRIVATE HttpAuthChallengeTokenizer { 24 public: 25 HttpAuthChallengeTokenizer(std::string::const_iterator begin, 26 std::string::const_iterator end); 27 28 // Get the original text. 29 std::string challenge_text() const { 30 return std::string(begin_, end_); 31 } 32 33 // Get the auth scheme of the challenge. 34 std::string::const_iterator scheme_begin() const { return scheme_begin_; } 35 std::string::const_iterator scheme_end() const { return scheme_end_; } 36 std::string scheme() const { 37 return std::string(scheme_begin_, scheme_end_); 38 } 39 40 std::string::const_iterator params_begin() const { return params_begin_; } 41 std::string::const_iterator params_end() const { return params_end_; } 42 HttpUtil::NameValuePairsIterator param_pairs() const; 43 std::string base64_param() const; 44 45 private: 46 void Init(std::string::const_iterator begin, 47 std::string::const_iterator end); 48 49 std::string::const_iterator begin_; 50 std::string::const_iterator end_; 51 52 std::string::const_iterator scheme_begin_; 53 std::string::const_iterator scheme_end_; 54 55 std::string::const_iterator params_begin_; 56 std::string::const_iterator params_end_; 57}; 58 59} // namespace net 60 61#endif // NET_HTTP_HTTP_AUTH_CHALLENGE_TOKENIZER_ 62