module Keycloak

Constants

KEYCLOAK_JSON_FILE
OLD_KEYCLOAK_JSON_FILE
VERSION

Attributes

auth_server_url[RW]
custom_host_header[RW]
generate_request_exception[RW]
keycloak_controller[RW]
proc_external_attributes[RW]
proxy[RW]
realm[RW]
validate_token_when_call_has_role[RW]

Public Class Methods

explode_exception() click to toggle source
# File lib/sqsc-keycloak-ruby.rb, line 22
def self.explode_exception
  Keycloak.generate_request_exception = true if Keycloak.generate_request_exception.nil?
  Keycloak.generate_request_exception
end
installation_file() click to toggle source
# File lib/sqsc-keycloak-ruby.rb, line 27
def self.installation_file
  @@installation_file ||= if File.exist?(KEYCLOAK_JSON_FILE)
                           KEYCLOAK_JSON_FILE
                         else
                           OLD_KEYCLOAK_JSON_FILE
                         end
end
installation_file=(file = nil) click to toggle source
# File lib/sqsc-keycloak-ruby.rb, line 35
def self.installation_file=(file = nil)
  raise InstallationFileNotFound unless file.instance_of?(String) && File.exist?(file)
  @@installation_file = file || KEYCLOAK_JSON_FILE
end

Private Class Methods

generic_request(access_token, uri, query_parameters, body_parameter, method) click to toggle source
# File lib/sqsc-keycloak-ruby.rb, line 932
def self.generic_request(access_token, uri, query_parameters, body_parameter, method)
  Keycloak::Client.verify_setup
  final_url = uri

  header = {'Content-Type' => 'application/x-www-form-urlencoded',
            'Authorization' => "Bearer #{access_token}"}

  if query_parameters
    parameters = URI.encode_www_form(query_parameters)
    final_url = final_url << '?' << parameters
  end

  case method.upcase
  when 'GET'
    _request = -> do
      RestClient.get(final_url, header){|response, request, result|
        rescue_response(response)
      }
    end
  when 'POST', 'PUT'
    header["Content-Type"] = 'application/json'
    parameters = JSON.generate body_parameter
    _request = -> do
      case method.upcase
      when 'POST'
        RestClient.post(final_url, parameters, header){|response, request, result|
          rescue_response(response)
        }
      else
        RestClient.put(final_url, parameters, header){|response, request, result|
          rescue_response(response)
        }
      end
    end
  when 'DELETE'
    _request = -> do
      if body_parameter
        header["Content-Type"] = 'application/json'
        parameters = JSON.generate body_parameter
        RestClient::Request.execute(method: :delete, url: final_url,
                      payload: parameters, headers: header) { |response, request, result|
          rescue_response(response)
        }
      else
        RestClient.delete(final_url, header) { |response, request, result|
          rescue_response(response)
        }
      end
    end
  else
    raise
  end

  _request.call
end
rescue_response(response) click to toggle source
# File lib/sqsc-keycloak-ruby.rb, line 988
def self.rescue_response(response)
  case response.code
  when 200..399
    if response.body.empty?
      true
    else
      response.body
    end
  when 400..499
    response.return!
  else
    if Keycloak.explode_exception
      response.return!
    else
      begin
        response.return!
      rescue RestClient::ExceptionWithResponse => err
        err.response
      rescue StandardError => e
        e.message
      end
    end
  end
end