module SunGem

Constants

REQUIRED_KEYS
TIMEOUT_MINUTES
VERSION

Public Class Methods

authenticate(params, optional_params = {}) click to toggle source
# File lib/sun_gem.rb, line 13
def authenticate(params, optional_params = {})
  return false, 'invalid_parameter', 400 unless params[:signature]
  required_params = params.stringify_keys!.slice(*REQUIRED_KEYS)
  return false, 'invalid_parameter', 400 if required_params.size != REQUIRED_KEYS.size
  return false, 'expired_signature', 400 if expired_signature?(required_params[:time])
  return false, 'invalid_server', 401 unless secret_key

  signature = Digest::SHA1.hexdigest(required_params.merge(optional_params).merge(secret_key: secret_key))
  if signature == params[:signature]
    true
  else
    return false, 'invalid_signature', 400
  end
end
generate_signature(params, optional_params = {}) click to toggle source
# File lib/sun_gem.rb, line 8
def generate_signature(params, optional_params = {})
  params = params.merge(secret_key: secret_key).merge(optional_params)
  Digest::SHA1.hexdigest(convert_params(params).flatten.join)
end
secret_key() click to toggle source
# File lib/sun_gem.rb, line 28
def secret_key
  data = YAML.load_file("#{Rails.root}/config/sun_gem.yml")
  data["secret_key"]
end

Private Class Methods

convert_params(params) click to toggle source
# File lib/sun_gem.rb, line 39
def convert_params(params)
  params.sort.to_h.values.flatten.map { |e| e.is_a?(Hash) ? convert_params(e) : e }
end
expired_signature?(time) click to toggle source
# File lib/sun_gem.rb, line 35
def expired_signature?(time)
  time.to_i < TIMEOUT_MINUTES.minutes.ago.to_i
end