43 lines
980 B
Ruby
43 lines
980 B
Ruby
|
module Faraday
|
||
|
class Request::Authorization < Faraday::Middleware
|
||
|
KEY = "Authorization".freeze unless defined? KEY
|
||
|
|
||
|
# Public
|
||
|
def self.header(type, token)
|
||
|
case token
|
||
|
when String, Symbol
|
||
|
"#{type} #{token}"
|
||
|
when Hash
|
||
|
build_hash(type.to_s, token)
|
||
|
else
|
||
|
raise ArgumentError, "Can't build an Authorization #{type} header from #{token.inspect}"
|
||
|
end
|
||
|
end
|
||
|
|
||
|
# Internal
|
||
|
def self.build_hash(type, hash)
|
||
|
offset = KEY.size + type.size + 3
|
||
|
comma = ",\n#{' ' * offset}"
|
||
|
values = []
|
||
|
hash.each do |key, value|
|
||
|
values << "#{key}=#{value.to_s.inspect}"
|
||
|
end
|
||
|
"#{type} #{values * comma}"
|
||
|
end
|
||
|
|
||
|
def initialize(app, type, token)
|
||
|
@header_value = self.class.header(type, token)
|
||
|
super(app)
|
||
|
end
|
||
|
|
||
|
# Public
|
||
|
def call(env)
|
||
|
unless env.request_headers[KEY]
|
||
|
env.request_headers[KEY] = @header_value
|
||
|
end
|
||
|
@app.call(env)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|