signet 0.10.0 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +3 -0
- data/lib/signet/oauth_1/server.rb +10 -4
- data/lib/signet/oauth_2.rb +1 -1
- data/lib/signet/oauth_2/client.rb +31 -9
- data/lib/signet/version.rb +18 -18
- data/spec/signet/oauth_2/client_spec.rb +10 -0
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: ee45b6d3e6075bfd1d1e5b2fae2830e0f981b2e70e7bb075422e51e20b12f4e8
         | 
| 4 | 
            +
              data.tar.gz: 3f019f83eda28d4e0a2b80da812c181f605eae19ecc5b138f9ceee2cfd686fbc
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 4e9f7704e31e89ecb6b8b24c6f09d1d13615cdfc7ba2d165384ab854be0f33c175bc38db7fd138070fdafff73d33676b96d8e1403b10128e811c25311cd15bf8
         | 
| 7 | 
            +
              data.tar.gz: 399c408f37ef1cd30d0e0d31dab9d80ebed8a917e659d252905f4d162511edf2f88d72e27cf8b0792794245ce8e06ae769c473aa94f4c559dcea9e222e221785
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    
| @@ -13,7 +13,6 @@ | |
| 13 13 | 
             
            #    limitations under the License.
         | 
| 14 14 | 
             
            #
         | 
| 15 15 | 
             
            require 'faraday'
         | 
| 16 | 
            -
             | 
| 17 16 | 
             
            require 'stringio'
         | 
| 18 17 | 
             
            require 'addressable/uri'
         | 
| 19 18 | 
             
            require 'signet'
         | 
| @@ -57,6 +56,13 @@ module Signet | |
| 57 56 | 
             
                       instance_variable_set("@#{attr}", options[attr])
         | 
| 58 57 | 
             
                    end
         | 
| 59 58 | 
             
                  end
         | 
| 59 | 
            +
             
         | 
| 60 | 
            +
                  # Constant time string comparison.
         | 
| 61 | 
            +
                  def safe_equals?(a, b)
         | 
| 62 | 
            +
                    check = a.bytesize ^ b.bytesize
         | 
| 63 | 
            +
                    a.bytes.zip(b.bytes) { |x, y| check |= x ^ y.to_i }
         | 
| 64 | 
            +
                    check == 0
         | 
| 65 | 
            +
                  end
         | 
| 60 66 |  | 
| 61 67 | 
             
                  ##
         | 
| 62 68 | 
             
                  # Determine if the supplied nonce/timestamp pair is valid by calling
         | 
| @@ -285,7 +291,7 @@ module Signet | |
| 285 291 | 
             
                      client_credential_secret,
         | 
| 286 292 | 
             
                      nil
         | 
| 287 293 | 
             
                    )
         | 
| 288 | 
            -
                    if(computed_signature  | 
| 294 | 
            +
                    if safe_equals?(computed_signature, auth_hash['oauth_signature'])
         | 
| 289 295 | 
             
                      if(auth_hash.fetch('oauth_callback', 'oob').empty?)
         | 
| 290 296 | 
             
                        'oob'
         | 
| 291 297 | 
             
                      else
         | 
| @@ -363,7 +369,7 @@ module Signet | |
| 363 369 | 
             
                      temporary_credential.secret
         | 
| 364 370 | 
             
                    )
         | 
