Sha256: ae3040946beef6222aaa117b4093836fc20cc1e52d069bff1111bd1b4d1c8fc4

Contents?: true

Size: 1.27 KB

Versions: 16

Compression:

Stored size: 1.27 KB

Contents

require 'jwt'
require 'json/jwt'
require "rest-client"

module ServerlessHub
  class AuthorizerTokenDecoder
    def initialize(app)
      @app = app
    end

    def call(env)
      if env["HTTP_AUTHORIZATION"]
        tokens = decoded_token(env["HTTP_AUTHORIZATION"])

        if tokens.present?
          claims = tokens[0]

          env["lambda.event"]["requestContext"]["authorizer"] = {
            "principalId" => claims["sub"],
            "claims" => claims
          }
        end
      end

      return @app.call(env)
    end

    def self.jwks
      RestClient.get(ENV["JWKS_URL"] || '')
    end

    private
    def decoded_token(token)
      if token.present? && token.starts_with?("Bearer ")
        token = token[7, token.length]
      end

      JWT.decode token, jwk_set.first.to_key, true, { algorithm: 'RS256' } rescue ""
    end

    def jwk_set
      @jwk_set ||= JSON::JWK::Set.new(
        JSON.parse(
          AuthorizerTokenDecoder.jwks
        )
      )
    end
  end
  
  class Authorizer
    def initialize(app)
      @app = app
    end
  
    def call(env)
      if env["lambda.event"] && env["lambda.event"]["requestContext"]
        env["authorizer"] = env["lambda.event"]["requestContext"]["authorizer"]
      end
  
      return @app.call(env)
    end
  end
end

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
serverless_hub-1.0.4 lib/serverless_hub/authorizer.rb
serverless_hub-1.0.3 lib/serverless_hub/authorizer.rb
serverless_hub-1.0.2 lib/serverless_hub/authorizer.rb
serverless_hub-1.0.1 lib/serverless_hub/authorizer.rb
serverless_hub-1.0.0 lib/serverless_hub/authorizer.rb
serverless_hub-0.1.10 lib/serverless_hub/authorizer.rb
serverless_hub-0.1.9 lib/serverless_hub/authorizer.rb
serverless_hub-0.1.8 lib/serverless_hub/authorizer.rb
serverless_hub-0.1.7 lib/serverless_hub/authorizer.rb
serverless_hub-0.1.6 lib/serverless_hub/authorizer.rb
serverless_hub-0.1.5 lib/serverless_hub/authorizer.rb
serverless_hub-0.1.4 lib/serverless_hub/authorizer.rb
serverless_hub-0.1.3 lib/serverless_hub/authorizer.rb
serverless_hub-0.1.2 lib/serverless_hub/authorizer.rb
serverless_hub-0.1.1 lib/serverless_hub/authorizer.rb
serverless_hub-0.1.0 lib/serverless_hub/authorizer.rb