class Idcf::FaradayMiddleware::ComputingSignature
コンピューティング用のシグネチャ生成を実施します。
Public Class Methods
new(app, keys = {})
click to toggle source
Calls superclass method
# File lib/idcf/faraday_middleware/computing_signature.rb, line 10 def initialize(app, keys = {}) super(app) @api_key = keys[:api_key] @secret_key = keys[:secret_key] end
Public Instance Methods
call(env)
click to toggle source
# File lib/idcf/faraday_middleware/computing_signature.rb, line 16 def call(env) raise InvalidKeys, errors.messages.to_s if invalid? if env.body.nil? env.url.query = make_get_params(env) else env.body = make_params_body(env) end @app.call env end
Private Instance Methods
add_query_param(query, key, value)
click to toggle source
# File lib/idcf/faraday_middleware/computing_signature.rb, line 45 def add_query_param(query, key, value) query = query.to_s query << '&' unless query.empty? query << "#{Faraday::Utils.escape key}=#{Faraday::Utils.escape value}" end
command_check(query)
click to toggle source
# File lib/idcf/faraday_middleware/computing_signature.rb, line 78 def command_check(query) list = query.find do |x| x[0] == 'command' && x[1].present? end raise InvalidParameter, 'Must be set command=...' if list.nil? end
make_get_params(env)
click to toggle source
# File lib/idcf/faraday_middleware/computing_signature.rb, line 38 def make_get_params(env) query = env.url.query query = add_query_param query, 'apikey', api_key query = add_query_param query, 'response', 'json' add_query_param query, 'signature', signature(query) end
make_params_body(env)
click to toggle source
# File lib/idcf/faraday_middleware/computing_signature.rb, line 29 def make_params_body(env) params = URI.decode_www_form(env.url.query) params.concat(URI.decode_www_form(env.body)) params << ['apikey', api_key] params << %w(response json) params << ['signature', signature(URI.encode_www_form(params))] URI.encode_www_form(params) end
signature(query)
click to toggle source
# File lib/idcf/faraday_middleware/computing_signature.rb, line 51 def signature(query) Base64.strict_encode64( OpenSSL::HMAC.digest( OpenSSL::Digest::SHA1.new, secret_key, signature_seed(query) ) ) end
signature_seed(query)
click to toggle source
# File lib/idcf/faraday_middleware/computing_signature.rb, line 61 def signature_seed(query) raise InvalidParameter, 'Must be set command=...' if query.nil? query = URI.decode_www_form(query.downcase) command_check query query = query.sort do |x, y| x[0] <=> y[0] end signeture_seed_part_decode(URI.encode_www_form(query)).downcase end
signeture_seed_part_decode(query)
click to toggle source
# File lib/idcf/faraday_middleware/computing_signature.rb, line 71 def signeture_seed_part_decode(query) PARTIALLY_DECODE.each do |list| query = query.gsub(*list) end query end