Handles signing and assembling the URL
Methods
Constants
READ_ONLY_PARAMS | = | { 'oauth_consumer_key' => true, 'oauth_token' => true, 'oauth_signature_method' => true, 'oauth_version' => true, 'oauth_nonce' => true, 'oauth_timestamp' => true, } |
Attributes
[RW] | logger | Modify the logger |
Class Public methods
Ruby’s CGI::encode doesn’t encode spaces correctly
Encodes each part of this url, accounting for some of the weirdness we are dealing with
Create a new SignedURL
- credentails
- The credentials available when signing the request (required).
- url
- The URL (without parameters) to request (required)
- method
- The HTTP Request method that will be made (required)
# File lib/gliffy/url.rb, line 47 def initialize(credentials,url,method,logger=nil) raise ArgumentError.new("credentials is required") if credentials.nil? raise ArgumentError.new("url is required") if url.nil? raise ArgumentError.new("method is required") if method.nil? @credentials = credentials @logger = logger || Logger.new(STDOUT) @logger.level = Logger::INFO @params = { 'oauth_signature_method' => 'HMAC-SHA1', 'oauth_version' => '1.0', } @params['oauth_consumer_key'] = credentials.consumer_key @params['oauth_token'] = credentials.access_token.token if credentials.access_token @consumer_secret = credentials.consumer_secret if credentials.access_token @access_secret = credentials.access_token.secret else @access_secret = nil end @method = method.upcase @url = url end
Instance Public methods
Sets a request parameter
- param
- the name of the parameter, as a string or symbol
- value
- the value of the parameter, unencoded
# File lib/gliffy/url.rb, line 78 def []=(param,value) raise ArgumentError.new("param may not be nil") if param.nil? param = param.to_s raise ArgumentError.new("You may not override #{param}") if READ_ONLY_PARAMS[param] if value.nil? @params.delete(param) else @params[param] = value.to_s end end
Gets the full URL, signed and ready to be requested
# File lib/gliffy/url.rb, line 98 def full_url(timestamp=nil,nonce=nil) @logger.debug("Getting full_url of #{@url}") @logger.debug("OAuth Part 1 : #{@method}") escaped_url = SignedURL::encode(@url) to_sign = @method + "&" + escaped_url + "&" @logger.debug("OAuth Part 2 (raw) : #{@url}") @logger.debug("OAuth Part 2 (esc) : #{escaped_url}") timestamp=Time.now.to_i if timestamp.nil? nonce=@credentials.nonce if nonce.nil? param_part,url_params = handle_params(timestamp,nonce) escaped_params = SignedURL::encode(param_part) @logger.debug("OAuth Part 3 (raw) : #{param_part}") @logger.debug("OAuth Part 3 (esc) : #{escaped_params}") to_sign += escaped_params signature = get_signature(to_sign) url_params['oauth_signature'] = SignedURL::encode(signature) assembled_url = assemble_url(url_params) @logger.debug("Full URL is " + assembled_url) return assembled_url end