| 365 371 |  | 
| 366 | 
            -
                    if(computed_signature  | 
| 372 | 
            +
                    if safe_equals?(computed_signature, auth_hash['oauth_signature'])
         | 
| 367 373 | 
             
                      {:client_credential=>client_credential,
         | 
| 368 374 | 
             
                        :temporary_credential=>temporary_credential,
         | 
| 369 375 | 
             
                        :realm=>auth_hash['realm']
         | 
| @@ -490,7 +496,7 @@ module Signet | |
| 490 496 | 
             
                      token_credential_secret
         | 
| 491 497 | 
             
                    )
         | 
| 492 498 |  | 
| 493 | 
            -
                    if(computed_signature  | 
| 499 | 
            +
                    if safe_equals?(computed_signature, auth_hash['oauth_signature'])
         | 
| 494 500 | 
             
                      {:client_credential=>client_credential,
         | 
| 495 501 | 
             
                       :token_credential=>token_credential,
         | 
| 496 502 | 
             
                       :realm=>auth_hash['realm']
         | 
    
        data/lib/signet/oauth_2.rb
    CHANGED
    
    | @@ -142,7 +142,7 @@ module Signet #:nodoc: | |
| 142 142 | 
             
                # @return [String] The authorization URI to redirect the user to.
         | 
| 143 143 | 
             
                def self.generate_authorization_uri(authorization_uri, parameters={})
         | 
| 144 144 | 
             
                  for key, value in parameters
         | 
| 145 | 
            -
                    parameters.delete(key) if value | 
| 145 | 
            +
                    parameters.delete(key) if value.nil?
         | 
| 146 146 | 
             
                  end
         | 
| 147 147 | 
             
                  parsed_uri = Addressable::URI.parse(authorization_uri).dup
         | 
| 148 148 | 
             
                  query_values = parsed_uri.query_values || {}
         | 
| @@ -89,7 +89,7 @@ module Signet | |
| 89 89 | 
             
                  #   )
         | 
| 90 90 | 
             
                  #
         | 
| 91 91 | 
             
                  # @see Signet::OAuth2::Client#update!
         | 
| 92 | 
            -
                  def initialize | 
| 92 | 
            +
                  def initialize options={}
         | 
| 93 93 | 
             
                    @authorization_uri    = nil
         | 
| 94 94 | 
             
                    @token_credential_uri = nil
         | 
| 95 95 | 
             
                    @client_id            = nil
         | 
| @@ -104,6 +104,7 @@ module Signet | |
| 104 104 | 
             
                    @scope                = nil
         | 
| 105 105 | 
             
                    @state                = nil
         | 
| 106 106 | 
             
                    @username             = nil
         | 
| 107 | 
            +
                    @access_type          = nil
         | 
| 107 108 | 
             
                    self.update!(options)
         | 
| 108 109 | 
             
                  end
         | 
| 109 110 |  | 
| @@ -152,6 +153,8 @@ module Signet | |
| 152 153 | 
             
                  #     to be refreshed.
         | 
| 153 154 | 
             
                  #   - <code>:access_token</code> -
         | 
| 154 155 | 
             
                  #     The current access token for this client.
         | 
| 156 | 
            +
                  #   - <code>:access_type</code> -
         | 
| 157 | 
            +
                  #     The current access type parameter for #authorization_uri.
         | 
| 155 158 | 
             
                  #   - <code>:id_token</code> -
         | 
| 156 159 | 
             
                  #     The current ID token for this client.
         | 
| 157 160 | 
             
                  #   - <code>:extension_parameters</code> -
         | 
| @@ -189,6 +192,7 @@ module Signet | |
| 189 192 | 
             
                    self.signing_key = options[:signing_key] if options.has_key?(:signing_key)
         | 
| 190 193 | 
             
                    self.extension_parameters = options[:extension_parameters] || {}
         | 
| 191 194 | 
             
                    self.additional_parameters = options[:additional_parameters] || {}
         | 
| 195 | 
            +
                    self.access_type = options.fetch(:access_type) { :offline }
         | 
| 192 196 | 
             
                    self.update_token!(options)
         | 
| 193 197 | 
             
                    return self
         | 
| 194 198 | 
             
                  end
         | 
| @@ -259,8 +263,8 @@ module Signet | |
| 259 263 | 
             
                    unless options[:response_type]
         | 
| 260 264 | 
             
                      options[:response_type] = :code
         | 
| 261 265 | 
             
                    end
         | 
| 262 | 
            -
                     | 
| 263 | 
            -
                      options[:access_type] =  | 
| 266 | 
            +
                    if !options[:access_type] && access_type
         | 
| 267 | 
            +
                      options[:access_type] = access_type
         | 
| 264 268 | 
             
                    end
         | 
| 265 269 | 
             
                    options[:client_id] ||= self.client_id
         | 
| 266 270 | 
             
                    options[:redirect_uri] ||= self.redirect_uri
         | 
| @@ -330,6 +334,23 @@ module Signet | |
| 330 334 | 
             
                    end
         | 
| 331 335 | 
             
                  end
         | 
| 332 336 |  | 
| 337 | 
            +
                  ##
         | 
| 338 | 
            +
                  # Returns the current access type parameter for #authorization_uri.
         | 
| 339 | 
            +
                  #
         | 
| 340 | 
            +
                  # @return [String, Symbol] The current access type.
         | 
| 341 | 
            +
                  def access_type
         | 
| 342 | 
            +
                    return @access_type
         | 
| 343 | 
            +
                  end
         | 
| 344 | 
            +
             | 
| 345 | 
            +
                  ##
         | 
| 346 | 
            +
                  # Sets the current access type parameter for #authorization_uri.
         | 
| 347 | 
            +
                  #
         | 
| 348 | 
            +
                  # @param [String, Symbol] new_access_type
         | 
| 349 | 
            +
                  #   The current access type.
         | 
| 350 | 
            +
                  def access_type=(new_access_type)
         | 
| 351 | 
            +
                    @access_type = new_access_type
         | 
| 352 | 
            +
                  end
         | 
| 353 | 
            +
             | 
| 333 354 | 
             
                  ##
         | 
| 334 355 | 
             
                  # Returns the client identifier for this client.
         | 
| 335 356 | 
             
                  #
         | 
| @@ -713,7 +734,7 @@ module Signet | |
| 713 734 | 
             
                  #   omitted.
         | 
| 714 735 | 
             
                  #
         | 
| 715 736 | 
             
                  # @return [String] The decoded ID token.
         | 
| 716 | 
            -
                  def decoded_id_token | 
| 737 | 
            +
                  def decoded_id_token public_key=nil, options = {}, &keyfinder
         | 
| 717 738 | 
             
                    options[:algorithm] ||= signing_algorithm
         | 
| 718 739 | 
             
                    verify = !!(public_key || keyfinder)
         | 
| 719 740 | 
             
                    payload, _header = JWT.decode(self.id_token, public_key, verify, options, &keyfinder)
         | 
| @@ -746,12 +767,13 @@ module Signet | |
| 746 767 | 
             
                  #
         | 
| 747 768 | 
             
                  # @param [String, Integer, nil] new_expires_in
         | 
| 748 769 | 
             
                  #   The access token lifetime.
         | 
| 749 | 
            -
                  def expires_in= | 
| 750 | 
            -
                    if new_expires_in | 
| 770 | 
            +
                  def expires_in= new_expires_in
         | 
| 771 | 
            +
                    if !new_expires_in.nil?
         | 
| 751 772 | 
             
                      @issued_at = Time.now
         | 
| 752 773 | 
             
                      @expires_at = @issued_at + new_expires_in.to_i
         | 
| 753 774 | 
             
                    else
         | 
| 754 | 
            -
                      @expires_at | 
| 775 | 
            +
                      @expires_at = nil
         | 
| 776 | 
            +
                      @issued_at = nil
         | 
| 755 777 | 
             
                    end
         | 
| 756 778 | 
             
                  end
         | 
| 757 779 |  | 
| @@ -760,7 +782,7 @@ module Signet | |
| 760 782 | 
             
                  #
         | 
| 761 783 | 
             
                  # @return [Time, nil] The access token issuance time.
         | 
| 762 784 | 
             
                  def issued_at
         | 
| 763 | 
            -
                     | 
| 785 | 
            +
                    @issued_at
         | 
| 764 786 | 
             
                  end
         | 
| 765 787 |  | 
| 766 788 | 
             
                  ##
         | 
| @@ -961,7 +983,7 @@ module Signet | |
| 961 983 | 
             
                  end
         | 
| 962 984 |  | 
| 963 985 | 
             
                  def fetch_access_token(options={})
         | 
| 964 | 
            -
                    if self.token_credential_uri | 
| 986 | 
            +
                    if self.token_credential_uri.nil?
         | 
| 965 987 | 
             
                      raise ArgumentError, 'Missing token endpoint URI.'
         | 
| 966 988 | 
             
                    end
         | 
| 967 989 |  | 
    
        data/lib/signet/version.rb
    CHANGED
    
    | @@ -17,7 +17,7 @@ unless defined? Signet::VERSION | |
| 17 17 | 
             
              module Signet
         | 
| 18 18 | 
             
                module VERSION
         | 
| 19 19 | 
             
                  MAJOR = 0
         | 
| 20 | 
            -
                  MINOR =  | 
| 20 | 
            +
                  MINOR = 11
         | 
| 21 21 | 
             
                  TINY  = 0
         | 
| 22 22 | 
             
                  PRE   = nil
         | 
| 23 23 |  | 
| @@ -58,15 +58,15 @@ unless defined? Signet::VERSION | |
| 58 58 | 
             
                  # @private
         | 
| 59 59 | 
             
                  #
         | 
| 60 60 | 
             
                  def self.warn_unsupported_ruby cur_version, recommended_version
         | 
| 61 | 
            -
                    "WARNING: You are running Ruby #{cur_version}, which has reached"  | 
| 62 | 
            -
             | 
| 63 | 
            -
             | 
| 64 | 
            -
             | 
| 65 | 
            -
             | 
| 66 | 
            -
             | 
| 67 | 
            -
             | 
| 68 | 
            -
             | 
| 69 | 
            -
             | 
| 61 | 
            +
                    "WARNING: You are running Ruby #{cur_version}, which has reached" \
         | 
| 62 | 
            +
                      " end-of-life and is no longer supported by Ruby Core.\n" \
         | 
| 63 | 
            +
                      'Signet works best on supported versions of' \
         | 
| 64 | 
            +
                      ' Ruby. It is strongly recommended that you upgrade to Ruby' \
         | 
| 65 | 
            +
                      " #{recommended_version} or later. \n" \
         | 
| 66 | 
            +
                      'See https://www.ruby-lang.org/en/downloads/branches/ for more' \
         | 
| 67 | 
            +
                      " info on the Ruby maintenance schedule.\n" \
         | 
| 68 | 
            +
                      'To suppress this message, set the' \
         | 
| 69 | 
            +
                      ' GOOGLE_CLOUD_SUPPRESS_RUBY_WARNINGS environment variable.'
         | 
| 70 70 | 
             
                  end
         | 
| 71 71 |  | 
| 72 72 | 
             
                  ##
         | 
| @@ -74,14 +74,14 @@ unless defined? Signet::VERSION | |
| 74 74 | 
             
                  # @private
         | 
| 75 75 | 
             
                  #
         | 
| 76 76 | 
             
                  def self.warn_nonrecommended_ruby cur_version, recommended_version
         | 
| 77 | 
            -
                    "WARNING: You are running Ruby #{cur_version}, which is nearing"  | 
| 78 | 
            -
             | 
| 79 | 
            -
             | 
| 80 | 
            -
             | 
| 81 | 
            -
             | 
| 82 | 
            -
             | 
| 83 | 
            -
             | 
| 84 | 
            -
             | 
| 77 | 
            +
                    "WARNING: You are running Ruby #{cur_version}, which is nearing" \
         | 
| 78 | 
            +
                      " end-of-life.\n" \
         | 
| 79 | 
            +
                      'Signet works best on supported versions of' \
         | 
| 80 | 
            +
                      " Ruby. Consider upgrading to Ruby #{recommended_version} or later.\n" \
         | 
| 81 | 
            +
                      'See https://www.ruby-lang.org/en/downloads/branches/ for more' \
         | 
| 82 | 
            +
                      " info on the Ruby maintenance schedule.\n" \
         | 
| 83 | 
            +
                      'To suppress this message, set the' \
         | 
| 84 | 
            +
                      ' GOOGLE_CLOUD_SUPPRESS_RUBY_WARNINGS environment variable.'
         | 
| 85 85 | 
             
                  end
         | 
| 86 86 | 
             
                end
         | 
| 87 87 | 
             
              end
         | 
| @@ -1110,6 +1110,16 @@ describe Signet::OAuth2::Client, 'configured with custom parameters' do | |
| 1110 1110 | 
             
                expect(@client.authorization_uri(:additional_parameters => {'type' => 'new_type', 'new_param' => 'new_val'}).query_values).to eq ({"access_type"=>"offline", "client_id"=>"s6BhdRkqt3", "new_param"=>"new_val",  "response_type"=>"code","redirect_uri"=>"https://example.client.com/callback", "type"=>"new_type"})
         | 
| 1111 1111 | 
             
              end
         | 
| 1112 1112 |  | 
| 1113 | 
            +
              it 'should not have access_type parameter in authorization_uri when we set it to nil in client' do
         | 
| 1114 | 
            +
                @client.update!(:access_type=>nil)
         | 
| 1115 | 
            +
                expect(@client.authorization_uri().query_values).to eq ({"client_id"=>"s6BhdRkqt3", "response_type"=>"code", "redirect_uri"=>"https://example.client.com/callback"})
         | 
| 1116 | 
            +
              end
         | 
| 1117 | 
            +
             | 
| 1118 | 
            +
              it 'should use new access_type parameter as default for authorization_uri' do
         | 
| 1119 | 
            +
                @client.update!(:access_type=>:online)
         | 
| 1120 | 
            +
                expect(@client.authorization_uri().query_values).to eq ({"access_type"=>"online", "client_id"=>"s6BhdRkqt3", "response_type"=>"code", "redirect_uri"=>"https://example.client.com/callback"})
         | 
| 1121 | 
            +
              end
         | 
| 1122 | 
            +
             | 
| 1113 1123 | 
             
              it 'should merge new generate_access_token_request custom parameters' do
         | 
| 1114 1124 | 
             
                @client.update!(:code=>'12345')
         | 
| 1115 1125 | 
             
                params = @client.generate_access_token_request(:additional_parameters => {'type' => 'new_type', 'new_param' => 'new_val'})
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: signet
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.11.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Bob Aman
         | 
| @@ -9,7 +9,7 @@ authors: | |
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date: 2018- | 
| 12 | 
            +
            date: 2018-10-10 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies:
         | 
| 14 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 15 | 
             
              name: addressable
         |