class Keycloak::Middleware

Public Class Methods

new(app) click to toggle source
# File lib/keycloak-api-rails/middleware.rb, line 4
def initialize(app)
  @app = app
end

Public Instance Methods

authentication_failed(message) click to toggle source
# File lib/keycloak-api-rails/middleware.rb, line 26
def authentication_failed(message)
  logger.info(message)
  [401, {"Content-Type" => "application/json"}, [ { error: message }.to_json]]
end
authentication_succeeded(env, decoded_token) click to toggle source
# File lib/keycloak-api-rails/middleware.rb, line 31
def authentication_succeeded(env, decoded_token)
  Helper.assign_current_user_id(env, decoded_token)
  Helper.assign_current_authorized_party(env, decoded_token)
  Helper.assign_current_user_email(env, decoded_token)
  Helper.assign_current_user_locale(env, decoded_token)
  Helper.assign_current_user_custom_attributes(env, decoded_token, config.custom_attributes)
  Helper.assign_realm_roles(env, decoded_token)
  Helper.assign_resource_roles(env, decoded_token)
  Helper.assign_keycloak_token(env, decoded_token)
  @app.call(env)
end
call(env) click to toggle source
# File lib/keycloak-api-rails/middleware.rb, line 8
def call(env)
  method = env["REQUEST_METHOD"]
  path   = env["PATH_INFO"]
  uri    = env["REQUEST_URI"]

  if service.need_authentication?(method, path, env)
    logger.debug("Start authentication for #{method} : #{path}")
    token         = service.read_token(uri, env)
    decoded_token = service.decode_and_verify(token)
    authentication_succeeded(env, decoded_token)
  else
    logger.debug("Skip authentication for #{method} : #{path}")
    @app.call(env)
  end
rescue TokenError => e
  authentication_failed(e.message)
end
config() click to toggle source
# File lib/keycloak-api-rails/middleware.rb, line 51
def config
  Keycloak.config
end
logger() click to toggle source
# File lib/keycloak-api-rails/middleware.rb, line 47
def logger
  Keycloak.logger
end
service() click to toggle source
# File lib/keycloak-api-rails/middleware.rb, line 43
def service
  Keycloak.service
end