class DavinciRubyClientSDK::Receiver

Attributes

mode[RW]

Public Class Methods

new(mode = :notify) click to toggle source
# File lib/DavinciRubyClientSDK/receiver.rb, line 8
def initialize(mode = :notify)
  @mode = mode
end

Public Instance Methods

receive(params, headers = []) click to toggle source
# File lib/DavinciRubyClientSDK/receiver.rb, line 12
def receive(params, headers = [])
  if @mode ==:notify
    if self.sign_check(params, headers['Davinci-Signature'], headers['Service'], headers['User-Agent'])
      error = params['error'].nil? ? false : true
      return error, params
    else
      # 验签失败
      params['error'] = 'SignCheckError or ServerNotTrust'
      return true, params
    end

  elsif @mode == :response
    begin
      params = JSON.parse params
      error = params['error'].nil? ? false : true
    rescue Exception => err
      error = true
    end
    return error, params
  else
    raise 'receiver not found!'
  end
end

Private Instance Methods

sign_check(params, header_signs, service, ua) click to toggle source
# File lib/DavinciRubyClientSDK/receiver.rb, line 38
def sign_check(params, header_signs, service, ua)
  sorted_body = Hash[params.sort]
  body_array = Array.new
  sorted_body.map do |k, v|
    body_array << "#{k}=#{v}"
  end
  app_key = DavinciRubyClientSDK::Setting.app_secret
  signed_string = OpenSSL::HMAC.hexdigest('sha1', app_key, body_array.join('&'))
  signed_string == header_signs && service == 'Davinci' && ua == 'Davinci'
end