Sha256: 3cd99701688f77c34b90a6838223fefe995cd5298591b9bf493a721a58c01ebc

Contents?: true

Size: 1.44 KB

Versions: 3

Compression:

Stored size: 1.44 KB

Contents

require 'faraday'

module SparkApi
  module Authentication
    module OAuth2Impl
  
      #==OAuth2 Faraday response middleware
      # HTTP Response after filter to package oauth2 responses and bubble up basic api errors.
      class FaradayMiddleware < Faraday::Response::Middleware

        def initialize(app)
          super(app)
        end

        def on_complete(env)
          body = MultiJson.decode(env[:body])
          SparkApi.logger.debug("[oauth2] Response Body: #{body.inspect}")
          unless body.is_a?(Hash)
            raise InvalidResponse, "The server response could not be understood"
          end
          case env[:status]
          when 200..299
            SparkApi.logger.debug("[oauth2] Success!")
            session = OAuthSession.new(body)
          else 
            # Handle the WWW-Authenticate Response Header Field if present. This can be returned by 
            # OAuth2 implementations and wouldn't hurt to log.
            auth_header_error = env[:request_headers]["WWW-Authenticate"]
            SparkApi.logger.warn("Authentication error #{auth_header_error}") unless auth_header_error.nil?
            raise ClientError, {:message => body["error"], :code =>0, :status => env[:status]}
          end
          SparkApi.logger.debug("[oauth2] Session=#{session.inspect}")
          env[:body] = session
        end

      end
      Faraday.register_middleware :response, :oauth2_impl => FaradayMiddleware

    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
spark_api-1.1.2 lib/spark_api/authentication/oauth2_impl/faraday_middleware.rb
spark_api-1.1.1 lib/spark_api/authentication/oauth2_impl/faraday_middleware.rb
spark_api-1.1.0 lib/spark_api/authentication/oauth2_impl/faraday_middleware.rb