Sha256: 3f5d6b795cf72530b1420c9e8b9c99e4cd71843dc3b4f6c599205f50451f70c9
Contents?: true
Size: 1.45 KB
Versions: 2
Compression:
Stored size: 1.45 KB
Contents
require 'faraday' require 'faraday_middleware' module Faraday module Panoptes class CredentialsOAuthError < StandardError end class ClientCredentialsAuthentication < Faraday::Middleware dependency do require 'json' unless defined?(::JSON) end def initialize(app, url:, client_id:, client_secret:) super(app) @client_id = client_id @client_secret = client_secret @conn = Faraday.new(url: url) @current_token = nil end def call(env) env[:request_headers]["Authorization"] = authorization_header @app.call(env) end def authorization_header "Bearer #{access_token}" end def access_token if need_new_token? @current_token = get_token end @current_token["access_token"] end def need_new_token? return true unless @current_token created_at = Time.at(@current_token.fetch("created_at")) expires_by = created_at + @current_token.fetch("expires_in") Time.now > expires_by end def get_token result = @conn.post("/oauth/token", grant_type: 'client_credentials', client_id: @client_id, client_secret: @client_secret) raise CredentialsOAuthError.new "Failed to obtain access token" if result.status == 401 or result.status == 422 or result.body.empty? JSON.parse(result.body) end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
faraday-panoptes-0.4.0 | lib/faraday/panoptes/client_credentials_authentication.rb |
faraday-panoptes-0.3.0 | lib/faraday/panoptes/client_credentials_authentication.rb |