oauthenticator 1.3.5 → 1.4.1
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 +9 -0
- data/README.md +2 -2
- data/lib/oauthenticator/config_methods.rb +4 -3
- data/lib/oauthenticator/parse_authorization.rb +5 -9
- data/lib/oauthenticator/rack_authenticator.rb +1 -1
- data/lib/oauthenticator/rack_test_signer.rb +1 -0
- data/lib/oauthenticator/signable_request.rb +56 -4
- data/lib/oauthenticator/signed_request.rb +3 -3
- data/lib/oauthenticator/version.rb +1 -1
- metadata +11 -144
- data/.simplecov +0 -1
- data/Rakefile.rb +0 -14
- data/test/config_methods_test.rb +0 -44
- data/test/faraday_signer_test.rb +0 -82
- data/test/helper.rb +0 -30
- data/test/parse_authorization_test.rb +0 -86
- data/test/rack_authenticator_test.rb +0 -615
- data/test/rack_test_signer_test.rb +0 -61
- data/test/signable_request_test.rb +0 -654
- data/test/signed_request_test.rb +0 -12
- data/test/test_config_methods.rb +0 -74
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 781f1dc15efaf29b18f10bd6d17658afaecb9569150d5bb8aa665a97e2970f1c
         | 
| 4 | 
            +
              data.tar.gz: c233a50d0369b7f08ba951ced36fc71c1ab139ed8fb5ff8989f78f5d8882f696
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 0f18da06cfbba676551ff8cdd0c534b77dde1a3c132645f473cfb1cfabd1adff9c1e75fbb964bad7b1c3614f1023252a6bc6dd0fbfb724695a7839e142f9a6b5
         | 
| 7 | 
            +
              data.tar.gz: 04107cc48f5fd8f068393f81545c7007f050c9b3743d8716802f3339ced9d7cf989b119a9f87ed38796fc552f3dea8edbb5158e6b6b1cd21fda1ca87074ab41c
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | @@ -142,7 +142,7 @@ module AwesomeOAuthConfig | |
| 142 142 | 
             
                %w(HMAC-SHA1 RSA-SHA1)
         | 
| 143 143 | 
             
              end
         | 
| 144 144 |  | 
| 145 | 
            -
              # consumer secret, looked up by consumer key from  | 
| 145 | 
            +
              # consumer secret, looked up by consumer key from ActiveRecord storage
         | 
| 146 146 | 
             
              def consumer_secret
         | 
| 147 147 | 
             
                OAuthConsumer.where(:key => consumer_key).first.try(:secret)
         | 
| 148 148 | 
             
              end
         | 
| @@ -159,7 +159,7 @@ module AwesomeOAuthConfig | |
| 159 159 | 
             
                # OAuthToken.where(:token => token, :consumer_key => consumer_key).any?
         | 
| 160 160 | 
             
              end
         | 
| 161 161 |  | 
| 162 | 
            -
              # whether  | 
| 162 | 
            +
              # whether oauth_body_hash is required (this method defaults to false and may be omitted)
         | 
| 163 163 | 
             
              def body_hash_required?
         | 
| 164 164 | 
             
                false
         | 
| 165 165 | 
             
              end
         | 
| @@ -66,9 +66,10 @@ module OAuthenticator | |
| 66 66 | 
             
                end
         | 
| 67 67 |  | 
| 68 68 | 
             
                # the signature methods which the application will accept. this MUST be a subset of the signature methods 
         | 
| 69 | 
            -
                # defined in the OAuth 1.0 protocol | 
| 70 | 
            -
                #  | 
| 71 | 
            -
                # methods | 
| 69 | 
            +
                # defined in the OAuth 1.0 protocol plus OAuthenticator-defined extensions:
         | 
| 70 | 
            +
                # `%w(HMAC-SHA1 RSA-SHA1 PLAINTEXT HMAC-SHA512 HMAC-SHA256)`.
         | 
| 71 | 
            +
                # the default value for this is all allowed signature methods, and may remain unimplemented if you wish
         | 
| 72 | 
            +
                # to allow all defined signature methods.
         | 
| 72 73 | 
             
                #
         | 
| 73 74 | 
             
                # @return [Array<String>]
         | 
| 74 75 | 
             
                def allowed_signature_methods
         | 
| @@ -57,25 +57,21 @@ module OAuthenticator | |
| 57 57 | 
             
                  return attributes.map { |k,v| {k => v.first} }.inject({}, &:update)
         | 
| 58 58 | 
             
                end
         | 
| 59 59 |  | 
| 60 | 
            +
                # @private
         | 
| 61 | 
            +
                URI_PARSER = URI.const_defined?(:DEFAULT_PARSER) ? URI::DEFAULT_PARSER : URI
         | 
| 62 | 
            +
             | 
| 60 63 | 
             
                # escape a value
         | 
| 61 64 | 
             
                # @param value [String] value
         | 
| 62 65 | 
             
                # @return [String] escaped value
         | 
| 63 66 | 
             
                def escape(value)
         | 
| 64 | 
            -
                   | 
| 67 | 
            +
                  URI_PARSER.escape(value.to_s, /[^a-z0-9\-\.\_\~]/i)
         | 
