Class: HasHelpers::ServiceTrust::VerifyMiddleware
- Inherits:
-
Object
- Object
- HasHelpers::ServiceTrust::VerifyMiddleware
- 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
- #call(env) ⇒ Object
-
#initialize(app, paths: nil) ⇒ VerifyMiddleware
constructor
A new instance of VerifyMiddleware.
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 |