Class: HasHelpers::ServiceTrust::VerifyMiddleware

Inherits:
Object
  • Object
show all
Defined in:
lib/has_helpers/service_trust/verify_middleware.rb

Constant Summary collapse

STATUS_FOR_ERROR =
{
  TLSRequiredError      => 400,
  OutboundTLSError      => 502,
  JwksUnavailableError  => 503,
  InsufficientCapabilityError => 403
}.freeze

Instance Method Summary collapse

Constructor Details

#initialize(app, paths: nil) ⇒ VerifyMiddleware

Returns a new instance of VerifyMiddleware.



13
14
15
16
# File 'lib/has_helpers/service_trust/verify_middleware.rb', line 13

def initialize(app, paths: nil)
  @app = app
  @paths = paths
end

Instance Method Details

#call(env) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/has_helpers/service_trust/verify_middleware.rb', line 18

def call(env)
  request = Rack::Request.new(env)
  return @app.call(env) unless applies?(request)

  enforce_tls!(request)
  token = BearerToken.extract!(request.get_header("HTTP_AUTHORIZATION"))
  result = Verifier.verify!(token, expected_audience: HasHelpers::ServiceTrust.config.issuer, request: request)
  env["service_trust.token"] = result.claims
  env["service_trust.capabilities"] = result.capabilities
  env["service_trust.result"] = result
  @app.call(env)
rescue Error => e
  status = STATUS_FOR_ERROR.fetch(e.class, 401)
  [status, { "Content-Type" => "application/json" }, [{ error: e.class.name.demodulize }.to_json]]
end