| 65 68 | 
             
                end
         | 
| 66 69 |  | 
| 67 70 | 
             
                # unescape a value
         | 
| 68 71 | 
             
                # @param value [String] escaped value
         | 
| 69 72 | 
             
                # @return [String] unescaped value
         | 
| 70 73 | 
             
                def unescape(value)
         | 
| 71 | 
            -
                   | 
| 72 | 
            -
                end
         | 
| 73 | 
            -
             | 
| 74 | 
            -
                private
         | 
| 75 | 
            -
             | 
| 76 | 
            -
                # @return [Object] a parser that responds to #escape and #unescape
         | 
| 77 | 
            -
                def uri_parser
         | 
| 78 | 
            -
                  @uri_parser ||= URI.const_defined?(:Parser) ? URI::Parser.new : URI
         | 
| 74 | 
            +
                  URI_PARSER.unescape(value.to_s)
         | 
| 79 75 | 
             
                end
         | 
| 80 76 | 
             
              end
         | 
| 81 77 | 
             
            end
         | 
| @@ -9,7 +9,7 @@ module OAuthenticator | |
| 9 9 | 
             
              # body a JSON object indicating errors encountered authenticating the request. The error object is 
         | 
| 10 10 | 
             
              # structured like rails / ActiveResource:
         | 
| 11 11 | 
             
              #
         | 
| 12 | 
            -
              #     {'errors' | 
| 12 | 
            +
              #     {'errors' => {'attribute1' => ['messageA', 'messageB'], 'attribute2' => ['messageC']}}
         | 
| 13 13 | 
             
              class RackAuthenticator
         | 
| 14 14 | 
             
                # options:
         | 
| 15 15 | 
             
                #
         | 
| @@ -33,6 +33,7 @@ end | |
| 33 33 |  | 
| 34 34 | 
             
            class Rack::Test::Session
         | 
| 35 35 | 
             
              actual_process_request = instance_method(:process_request)
         | 
| 36 | 
            +
              remove_method(:process_request)
         | 
| 36 37 | 
             
              define_method(:process_request) do |uri, env, &block|
         | 
| 37 38 | 
             
                oauth_attrs = Thread.current[:oauthenticator_rack_test_attributes]
         | 
| 38 39 | 
             
                if oauth_attrs
         | 
| @@ -201,7 +201,7 @@ module OAuthenticator | |
| 201 201 |  | 
| 202 202 | 
             
                # section 3.4.1.3
         | 
| 203 203 | 
             
                #
         | 
| 204 | 
            -
                # @return [Array<Array<String> (size 2)>]
         | 
| 204 | 
            +
                # @return [Array<Array<String, nil> (size 2)>]
         | 
| 205 205 | 
             
                def normalized_request_params
         | 
| 206 206 | 
             
                  query_params + protocol_params.reject { |k,v| %w(realm oauth_signature).include?(k) }.to_a + entity_params
         | 
| 207 207 | 
             
                end
         | 
| @@ -281,7 +281,7 @@ module OAuthenticator | |
| 281 281 | 
             
                #
         | 
| 282 282 | 
             
                # @return [Boolean]
         | 
| 283 283 | 
             
                def hash_body?
         | 
| 284 | 
            -
                  BODY_HASH_METHODS | 
| 284 | 
            +
                  BODY_HASH_METHODS.key?(signature_method) && !form_encoded? &&
         | 
| 285 285 | 
             
                    (@attributes.key?('hash_body?') ? @attributes['hash_body?'] : true)
         | 
| 286 286 | 
             
                end
         | 
| 287 287 |  | 
| @@ -304,9 +304,33 @@ module OAuthenticator | |
| 304 304 | 
             
                #
         | 
| 305 305 | 
             
                # @return [String]
         | 
| 306 306 | 
             
                def hmac_sha1_signature
         | 
| 307 | 
            +
                  hmac_digest_signature(OpenSSL::Digest::SHA1)
         | 
| 308 | 
            +
                end
         | 
| 309 | 
            +
             | 
| 310 | 
            +
                # signature, with method HMAC-SHA256. OAuthenticator extension, outside of spec. do not use.
         | 
| 311 | 
            +
                # unless you want to.
         | 
| 312 | 
            +
                #
         | 
| 313 | 
            +
                # @return [String]
         | 
| 314 | 
            +
                def hmac_sha256_signature
         | 
| 315 | 
            +
                  hmac_digest_signature(OpenSSL::Digest::SHA256)
         | 
| 316 | 
            +
                end
         | 
| 317 | 
            +
             | 
| 318 | 
            +
                # signature, with method HMAC-SHA512. OAuthenticator extension, outside of spec. do not use.
         | 
| 319 | 
            +
                # unless you want to.
         | 
| 320 | 
            +
                #
         | 
| 321 | 
            +
                # @return [String]
         | 
| 322 | 
            +
                def hmac_sha512_signature
         | 
| 323 | 
            +
                  hmac_digest_signature(OpenSSL::Digest::SHA512)
         | 
| 324 | 
            +
                end
         | 
| 325 | 
            +
             | 
| 326 | 
            +
                # signature with a HMAC digest
         | 
