class GrapeAPISignature::Middleware::Auth

Attributes

app[RW]
authenticator[RW]
env[RW]
max_request_age[RW]

Public Class Methods

default_authenticator(&block) click to toggle source
# File lib/grape_api_signature/middleware/auth.rb, line 9
def self.default_authenticator(&block)
  @default_authenticator = block if block_given?

  @default_authenticator
end
new(app, max_request_age = 900, &authenticator) click to toggle source
# File lib/grape_api_signature/middleware/auth.rb, line 15
def initialize(app, max_request_age = 900, &authenticator)
  self.app = app
  self.authenticator = authenticator || self.class.default_authenticator
  self.max_request_age = max_request_age
end

Public Instance Methods

_call(env) click to toggle source
# File lib/grape_api_signature/middleware/auth.rb, line 25
def _call(env)
  self.env = env

  @auth_request = nil
  @auth = nil
  @authenticator_result = nil

  return unauthorized unless auth_request.provided?

  return bad_request unless auth_request.aws4?

  if valid?
    on_valid
  else
    unauthorized
  end
end
call(env) click to toggle source
# File lib/grape_api_signature/middleware/auth.rb, line 21
def call(env)
  dup._call(env)
end

Protected Instance Methods

auth() click to toggle source
# File lib/grape_api_signature/middleware/auth.rb, line 50
def auth
  @auth ||= Authorization.new(request.request_method,
                              auth_request.headers.merge('Content-Type' => request.content_type),
                              URI(request.url),
                              auth_request.body,
                              max_request_age)
end
auth_request() click to toggle source
# File lib/grape_api_signature/middleware/auth.rb, line 58
def auth_request
  @auth_request ||= AuthRequest.new(env)
end
authenticator_result() click to toggle source
# File lib/grape_api_signature/middleware/auth.rb, line 78
def authenticator_result
  @authenticator_result ||= @authenticator.call(auth.user_id, auth.region, auth.service)
end
challenge() click to toggle source
# File lib/grape_api_signature/middleware/auth.rb, line 66
def challenge
  'AWS4-HMAC-SHA256'
end
on_valid() click to toggle source
# File lib/grape_api_signature/middleware/auth.rb, line 45
def on_valid
  env['REMOTE_USER'] = auth.user_id
  app.call(env)
end
request() click to toggle source
# File lib/grape_api_signature/middleware/auth.rb, line 62
def  request
  auth_request.request
end
secret_key() click to toggle source
# File lib/grape_api_signature/middleware/auth.rb, line 74
def secret_key
  authenticator_result
end
valid?() click to toggle source
# File lib/grape_api_signature/middleware/auth.rb, line 70
def valid?
  secret_key && auth.authentic?(secret_key)
end