class Angus::Authentication::Client

Constants

AUTHENTICATION_HEADER
BAAS_AUTHENTICATION_HEADER
BAAS_SESSION_HEADER
DATE_HEADER

Public Class Methods

new(settings) click to toggle source
# File lib/angus/authentication/client.rb, line 14
def initialize(settings)
  unless settings[:public_key] && settings[:private_key]
    warn "No authentication info provided, angus-authentication has been disabled for: #{settings[:service_id]}"
    @enabled = false
    return
  end

  @enabled = true
  @public_key = settings[:public_key]
  @private_key = settings[:private_key]

  @store = RedisClient.new(settings[:store] || {})
end

Public Instance Methods

prepare_request(request, http_method, script_name) click to toggle source
# File lib/angus/authentication/client.rb, line 28
def prepare_request(request, http_method, script_name)
  return unless @enabled

  date = Date.today

  auth_token = generate_auth_token(date, http_method, script_name)
  request[DATE_HEADER] = date.httpdate
  request[AUTHENTICATION_HEADER] = generate_auth_header(auth_token)

  session_auth_token = generate_session_auth_token(date, http_method, script_name)
  request[BAAS_AUTHENTICATION_HEADER] = generate_auth_header(session_auth_token)
end
store_session_private_key(response) click to toggle source
# File lib/angus/authentication/client.rb, line 41
def store_session_private_key(response)
  return unless @enabled

  session_key_seed = extract_session_key_seed(response)
  return unless session_key_seed

  session_key = generate_session_private(session_key_seed)

  @store.store_session_key(@public_key, session_key)
end

Private Instance Methods

auth_data(date, http_method, script_name) click to toggle source
# File lib/angus/authentication/client.rb, line 71
def auth_data(date, http_method, script_name)
  "#{date.httpdate}\n#{http_method}\n#{script_name}"
end
extract_session_key_seed(response) click to toggle source
# File lib/angus/authentication/client.rb, line 63
def extract_session_key_seed(response)
  if response.is_a?(Hash)
    response.find { |k, v| k.upcase ==  BAAS_SESSION_HEADER.upcase }.last
  else
    response[BAAS_SESSION_HEADER]
  end
end
generate_auth_header(auth_token) click to toggle source
# File lib/angus/authentication/client.rb, line 79
def generate_auth_header(auth_token)
  "#@public_key:#{auth_token}"
end
generate_auth_token(date, http_method, script_name) click to toggle source
# File lib/angus/authentication/client.rb, line 59
def generate_auth_token(date, http_method, script_name)
  Digest::SHA1.hexdigest("#@private_key\n#{auth_data(date, http_method, script_name)}")
end
generate_session_auth_token(date, http_method, script_name) click to toggle source
# File lib/angus/authentication/client.rb, line 54
def generate_session_auth_token(date, http_method, script_name)
  session_private_key = @store.get_session_key(@public_key)
  Digest::SHA1.hexdigest("#{session_private_key}\n#{auth_data(date, http_method, script_name)}")
end
generate_session_private(key_seed) click to toggle source
# File lib/angus/authentication/client.rb, line 75
def generate_session_private(key_seed)
  Digest::SHA1.hexdigest("#@private_key\n#{key_seed}")
end