| 327 | 
            +
                #
         | 
| 328 | 
            +
                # @param digest_class [Class] the digest class
         | 
| 329 | 
            +
                # @return [String]
         | 
| 330 | 
            +
                def hmac_digest_signature(digest_class)
         | 
| 307 331 | 
             
                  # hmac secret is same as plaintext signature 
         | 
| 308 332 | 
             
                  secret = plaintext_signature
         | 
| 309 | 
            -
                  Base64.encode64(OpenSSL::HMAC.digest( | 
| 333 | 
            +
                  Base64.encode64(OpenSSL::HMAC.digest(digest_class.new, secret, signature_base)).gsub(/\n/, '')
         | 
| 310 334 | 
             
                end
         | 
| 311 335 |  | 
| 312 336 | 
             
                # signature, with method plaintext. section 3.4.4
         | 
| @@ -320,13 +344,39 @@ module OAuthenticator | |
| 320 344 | 
             
                #
         | 
| 321 345 | 
             
                # @return [String]
         | 
| 322 346 | 
             
                def sha1_body_hash
         | 
| 323 | 
            -
                   | 
| 347 | 
            +
                  digest_body_hash(OpenSSL::Digest::SHA1)
         | 
| 348 | 
            +
                end
         | 
| 349 | 
            +
             | 
| 350 | 
            +
                # body hash, with a signature method which uses SHA256. OAuthenticator extension, outside of spec. 
         | 
| 351 | 
            +
                # do not use. unless you want to.
         | 
| 352 | 
            +
                #
         | 
| 353 | 
            +
                # @return [String]
         | 
| 354 | 
            +
                def sha256_body_hash
         | 
| 355 | 
            +
                  digest_body_hash(OpenSSL::Digest::SHA256)
         | 
| 356 | 
            +
                end
         | 
| 357 | 
            +
             | 
| 358 | 
            +
                # body hash, with a signature method which uses SHA512. OAuthenticator extension, outside of spec. 
         | 
| 359 | 
            +
                # do not use. unless you want to.
         | 
| 360 | 
            +
                #
         | 
| 361 | 
            +
                # @return [String]
         | 
| 362 | 
            +
                def sha512_body_hash
         | 
| 363 | 
            +
                  digest_body_hash(OpenSSL::Digest::SHA512)
         | 
| 364 | 
            +
                end
         | 
| 365 | 
            +
             | 
| 366 | 
            +
                # body hash with a given digest
         | 
| 367 | 
            +
                #
         | 
| 368 | 
            +
                # @param digest_class [Class] the digest class
         | 
| 369 | 
            +
                # @return [String]
         | 
| 370 | 
            +
                def digest_body_hash(digest_class)
         | 
| 371 | 
            +
                  Base64.encode64(digest_class.digest(read_body)).gsub(/\n/, '')
         | 
| 324 372 | 
             
                end
         | 
| 325 373 |  | 
| 326 374 | 
             
                # map of oauth signature methods to their signature instance methods on this class 
         | 
| 327 375 | 
             
                SIGNATURE_METHODS = {
         | 
| 328 376 | 
             
                  'RSA-SHA1'.freeze => instance_method(:rsa_sha1_signature),
         | 
| 329 377 | 
             
                  'HMAC-SHA1'.freeze => instance_method(:hmac_sha1_signature),
         | 
| 378 | 
            +
                  'HMAC-SHA256'.freeze => instance_method(:hmac_sha256_signature),
         | 
| 379 | 
            +
                  'HMAC-SHA512'.freeze => instance_method(:hmac_sha512_signature),
         | 
| 330 380 | 
             
                  'PLAINTEXT'.freeze => instance_method(:plaintext_signature),
         | 
| 331 381 | 
             
                }.freeze
         | 
| 332 382 |  | 
| @@ -335,6 +385,8 @@ module OAuthenticator | |
| 335 385 | 
             
                BODY_HASH_METHODS = {
         | 
| 336 386 | 
             
                  'RSA-SHA1'.freeze => instance_method(:sha1_body_hash),
         | 
| 337 387 | 
             
                  'HMAC-SHA1'.freeze => instance_method(:sha1_body_hash),
         | 
| 388 | 
            +
                  'HMAC-SHA256'.freeze => instance_method(:sha256_body_hash),
         | 
| 389 | 
            +
                  'HMAC-SHA512'.freeze => instance_method(:sha512_body_hash),
         | 
| 338 390 | 
             
                }.freeze
         | 
| 339 391 | 
             
              end
         | 
| 340 392 | 
             
            end
         | 
| @@ -93,7 +93,7 @@ module OAuthenticator | |
| 93 93 | 
             
                #
         | 
| 94 94 | 
             
                # @return [nil, Hash<String, Array<String>>] either nil or a hash of errors
         | 
| 95 95 | 
             
                def errors
         | 
| 96 | 
            -
                  return @errors if  | 
| 96 | 
            +
                  return @errors if instance_variable_defined?('@errors')
         | 
| 97 97 | 
             
                  @errors = catch(:errors) do
         | 
| 98 98 | 
             
                    if authorization.nil?
         | 
| 99 99 | 
             
                      throw(:errors, {'Authorization' => ["Authorization header is missing"]})
         | 
| @@ -234,13 +234,13 @@ module OAuthenticator | |
| 234 234 | 
             
                require 'oauthenticator/config_methods'
         | 
| 235 235 | 
             
                include ConfigMethods
         | 
| 236 236 |  | 
| 237 | 
            -
                private
         | 
| 238 | 
            -
             | 
| 239 237 | 
             
                # hash of header params. keys should be a subset of OAUTH_ATTRIBUTE_KEYS.
         | 
| 240 238 | 
             
                def oauth_header_params
         | 
| 241 239 | 
             
                  @oauth_header_params ||= OAuthenticator.parse_authorization(authorization)
         | 
| 242 240 | 
             
                end
         | 
| 243 241 |  | 
| 242 | 
            +
                private
         | 
| 243 | 
            +
             | 
| 244 244 | 
             
                # raise a nice error message for a method that needs to be implemented on a module of config methods 
         | 
| 245 245 | 
             
                def config_method_not_implemented
         | 
| 246 246 | 
             
                  caller_name = caller[0].match(%r(in `(.*?)'))[1]
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: oauthenticator
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1. | 
| 4 | 
            +
              version: 1.4.1
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Ethan
         | 
| 8 | 
            -
            autorequire: | 
| 8 | 
            +
            autorequire:
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 11 | 
            +
            date: 2023-02-17 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: rack
         | 
| @@ -19,7 +19,7 @@ dependencies: | |
| 19 19 | 
             
                    version: '1.4'
         | 
| 20 20 | 
             
                - - "<"
         | 
| 21 21 | 
             
                  - !ruby/object:Gem::Version
         | 
| 22 | 
            -
                    version: ' | 
| 22 | 
            +
                    version: '4.0'
         | 
| 23 23 | 
             
              type: :runtime
         | 
| 24 24 | 
             
              prerelease: false
         | 
| 25 25 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| @@ -29,7 +29,7 @@ dependencies: | |
| 29 29 | 
             
                    version: '1.4'
         | 
| 30 30 | 
             
                - - "<"
         | 
| 31 31 | 
             
                  - !ruby/object:Gem::Version
         | 
| 32 | 
            -
                    version: ' | 
| 32 | 
            +
                    version: '4.0'
         | 
| 33 33 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 34 34 | 
             
              name: json
         | 
| 35 35 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -53,7 +53,7 @@ dependencies: | |
| 53 53 | 
             
                    version: '0.9'
         | 
| 54 54 | 
             
                - - "<"
         | 
| 55 55 | 
             
                  - !ruby/object:Gem::Version
         | 
| 56 | 
            -
                    version: ' | 
| 56 | 
            +
                    version: '3.0'
         | 
| 57 57 | 
             
              type: :runtime
         | 
| 58 58 | 
             
              prerelease: false
         | 
| 59 59 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| @@ -63,7 +63,7 @@ dependencies: | |
| 63 63 | 
             
                    version: '0.9'
         | 
| 64 64 | 
             
                - - "<"
         | 
| 65 65 | 
             
                  - !ruby/object:Gem::Version
         | 
| 66 | 
            -
                    version: ' | 
| 66 | 
            +
                    version: '3.0'
         | 
| 67 67 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 68 68 | 
             
              name: addressable
         | 
| 69 69 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -78,118 +78,6 @@ dependencies: | |
| 78 78 | 
             
                - - "~>"
         | 
| 79 79 | 
             
                  - !ruby/object:Gem::Version
         | 
| 80 80 | 
             
                    version: '2.3'
         | 
| 81 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 82 | 
            -
              name: rake
         | 
| 83 | 
            -
              requirement: !ruby/object:Gem::Requirement
         | 
| 84 | 
            -
                requirements:
         | 
| 85 | 
            -
                - - ">="
         | 
| 86 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 87 | 
            -
                    version: '0'
         | 
| 88 | 
            -
              type: :development
         | 
| 89 | 
            -
              prerelease: false
         | 
| 90 | 
            -
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 91 | 
            -
                requirements:
         | 
| 92 | 
            -
                - - ">="
         | 
| 93 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 94 | 
            -
                    version: '0'
         | 
| 95 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 96 | 
            -
              name: minitest
         | 
| 97 | 
            -
              requirement: !ruby/object:Gem::Requirement
         | 
| 98 | 
            -
                requirements:
         | 
| 99 | 
            -
                - - ">="
         | 
| 100 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 101 | 
            -
                    version: '0'
         | 
| 102 | 
            -
              type: :development
         | 
| 103 | 
            -
              prerelease: false
         | 
| 104 | 
            -
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 105 | 
            -
                requirements:
         | 
| 106 | 
            -
                - - ">="
         | 
| 107 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 108 | 
            -
                    version: '0'
         | 
| 109 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 110 | 
            -
              name: minitest-reporters
         | 
| 111 | 
            -
              requirement: !ruby/object:Gem::Requirement
         | 
| 112 | 
            -
                requirements:
         | 
| 113 | 
            -
                - - ">="
         | 
| 114 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 115 | 
            -
                    version: '0'
         | 
| 116 | 
            -
              type: :development
         | 
| 117 | 
            -
              prerelease: false
         | 
| 118 | 
            -
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 119 | 
            -
                requirements:
         | 
| 120 | 
            -
                - - ">="
         | 
| 121 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 122 | 
            -
                    version: '0'
         | 
| 123 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 124 | 
            -
              name: rack-test
         | 
| 125 | 
            -
              requirement: !ruby/object:Gem::Requirement
         | 
| 126 | 
            -
                requirements:
         | 
| 127 | 
            -
                - - ">="
         | 
| 128 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 129 | 
            -
                    version: '0'
         | 
| 130 | 
            -
              type: :development
         | 
| 131 | 
            -
              prerelease: false
         | 
| 132 | 
            -
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 133 | 
            -
                requirements:
         | 
| 134 | 
            -
                - - ">="
         | 
| 135 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 136 | 
            -
                    version: '0'
         | 
| 137 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 138 | 
            -
              name: timecop
         | 
| 139 | 
            -
              requirement: !ruby/object:Gem::Requirement
         | 
| 140 | 
            -
                requirements:
         | 
| 141 | 
            -
                - - ">="
         | 
| 142 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 143 | 
            -
                    version: '0'
         | 
| 144 | 
            -
              type: :development
         | 
| 145 | 
            -
              prerelease: false
         | 
| 146 | 
            -
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 147 | 
            -
                requirements:
         | 
| 148 | 
            -
                - - ">="
         | 
| 149 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 150 | 
            -
                    version: '0'
         | 
| 151 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 152 | 
            -
              name: simplecov
         | 
| 153 | 
            -
              requirement: !ruby/object:Gem::Requirement
         | 
| 154 | 
            -
                requirements:
         | 
| 155 | 
            -
                - - ">="
         | 
| 156 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 157 | 
            -
                    version: '0'
         | 
| 158 | 
            -
              type: :development
         | 
| 159 | 
            -
              prerelease: false
         | 
| 160 | 
            -
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 161 | 
            -
                requirements:
         | 
| 162 | 
            -
                - - ">="
         | 
| 163 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 164 | 
            -
                    version: '0'
         | 
| 165 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 166 | 
            -
              name: api_hammer
         | 
| 167 | 
            -
              requirement: !ruby/object:Gem::Requirement
         | 
| 168 | 
            -
                requirements:
         | 
| 169 | 
            -
                - - ">="
         | 
| 170 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 171 | 
            -
                    version: '0'
         | 
| 172 | 
            -
              type: :development
         | 
| 173 | 
            -
              prerelease: false
         | 
| 174 | 
            -
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 175 | 
            -
                requirements:
         | 
| 176 | 
            -
                - - ">="
         | 
| 177 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 178 | 
            -
                    version: '0'
         | 
| 179 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 180 | 
            -
              name: yard
         | 
| 181 | 
            -
              requirement: !ruby/object:Gem::Requirement
         | 
| 182 | 
            -
                requirements:
         | 
| 183 | 
            -
                - - ">="
         | 
| 184 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 185 | 
            -
                    version: '0'
         | 
| 186 | 
            -
              type: :development
         | 
| 187 | 
            -
              prerelease: false
         | 
| 188 | 
            -
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 189 | 
            -
                requirements:
         | 
| 190 | 
            -
                - - ">="
         | 
| 191 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 192 | 
            -
                    version: '0'
         | 
| 193 81 | 
             
            description: OAuthenticator signs and authenticates OAuth 1.0 requests
         | 
| 194 82 | 
             
            email:
         | 
| 195 83 | 
             
            - ethan@unth
         | 
| @@ -197,12 +85,10 @@ executables: [] | |
| 197 85 | 
             
            extensions: []
         | 
| 198 86 | 
             
            extra_rdoc_files: []
         | 
| 199 87 | 
             
            files:
         | 
| 200 | 
            -
            - ".simplecov"
         | 
| 201 88 | 
             
            - ".yardopts"
         | 
| 202 89 | 
             
            - CHANGELOG.md
         | 
| 203 90 | 
             
            - LICENSE.txt
         | 
| 204 91 | 
             
            - README.md
         | 
| 205 | 
            -
            - Rakefile.rb
         | 
| 206 92 | 
             
            - lib/oauthenticator.rb
         | 
| 207 93 | 
             
            - lib/oauthenticator/config_methods.rb
         | 
| 208 94 | 
             
            - lib/oauthenticator/faraday_signer.rb
         | 
| @@ -212,20 +98,11 @@ files: | |
| 212 98 | 
             
            - lib/oauthenticator/signable_request.rb
         | 
| 213 99 | 
             
            - lib/oauthenticator/signed_request.rb
         | 
| 214 100 | 
             
            - lib/oauthenticator/version.rb
         | 
| 215 | 
            -
            - test/config_methods_test.rb
         | 
| 216 | 
            -
            - test/faraday_signer_test.rb
         | 
| 217 | 
            -
            - test/helper.rb
         | 
| 218 | 
            -
            - test/parse_authorization_test.rb
         | 
| 219 | 
            -
            - test/rack_authenticator_test.rb
         | 
| 220 | 
            -
            - test/rack_test_signer_test.rb
         | 
| 221 | 
            -
            - test/signable_request_test.rb
         | 
| 222 | 
            -
            - test/signed_request_test.rb
         | 
| 223 | 
            -
            - test/test_config_methods.rb
         | 
| 224 101 | 
             
            homepage: https://github.com/notEthan/oauthenticator
         | 
| 225 102 | 
             
            licenses:
         | 
| 226 103 | 
             
            - MIT
         | 
| 227 104 | 
             
            metadata: {}
         | 
| 228 | 
            -
            post_install_message: | 
| 105 | 
            +
            post_install_message:
         | 
| 229 106 | 
             
            rdoc_options: []
         | 
| 230 107 | 
             
            require_paths:
         | 
| 231 108 | 
             
            - lib
         | 
| @@ -240,18 +117,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 240 117 | 
             
                - !ruby/object:Gem::Version
         | 
| 241 118 | 
             
                  version: '0'
         | 
| 242 119 | 
             
            requirements: []
         | 
| 243 | 
            -
            rubygems_version: 3. | 
| 244 | 
            -
            signing_key: | 
| 120 | 
            +
            rubygems_version: 3.1.6
         | 
| 121 | 
            +
            signing_key:
         | 
| 245 122 | 
             
            specification_version: 4
         | 
| 246 123 | 
             
            summary: OAuth 1.0 request signing and authentication
         | 
| 247 | 
            -
            test_files:
         | 
| 248 | 
            -
            - test/config_methods_test.rb
         | 
| 249 | 
            -
            - test/faraday_signer_test.rb
         | 
| 250 | 
            -
            - test/helper.rb
         | 
| 251 | 
            -
            - test/parse_authorization_test.rb
         | 
| 252 | 
            -
            - test/rack_authenticator_test.rb
         | 
| 253 | 
            -
            - test/rack_test_signer_test.rb
         | 
| 254 | 
            -
            - test/signable_request_test.rb
         | 
| 255 | 
            -
            - test/signed_request_test.rb
         | 
| 256 | 
            -
            - test/test_config_methods.rb
         | 
| 257 | 
            -
            - ".simplecov"
         | 
| 124 | 
            +
            test_files: []
         | 
    
        data/.simplecov
    DELETED
    
    | @@ -1 +0,0 @@ | |
| 1 | 
            -
            SimpleCov.start
         | 
    
        data/Rakefile.rb
    DELETED
    
    | @@ -1,14 +0,0 @@ | |
| 1 | 
            -
            require 'rake/testtask'
         | 
| 2 | 
            -
            Rake::TestTask.new do |t|
         | 
| 3 | 
            -
              t.name = 'test'
         | 
| 4 | 
            -
              t.test_files = FileList['test/**/*_test.rb']
         | 
| 5 | 
            -
              t.verbose = true
         | 
| 6 | 
            -
            end
         | 
| 7 | 
            -
            require 'wwtd/tasks'
         | 
| 8 | 
            -
            task 'default' => 'wwtd'
         | 
| 9 | 
            -
             | 
| 10 | 
            -
            require 'yard'
         | 
| 11 | 
            -
            YARD::Rake::YardocTask.new do |t|
         | 
| 12 | 
            -
            end
         | 
| 13 | 
            -
             | 
| 14 | 
            -
            require 'api_hammer/tasks'
         | 
    
        data/test/config_methods_test.rb
    DELETED
    
    | @@ -1,44 +0,0 @@ | |
| 1 | 
            -
            # encoding: utf-8
         | 
| 2 | 
            -
            proc { |p| $:.unshift(p) unless $:.any? { |lp| File.expand_path(lp) == p } }.call(File.expand_path('.', File.dirname(__FILE__)))
         | 
| 3 | 
            -
            require 'helper'
         | 
| 4 | 
            -
             | 
| 5 | 
            -
            describe OAuthenticator::SignedRequest do
         | 
| 6 | 
            -
              %w(timestamp_valid_period consumer_secret token_secret nonce_used? use_nonce! token_belongs_to_consumer?).each do |method_without_default|
         | 
| 7 | 
            -
                it "complains when #{method_without_default} is not implemented" do
         | 
| 8 | 
            -
                  exc = assert_raises(NotImplementedError) do
         | 
| 9 | 
            -
                    OAuthenticator::SignedRequest.new({}).public_send(method_without_default)
         | 
| 10 | 
            -
                  end
         | 
| 11 | 
            -
                  assert_match /included in a subclass of OAuthenticator::SignedRequest/, exc.message
         | 
| 12 | 
            -
                end
         | 
| 13 | 
            -
                it "uses the method #{method_without_default} when implemented" do
         | 
| 14 | 
            -
                  called = false
         | 
| 15 | 
            -
                  mod = Module.new { define_method(method_without_default) { called = true } }
         | 
| 16 | 
            -
                  OAuthenticator::SignedRequest.including_config(mod).new({}).public_send(method_without_default)
         | 
| 17 | 
            -
                  assert called
         | 
| 18 | 
            -
                end
         | 
| 19 | 
            -
              end
         | 
| 20 | 
            -
              it "complains when a method without a default is not implemented, using RackAuthenticator" do
         | 
| 21 | 
            -
                exc = assert_raises(NotImplementedError) do
         | 
| 22 | 
            -
                  OAuthenticator::RackAuthenticator.new(proc {}, {:config_methods => Module.new}).call({'HTTP_AUTHORIZATION' => %q(OAuth oauth_timestamp="1")})
         | 
| 23 | 
            -
                end
         | 
| 24 | 
            -
                assert_match /passed to OAuthenticator::RackAuthenticator using the option :config_methods./, exc.message
         | 
| 25 | 
            -
              end
         | 
| 26 | 
            -
              it "complains RackAuthenticator is not given config methods" do
         | 
| 27 | 
            -
                assert_raises(ArgumentError) do
         | 
| 28 | 
            -
                  OAuthenticator::RackAuthenticator.new(proc {})
         | 
| 29 | 
            -
                end
         | 
| 30 | 
            -
              end
         | 
| 31 | 
            -
              it 'uses timestamp_valid_period if that is implemented but timestamp_valid_past or timestamp_valid_future is not' do
         | 
| 32 | 
            -
                called = 0
         | 
| 33 | 
            -
                mod = Module.new { define_method(:timestamp_valid_period) { called +=1 } }
         | 
| 34 | 
            -
                OAuthenticator::SignedRequest.including_config(mod).new({}).public_send(:timestamp_valid_future)
         | 
| 35 | 
            -
                OAuthenticator::SignedRequest.including_config(mod).new({}).public_send(:timestamp_valid_past)
         | 
| 36 | 
            -
                assert_equal 2, called
         | 
| 37 | 
            -
              end
         | 
| 38 | 
            -
              it 'uses the default value for allowed signature methods' do
         | 
| 39 | 
            -
                assert_equal %w(RSA-SHA1 HMAC-SHA1 PLAINTEXT).sort, OAuthenticator::SignedRequest.new({}).allowed_signature_methods.sort
         | 
| 40 | 
            -
              end
         | 
| 41 | 
            -
              it 'uses default value for body_hash_required?' do
         | 
| 42 | 
            -
                assert_equal false, OAuthenticator::SignedRequest.new({}).body_hash_required?
         | 
| 43 | 
            -
              end
         | 
| 44 | 
            -
            end
         | 
    
        data/test/faraday_signer_test.rb
    DELETED
    
    | @@ -1,82 +0,0 @@ | |
| 1 | 
            -
            # encoding: utf-8
         | 
| 2 | 
            -
            proc { |p| $:.unshift(p) unless $:.any? { |lp| File.expand_path(lp) == p } }.call(File.expand_path('.', File.dirname(__FILE__)))
         | 
| 3 | 
            -
            require 'helper'
         | 
| 4 | 
            -
             | 
| 5 | 
            -
            # not going to test a ton here, since the Faraday middleware mostly just calls to SignableRequest which is 
         | 
| 6 | 
            -
            # rather well-tested 
         | 
| 7 | 
            -
            describe OAuthenticator::FaradaySigner do
         | 
| 8 | 
            -
              def assert_response(expected_status, expected_body, faraday_response)
         | 
| 9 | 
            -
                assert_equal expected_status.to_i, faraday_response.status.to_i, "Expected status to be #{expected_status.inspect}" +
         | 
| 10 | 
            -
                  "; got #{faraday_response.status.inspect}. body was: #{faraday_response.body}"
         | 
| 11 | 
            -
                assert expected_body === faraday_response.body, "Expected match for #{expected_body}; got #{faraday_response.body}"
         | 
| 12 | 
            -
              end
         | 
| 13 | 
            -
             | 
| 14 | 
            -
              it 'succeeds' do
         | 
| 15 | 
            -
                signing_options = {
         | 
| 16 | 
            -
                  :signature_method => 'PLAINTEXT',
         | 
| 17 | 
            -
                  :consumer_key => consumer_key,
         | 
| 18 | 
            -
                  :consumer_secret => consumer_secret,
         | 
| 19 | 
            -
                  :token => token,
         | 
| 20 | 
            -
                  :token_secret => token_secret,
         | 
| 21 | 
            -
                }
         | 
| 22 | 
            -
             | 
| 23 | 
            -
                connection = Faraday.new(:url => 'http://example.com') do |faraday|
         | 
| 24 | 
            -
                  faraday.request :oauthenticator_signer, signing_options
         | 
| 25 | 
            -
                  faraday.adapter :rack, oapp
         | 
| 26 | 
            -
                end
         | 
| 27 | 
            -
                response = connection.get '/'
         | 
| 28 | 
            -
                assert_response 200, '☺', response
         | 
| 29 | 
            -
              end
         | 
| 30 | 
            -
             | 
| 31 | 
            -
              it 'succeeds with form-encoded with HMAC' do
         | 
| 32 | 
            -
                signing_options = {
         | 
| 33 | 
            -
                  :signature_method => 'HMAC-SHA1',
         | 
| 34 | 
            -
                  :consumer_key => consumer_key,
         | 
| 35 | 
            -
                  :consumer_secret => consumer_secret,
         | 
| 36 | 
            -
                  :token => token,
         | 
| 37 | 
            -
                  :token_secret => token_secret,
         | 
| 38 | 
            -
                }
         | 
| 39 | 
            -
             | 
| 40 | 
            -
                connection = Faraday.new(:url => 'http://example.com') do |faraday|
         | 
| 41 | 
            -
                  faraday.request :url_encoded
         | 
| 42 | 
            -
                  faraday.request :oauthenticator_signer, signing_options
         | 
| 43 | 
            -
                  faraday.adapter :rack, oapp
         | 
| 44 | 
            -
                end
         | 
| 45 | 
            -
                response = connection.put('/', :foo => {:bar => :baz})
         | 
| 46 | 
            -
                assert_response 200, '☺', response
         | 
| 47 | 
            -
              end
         | 
| 48 | 
            -
             | 
| 49 | 
            -
              it 'succeeds with charset' do
         | 
| 50 | 
            -
                signing_options = {
         | 
| 51 | 
            -
                  :signature_method => 'HMAC-SHA1',
         | 
| 52 | 
            -
                  :consumer_key => consumer_key,
         | 
| 53 | 
            -
                  :consumer_secret => consumer_secret,
         | 
| 54 | 
            -
                  :token => token,
         | 
| 55 | 
            -
                  :token_secret => token_secret,
         | 
| 56 | 
            -
                }
         | 
| 57 | 
            -
             | 
| 58 | 
            -
                connection = Faraday.new(:url => 'http://example.com', :headers => {'Content-Type' => 'application/x-www-form-urlencoded; charset=UTF-8'}) do |faraday|
         | 
| 59 | 
            -
                  faraday.request :oauthenticator_signer, signing_options
         | 
| 60 | 
            -
                  faraday.adapter :rack, oapp
         | 
| 61 | 
            -
                end
         | 
| 62 | 
            -
                response = connection.post('/', 'a=b')
         | 
| 63 | 
            -
                assert_response 200, '☺', response
         | 
| 64 | 
            -
              end
         | 
| 65 | 
            -
             | 
| 66 | 
            -
              it 'is unauthorized' do
         | 
| 67 | 
            -
                signing_options = {
         | 
| 68 | 
            -
                  :signature_method => 'PLAINTEXT',
         | 
| 69 | 
            -
                  :consumer_key => consumer_key,
         | 
| 70 | 
            -
                  :consumer_secret => 'nope',
         | 
| 71 | 
            -
                  :token => token,
         | 
| 72 | 
            -
                  :token_secret => 'definitelynot',
         | 
| 73 | 
            -
                }
         | 
| 74 | 
            -
             | 
| 75 | 
            -
                connection = Faraday.new(:url => 'http://example.com') do |faraday|
         | 
| 76 | 
            -
                  faraday.request :oauthenticator_signer, signing_options
         | 
| 77 | 
            -
                  faraday.adapter :rack, oapp
         | 
| 78 | 
            -
                end
         | 
| 79 | 
            -
                response = connection.get '/'
         | 
| 80 | 
            -
                assert_response 401, /Authorization oauth_signature.*is invalid/m, response
         | 
| 81 | 
            -
              end
         | 
| 82 | 
            -
            end
         | 
    
        data/test/helper.rb
    DELETED
    
    | @@ -1,30 +0,0 @@ | |
| 1 | 
            -
            proc { |p| $:.unshift(p) unless $:.any? { |lp| File.expand_path(lp) == p } }.call(File.expand_path('../lib', File.dirname(__FILE__)))
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            require 'simplecov'
         | 
| 4 | 
            -
             | 
| 5 | 
            -
            require 'byebug'
         | 
| 6 | 
            -
             | 
| 7 | 
            -
            # NO EXPECTATIONS 
         | 
| 8 | 
            -
            ENV["MT_NO_EXPECTATIONS"] = ''
         | 
| 9 | 
            -
             | 
| 10 | 
            -
            require 'minitest/autorun'
         | 
| 11 | 
            -
            require 'minitest/reporters'
         | 
| 12 | 
            -
            Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new
         | 
| 13 | 
            -
             | 
| 14 | 
            -
            require 'rack/test'
         | 
| 15 | 
            -
            require 'timecop'
         | 
| 16 | 
            -
             | 
| 17 | 
            -
            require 'oauthenticator'
         | 
| 18 | 
            -
             | 
| 19 | 
            -
            require 'test_config_methods'
         | 
| 20 | 
            -
             | 
| 21 | 
            -
            class OAuthenticatorConfigSpec < Minitest::Spec
         | 
| 22 | 
            -
              after do
         | 
| 23 | 
            -
                Timecop.return
         | 
| 24 | 
            -
              end
         | 
| 25 | 
            -
             | 
| 26 | 
            -
              include TestHelperMethods
         | 
| 27 | 
            -
            end
         | 
| 28 | 
            -
             | 
| 29 | 
            -
            # register this to be the base class for specs instead of Minitest::Spec
         | 
| 30 | 
            -
            Minitest::Spec.register_spec_type(//, OAuthenticatorConfigSpec)
         |