diff options
author | Jeremy Evans <code@jeremyevans.net> | 2021-03-04 14:05:18 -0800 |
---|---|---|
committer | git <svn-admin@ruby-lang.org> | 2022-05-12 14:54:37 +0900 |
commit | fbebfe1697938a684f460cd28af36cf1f056513c (patch) | |
tree | 22771001917053627d5562d7725ead5344220fb6 /lib/uri/generic.rb | |
parent | 054ae999dc5dfcb182f407bffceec5a52ae7ff6c (diff) |
[ruby/uri] Add URI::Generic#decoded_#{user,password}
URI::Generic#{user,password} return the encoded values, which are
not that useful if you want to do authentication with them.
Automatic decoding by default would break backwards compatibility.
Optional automatic decoding via a keyword to URI.parse would
require threading the option through at least 3 other methods, and
would make semantics confusing (user= takes encoded or unencoded
password?) or require more work. Thus, adding this as a separate
method seemed the simplest approach.
Unfortunately, URI lacks a method for correct decoding. Unlike in
www form components, + in earlier parts of the URI such as the
userinfo section is treated verbatim and not as an encoded space.
Add URI.#{en,de}code_uri_component methods, which are almost the
same as URI.#{en,de}code_www_form_component, but without the
special SP => + handling.
Implements [Feature #9045]
https://github.com/ruby/uri/commit/16cfc4e92f
Diffstat (limited to 'lib/uri/generic.rb')
-rw-r--r-- | lib/uri/generic.rb | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/lib/uri/generic.rb b/lib/uri/generic.rb index cfa0de6b74..69698c4e2d 100644 --- a/lib/uri/generic.rb +++ b/lib/uri/generic.rb @@ -564,16 +564,26 @@ module URI end end - # Returns the user component. + # Returns the user component (without URI decoding). def user @user end - # Returns the password component. + # Returns the password component (without URI decoding). def password @password end + # Returns the user component after URI decoding. + def decoded_user + URI.decode_uri_component(@user) if @user + end + + # Returns the password component after URI decoding. + def decoded_password + URI.decode_uri_component(@password) if @password + end + # # Checks the host +v+ component for RFC2396 compliance # and against the URI::Parser Regexp for :HOST. |