Sha256: c05ce50bc87586e1e315dafc0718efb2adadc882fa0eab25bdbe5b870adb351f
Contents?: true
Size: 1.81 KB
Versions: 2
Compression:
Stored size: 1.81 KB
Contents
module CloudQuery class Request attr_accessor :method, :headers, :scheme, :host, :port, :path, :params, :body def initialize(options={}) @method = options[:method] || 'POST' @headers = options[:headers] || {} @scheme = options[:scheme] || SCHEME @host = options[:host] || HOST @port = options[:port] || (@scheme == 'https' ? URI::HTTPS::DEFAULT_PORT : URI::HTTP::DEFAULT_PORT) @path = options[:path] || PATH @params = options[:params] || {} if ['PUT', 'DELETE'].include?(@method) @params['_method'] = @method @method = 'POST' end @body = options[:body] @account = options[:account] @secret = options[:secret] end def request_uri(account=@account, secret=@secret) query = query_str(signature_params(account)) uri = if query.empty? @path.dup else "#{@path}?#{query}" end uri = append_signature(uri, secret) if secret uri end def url(account=@account, secret=@secret) base_uri.merge(request_uri(account, secret)).to_s end private def append_signature(uri, secret) sig = Crypto::URLSafeSHA1.sign(secret, uri) x_sig = Rack::Utils.build_query("x_sig" => sig) "#{uri}&#{x_sig}" end def signature_params(account=@account) return {} unless account { 'x_name' => account, 'x_time' => Time.now.to_i_milliseconds, 'x_nonce' => CloudQuery::Crypto::Random.nonce, 'x_method' => SIGNING_METHOD, } end def query_str(additional_params={}) Rack::Utils.build_query(@params.dup.merge(additional_params)) end def base_uri uri_class = (@scheme == 'https' ? URI::HTTPS : URI::HTTP) uri_class.build(:scheme => @scheme, :host => @host, :port => @port) end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
xoopit-cloud_query-0.2.0 | lib/cloud_query/request.rb |
xoopit-cloud_query-0.2.1 | lib/cloud_query/request.rb |