Sha256: a95c7c066bf548c37a70d2e93b9481daf11c48f72c90e7830c515c0eaca50359
Contents?: true
Size: 1.17 KB
Versions: 3
Compression:
Stored size: 1.17 KB
Contents
require 'json/jwt' require 'rack/prx_auth/certificate' require 'rack/prx_auth/token_data' require 'rack/prx_auth/auth_validator' require 'prx_auth' module Rack class PrxAuth INVALID_TOKEN = [ 401, {'Content-Type' => 'application/json'}, [{status: 401, error: 'Invalid JSON Web Token'}.to_json] ] DEFAULT_ISS = 'id.prx.org' attr_reader :issuer def initialize(app, options = {}) @app = app @certificate = Certificate.new(options[:cert_location]) @issuer = options[:issuer] || DEFAULT_ISS end def build_auth_validator(token) AuthValidator.new(token, @certificate, @issuer) end def call(env) return @app.call(env) unless env['HTTP_AUTHORIZATION'] token = env['HTTP_AUTHORIZATION'].split[1] auth_validator = build_auth_validator(token) return @app.call(env) unless should_validate_token?(auth_validator) if auth_validator.valid? env['prx.auth'] = TokenData.new(auth_validator.claims) @app.call(env) else INVALID_TOKEN end end private def should_validate_token?(auth_validator) auth_validator.token_issuer_matches? end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
prx_auth-1.7.1 | lib/rack/prx_auth.rb |
prx_auth-1.7.0 | lib/rack/prx_auth.rb |
prx_auth-1.6.0 | lib/rack/prx_auth.rb |