def execute(stdout, stdin, stderr, arguments = [])
@stdout = stdout
@stdin = stdin
@stderr = stderr
extract_command_and_parse_options(arguments)
if sufficient_options? && valid_command?
if command == "debug"
@command = "sign"
@options[:verbose] = true
end
case command
when "authorize"
consumer = OAuth::Consumer.new \
options[:oauth_consumer_key],
options[:oauth_consumer_secret],
:access_token_url => options[:access_token_url],
:authorize_url => options[:authorize_url],
:request_token_url => options[:request_token_url],
:scheme => :query_string
request_token = consumer.get_request_token
stdout.puts "Please visit this url to authorize:"
stdout.puts request_token.authorize_url
stdout.puts "Press return to continue..."
stdin.gets
begin
access_token = request_token.get_access_token
stdout.puts "Response:"
access_token.params.each do |k,v|
stdout.puts " #{k}: #{v}"
end
rescue OAuth::Unauthorized => e
stderr.puts "A problem occurred while attempting to obtain an access token:"
stderr.puts e
end
when "sign"
parameters = prepare_parameters
request = OAuth::RequestProxy.proxy \
"method" => options[:method],
"uri" => options[:uri],
"parameters" => parameters
if verbose?
stdout.puts "OAuth parameters:"
request.oauth_parameters.each do |k,v|
stdout.puts " " + [k, v] * ": "
end
stdout.puts
if request.non_oauth_parameters.any?
stdout.puts "Parameters:"
request.non_oauth_parameters.each do |k,v|
stdout.puts " " + [k, v] * ": "
end
stdout.puts
end
end
request.sign! \
:consumer_secret => options[:oauth_consumer_secret],
:token_secret => options[:oauth_token_secret]
if verbose?
stdout.puts "Method: #{request.method}"
stdout.puts "URI: #{request.uri}"
stdout.puts "Normalized params: #{request.normalized_parameters}" unless options[:xmpp]
stdout.puts "Signature base string: #{request.signature_base_string}"
if options[:xmpp]
stdout.puts
stdout.puts "XMPP Stanza:"
stdout.puts "<oauth xmlns='urn:xmpp:tmp:oauth'>\n<oauth_consumer_key>\#{request.oauth_consumer_key}</oauth_consumer_key>\n<oauth_token>\#{request.oauth_token}</oauth_token>\n<oauth_signature_method>\#{request.oauth_signature_method}</oauth_signature_method>\n<oauth_signature>\#{request.oauth_signature}</oauth_signature>\n<oauth_timestamp>\#{request.oauth_timestamp}</oauth_timestamp>\n<oauth_nonce>\#{request.oauth_nonce}</oauth_nonce>\n<oauth_version>\#{request.oauth_version}</oauth_version>\n</oauth>\n"
stdout.puts
stdout.puts "Note: You may want to use bare JIDs in your URI."
stdout.puts
else
stdout.puts "OAuth Request URI: #{request.signed_uri}"
stdout.puts "Request URI: #{request.signed_uri(false)}"
stdout.puts "Authorization header: #{request.oauth_header(:realm => options[:realm])}"
end
stdout.puts "Signature: #{request.oauth_signature}"
stdout.puts "Escaped signature: #{OAuth::Helper.escape(request.oauth_signature)}"
else
stdout.puts request.oauth_signature
end
end
else
usage
end
end