Line data Source code
1 : // 2 : // Copyright (c) 2016-2019 Vinnie Falco (vinnie dot falco at gmail dot com) 3 : // 4 : // Distributed under the Boost Software License, Version 1.0. (See accompanying 5 : // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 6 : // 7 : // Official repository: https://github.com/boostorg/url 8 : // 9 : 10 : 11 : #include <boost/url/detail/config.hpp> 12 : #include "userinfo_rule.hpp" 13 : #include <boost/core/detail/string_view.hpp> 14 : #include <boost/url/rfc/pct_encoded_rule.hpp> 15 : #include <boost/url/rfc/sub_delim_chars.hpp> 16 : #include <boost/url/rfc/unreserved_chars.hpp> 17 : #include <boost/url/grammar/parse.hpp> 18 : 19 : namespace boost { 20 : namespace urls { 21 : namespace detail { 22 : 23 : auto 24 1808 : userinfo_rule_t:: 25 : parse( 26 : char const*& it, 27 : char const* const end 28 : ) const noexcept -> 29 : system::result<value_type> 30 : { 31 : static constexpr auto uchars = 32 : unreserved_chars + 33 : sub_delim_chars; 34 : static constexpr auto pwchars = 35 : uchars + ':'; 36 : 37 1808 : value_type t; 38 : 39 : // user 40 : auto rv = grammar::parse( 41 1808 : it, end, pct_encoded_rule( 42 1808 : grammar::ref(uchars))); 43 1808 : if(! rv) 44 8 : return rv.error(); 45 1800 : t.user = *rv; 46 : 47 : // ':' 48 1800 : if( it == end || 49 1543 : *it != ':') 50 : { 51 1383 : t.has_password = false; 52 1383 : t.password = {}; 53 1383 : return t; 54 : } 55 417 : ++it; 56 : 57 : // pass 58 : rv = grammar::parse( 59 417 : it, end, pct_encoded_rule( 60 417 : grammar::ref(pwchars))); 61 417 : if(! rv) 62 0 : return rv.error(); 63 : 64 417 : t.has_password = true; 65 417 : t.password = *rv; 66 417 : return t; 67 : } 68 : 69 : } // detail 70 : } // urls 71 : } // boost 72 :