Newbie: Ruby, OAuth
fitter man
Registered Users Posts: 9 Beginner grinner
I'm just starting to mess around with the API. I'm hoping to write something in ruby that will do a bulk update of captions for images in an account.
I'm getting hung up on the use of OAuth and am using the oauth gem but I'm having a hard time wrapping my head around how OAuth is going work without a browser. For the moment I'd be fine hard-coding my credentials in to get the thing working and worry about that later.
My sample code looks like this. My questions follow the code
The output of this session is shown below, with some values replaced with "<OMITTED>" where I have scrubbed them out.
The end result is that I'm getting a 401 (not authorized), but I'm trying to figure out if I'm skipping some very basic step here. For example, with a headless app, how can I inject the user authorization portion of the OAuth transaction.
I'm getting hung up on the use of OAuth and am using the oauth gem but I'm having a hard time wrapping my head around how OAuth is going work without a browser. For the moment I'd be fine hard-coding my credentials in to get the thing working and worry about that later.
My sample code looks like this. My questions follow the code
require 'rubygems' require 'oauth' @consumer = OAuth::Consumer.new(ENV['SMUGMUG_API_KEY'], ENV['SMUGMUG_API_SECRET'], { :site => "http://api.smugmug.com", :scheme => :query_string, :request_token_path => "/services/oauth/getRequestToken.mg", :access_token_path => "/services/oauth/getAccessToken.mg", :authorize_path => "/services/oauth/authorize.mg" }) @consumer.http.set_debug_output($stdout) @request_token = @consumer.get_request_token @access_token = @request_token.get_access_token
The output of this session is shown below, with some values replaced with "<OMITTED>" where I have scrubbed them out.
opening connection to api.smugmug.com... opened <- "POST /services/oauth/getRequestToken.mg?oauth_callback=oob&oauth_nonce=KG5crViraAQE3is9XVv6g9lC0oOjrVwZqzVr04Sd4I&oauth_timestamp=1385241479&oauth_signature_method=HMAC-SHA1&oauth_version=1.0&oauth_consumer_key=<OMITTED>&oauth_body_hash=2jmj7l5rSw0yVb%2FvlWAYkK%2FYBwk%3D&oauth_signature=EdY6oxtvjQbHcwlmdwJXV8ALqIE%3D HTTP/1.1\r\nContent-Length: 0\r\nConnection: close\r\nUser-Agent: OAuth gem v0.4.7\r\nAccept: */*\r\nHost: api.smugmug.com\r\n\r\n" -> "HTTP/1.1 200 OK\r\n" -> "Cache-Control: private, max-age=1, must-revalidate\r\n" -> "Content-Type: text/html; charset=utf-8\r\n" -> "Expires: Sat, 23 Nov 2013 21:18:00 GMT\r\n" -> "Server: Apache\r\n" -> "X-Extra: 0.03654\r\n" -> "X-Powered-By: SmugMug/1.0\r\n" -> "X-S: 100.10.215:11638\r\n" -> "X-SmugMug-Hiring: How to love what you do: http://www.smugmug.com/jobs/\r\n" -> "X-SmugMug-Values: 2/4 - Love your employees\r\n" -> "X-TTFB: 0.0426\r\n" -> "X-TTFB-L: 128\r\n" -> "X-UA-Compatible: IE=edge\r\n" -> "Date: Sat, 23 Nov 2013 21:17:59 GMT\r\n" -> "Transfer-Encoding: chunked\r\n" -> "Connection: close\r\n" -> "Connection: Transfer-Encoding\r\n" -> "Set-Cookie: SMSESS=f4cf45295399414ea2747ca75f7925af; path=/; domain=.smugmug.com; HttpOnly\r\n" -> "Set-Cookie: SMSESS=2f58844d18d212dbeade9c6dc8e783cd; path=/; domain=.smugmug.com; HttpOnly\r\n" -> "Set-Cookie: _ss=mBvxJMMQV%2Fn1zj%2FC3bzVA4inuhQ9IbUdmE3YD4ZpfFD3a2SDXhuT%2Fw%3D%3D; expires=Sun, 24-Nov-2013 22:17:59 GMT; path=/; domain=.smugmug.com\r\n" -> "Set-Cookie: _ss=tu7n8Qrt7FA9FP%2FF%2BHNyTmQ8HCQhYSRgnNzaTiVb2XD1dzGv16XFqw%3D%3D; expires=Sun, 24-Nov-2013 22:17:59 GMT; path=/; domain=.smugmug.com\r\n" -> "\r\n" -> "00000080\r\n" reading 128 bytes... -> "oauth_token=8ae04d01a8f51c534b6946c4d4e20290&oauth_token_secret=<OMITTED>" read 128 bytes reading 2 bytes... -> "\r\n" read 2 bytes -> "00000000\r\n" -> "\r\n" Conn close opening connection to api.smugmug.com... opened <- "POST /services/oauth/getAccessToken.mg?oauth_nonce=5k52YB0P2t8CpJR7xkJIhSsuEUE9Ggd0mtXYrMbQ2U&oauth_timestamp=1385241480&oauth_signature_method=HMAC-SHA1&oauth_version=1.0&oauth_consumer_key=<OMITTED>&oauth_token=8ae04d01a8f51c534b6946c4d4e20290&oauth_body_hash=2jmj7l5rSw0yVb%2FvlWAYkK%2FYBwk%3D&oauth_signature=sixgJkX59hdjRO6DUHYVvQpeBf8%3D HTTP/1.1\r\nContent-Length: 0\r\nConnection: close\r\nUser-Agent: OAuth gem v0.4.7\r\nAccept: */*\r\nHost: api.smugmug.com\r\n\r\n" -> "HTTP/1.1 401 Unauthorized\r\n" -> "Cache-Control: private, max-age=1, must-revalidate\r\n" -> "Content-Encoding: gzip\r\n" -> "Content-Type: text/html; charset=utf-8\r\n" -> "Expires: Sat, 23 Nov 2013 21:18:00 GMT\r\n" -> "Server: Apache\r\n" -> "Vary: Accept-Encoding\r\n" -> "X-Extra: 0.02748\r\n" -> "X-Powered-By: SmugMug/1.0\r\n" -> "X-S: 100.12.164:7607\r\n" -> "X-SmugMug-Hiring: How to love what you do: http://www.smugmug.com/jobs/\r\n" -> "X-SmugMug-Values: 4/4 - It's the product, stupid\r\n" -> "X-TTFB: 0.0312\r\n" -> "X-TTFB-L: 21\r\n" -> "X-UA-Compatible: IE=edge\r\n" -> "Content-Length: 41\r\n" -> "Date: Sat, 23 Nov 2013 21:17:59 GMT\r\n" -> "Connection: close\r\n" -> "Set-Cookie: SMSESS=94606debaf7723262042300a42c46b5f; path=/; domain=.smugmug.com; HttpOnly\r\n" -> "Set-Cookie: SMSESS=e5b46d76941fdc77697ba7782dbf46b1; path=/; domain=.smugmug.com; HttpOnly\r\n" -> "Set-Cookie: _ss=aN4U7uVbvW7mCVFQaUAaU2tt4UMpM6lL8%2FYK0TeKRC3pjsEEJsmEHg%3D%3D; expires=Sun, 24-Nov-2013 22:17:59 GMT; path=/; domain=.smugmug.com\r\n" -> "Set-Cookie: _ss=qdcHm%2ByaPtdY5adw84qRkHStMmiTOuRkCt8SepzmMz7QOec7iJGpig%3D%3D; expires=Sun, 24-Nov-2013 22:17:59 GMT; path=/; domain=.smugmug.com\r\n" -> "\r\n" reading 41 bytes... -> "\037\213\b\000\000\000\000\000\000\003\313\314+K\314\311L\321O\255(\310,JMQ(\311\317N\315\003\000h\205SW\025\000\000\000" read 41 bytes Conn close /Library/Ruby/Gems/1.8/gems/oauth-0.4.7/lib/oauth/consumer.rb:216:in `token_request': 401 Unauthorized (OAuth::Unauthorized) from /Library/Ruby/Gems/1.8/gems/oauth-0.4.7/lib/oauth/tokens/request_token.rb:18:in `get_access_token' from ./interact.rb:18
The end result is that I'm getting a 401 (not authorized), but I'm trying to figure out if I'm skipping some very basic step here. For example, with a headless app, how can I inject the user authorization portion of the OAuth transaction.
0