Skip to content
This repository has been archived by the owner on Jun 27, 2020. It is now read-only.

Support for reddit forced SSL accounts #35

Open
blakejakopovic opened this issue Oct 28, 2014 · 1 comment
Open

Support for reddit forced SSL accounts #35

blakejakopovic opened this issue Oct 28, 2014 · 1 comment

Comments

@blakejakopovic
Copy link
Contributor

When a reddit user enables forced SSL, it seems to break the API. I've tested it using the save and unsave methods on a post. It returns a 307 redirect, and the method fails. I'm not sure what's involved to get this working. For now the fix is to disable forced SSL for the account.

#<struct Faraday::Env
 method=:post,
 body=
  "<html>\n <head>\n  <title>307 Temporary Redirect</title>\n </head>\n <body>\n  <h1>307 Temporary Redirect</h1>\n  The resource has been moved to <a href=\"https://reddit.com/modify_hsts_grant?dest=https%3A%2F%2Fwww.reddit.com%2Fapi%2Funsave\">https://reddit.com/modify_hsts_grant?dest=https%3A%2F%2Fwww.reddit.com%2Fapi%2Funsave</a>;\nyou should be redirected automatically.\n\n\n </body>\n</html>",
 url=#<URI::HTTP:0x007faa52847bb0 URL:http://www.reddit.com/api/unsave>,
 request=
  #<struct Faraday::RequestOptions
   params_encoder=nil,
   proxy=nil,
   bind=nil,
   timeout=nil,
   open_timeout=nil,
   boundary=nil,
   oauth=nil>,
 request_headers=
  {"User-Agent"=>"Faraday v0.9.0",
   "Cookie"=>
    "reddit_session=XXXXXXXXXXXXX",
   "X-Modhash"=>"XXXXXXXXXXXXX",
   "Content-Type"=>"application/x-www-form-urlencoded"},
 ssl=
  #<struct Faraday::SSLOptions
   verify=nil,
   ca_file=nil,
   ca_path=nil,
   verify_mode=nil,
   cert_store=nil,
   client_cert=nil,
   client_key=nil,
   certificate=nil,
   private_key=nil,
   verify_depth=nil,
   version=nil>,
 parallel_manager=nil,
 params=nil,
 response=nil,
 response_headers=
  {"date"=>"Tue, 28 Oct 2014 00:43:20 GMT",
   "content-type"=>"text/html; charset=UTF-8",
   "transfer-encoding"=>"chunked",
   "connection"=>"close",
   "set-cookie"=>
    "XXXXXXXXXXXXX; path=/; domain=.reddit.com; HttpOnly",
   "pragma"=>"no-cache",
   "cache-control"=>"no-cache, no-cache",
   "location"=>
    "https://reddit.com/modify_hsts_grant?dest=https%3A%2F%2Fwww.reddit.com%2Fapi%2Funsave",
   "x-ua-compatible"=>"IE=edge",
   "x-moose"=>"majestic",
   "server"=>"cloudflare-nginx",
   "cf-ray"=>"XXXXXXXXXXXXX"},
 status=307>
@sidoh
Copy link

sidoh commented Sep 20, 2016

I'm guessing this is related to the issue I was just seeing. Here's the backtrace (clipped to include redditkit-related lines):

TypeError: no implicit conversion of Symbol into Integer
  /home/me/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/redditkit-1.0.2/lib/redditkit/client/utilities.rb:72:in `[]'
  /home/me/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/redditkit-1.0.2/lib/redditkit/client/utilities.rb:72:in `object_kind_from_response'
  /home/me/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/redditkit-1.0.2/lib/redditkit/client/utilities.rb:41:in `object_class_from_response'
  /home/me/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/redditkit-1.0.2/lib/redditkit/client/utilities.rb:79:in `object_from_response'
  /home/me/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/redditkit-1.0.2/lib/redditkit/client/users.rb:17:in `user'
  /home/me/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/redditkit-1.0.2/lib/redditkit/client/account.rb:22:in `sign_in'
  /home/me/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/redditkit-1.0.2/lib/redditkit/client.rb:61:in `initialize'

It looks like the problem was the response body while logging in was empty. I dug in a bit and found this seemed to be because the signin request was being served a 301 redirect response, redirecting to https://www.reddit.com/... instead of http://.... Here's the response from faraday:

#<Faraday::Env @method=:get @body="" @url=#<URI::HTTP http://www.reddit.com/user/<me>/about.json> @request=#<Faraday::RequestOptions (empty)> @request_headers={"User-Agent"=>"Faraday v0.9.1", "Cookie"=>"reddit_session=<session>", "X-Modhash"=>"<hash>"} @ssl=#<Faraday::SSLOptions (empty)> @response_headers={"retry-after"=>"0", "location"=>"https://www.reddit.com/user/<me>/about.json", "content-length"=>"0", "accept-ranges"=>"bytes", "date"=>"Tue, 20 Sep 2016 21:26:47 GMT", "via"=>"1.1 varnish", "connection"=>"close", "x-served-by"=>"cache-dfw1843-DFW", "x-cache"=>"HIT", "x-cache-hits"=>"0", "x-timer"=>"S1474406807.209149,VS0,VE0", "cache-control"=>"private, max-age=3600", "server"=>"snooserv"} @status=301>

(Note how url and response_headers['location'])

I fixed this by setting the api_endpoint on my client:

      @client = RedditKit::Client.new
      @client.api_endpoint = 'https://www.reddit.com'
      @client.sign_in('me', 'hunter2')

Wondering if 'https://www.reddit.com' should be the default API endpoint?

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants