class Rack::Indicium

Constants

BEARER_REGEXP
HTTP_AUTHORIZATION
VERSION

Public Class Methods

new(app, secret, decoder = nil) click to toggle source
# File lib/rack/indicium.rb, line 10
def initialize(app, secret, decoder = nil)
  @app = app

  @secret = secret
  @decoder = decoder || lambda { |jwt, secret| JWT.decode(jwt, secret) }
end

Public Instance Methods

call(env) click to toggle source
# File lib/rack/indicium.rb, line 17
def call(env)
  look_for_authorization_header(env)

  @app.call(env)
end
decode(jwt) click to toggle source
# File lib/rack/indicium.rb, line 40
def decode(jwt)
  @decoder.call(jwt, @secret)
rescue
end
look_for_authorization_header(env) click to toggle source
# File lib/rack/indicium.rb, line 23
def look_for_authorization_header(env)
  authorization_header = env[HTTP_AUTHORIZATION]
  return unless authorization_header

  _, jwt = authorization_header.split(BEARER_REGEXP)
  return unless jwt

  jwt_payload, jwt_header = decode(jwt)

  return unless jwt_payload
  return unless jwt_header

  env["jwt.raw"]     = jwt
  env["jwt.payload"] = jwt_payload
  env["jwt.header"]  = jwt_header
end