Class: FaradayMiddleware::Reddit::Authentication
- Inherits:
-
Faraday::Middleware
- Object
- Faraday::Middleware
- FaradayMiddleware::Reddit::Authentication
show all
- Includes:
- ModhashHelpers
- Defined in:
- lib/faraday_middleware/reddit/request/authentication.rb
Overview
Request middleware that automatically handles user login.
Requires that either a user and password are provided or a pre-generated cookie. Performs an additional login request when no valid login cookie is available.
Constant Summary
collapse
- AUTH_URL =
'https://ssl.reddit.com/api/login'.freeze
Instance Method Summary
collapse
#extract_modhash, included
Constructor Details
17
18
19
20
21
22
23
24
25
26
27
28
29
|
# File 'lib/faraday_middleware/reddit/request/authentication.rb', line 17
def initialize(app, options)
super(app)
@options = options
@user = @options[:user]
@passwd = @options[:password]
@rem = @options[:remember]
@access_token = @options[:access_token]
@cookie = @options[:cookie]
unless (@options[:user] && @options[:password]) || @options[:cookie] || @options[:access_token]
fail ArgumentError, 'Either `user` and `password`, `cookie`, or `access_token` need to be provided as options to the :reddit_authentication middleware'
end
end
|
Instance Method Details
#apply_access_token(env) ⇒ Object
44
45
46
47
48
49
|
# File 'lib/faraday_middleware/reddit/request/authentication.rb', line 44
def apply_access_token(env)
env.url.scheme = 'https'
env.url.port = 443
env.url.host = 'oauth.reddit.com'
env[:request_headers]['Authorization'] = "bearer #{@access_token}"
end
|
#apply_cookie(env) ⇒ Object
51
52
53
54
|
# File 'lib/faraday_middleware/reddit/request/authentication.rb', line 51
def apply_cookie(env)
upstream_cookies = env[:request_headers]['Cookie']
env[:request_headers]['Cookie'] = upstream_cookies ? "#{upstream_cookies}; #{@cookie}" : @cookie
end
|
#authenticate(env) ⇒ Object
56
57
58
59
60
|
# File 'lib/faraday_middleware/reddit/request/authentication.rb', line 56
def authenticate(env)
response = Faraday.post AUTH_URL, user: @user, passwd: @passwd, rem: @rem, api_type: 'json'
env[:modhash] = (response.env)
@cookie = response.['set-cookie']
end
|
#call(env) ⇒ Object
31
32
33
34
35
36
37
38
39
40
41
42
|
# File 'lib/faraday_middleware/reddit/request/authentication.rb', line 31
def call(env)
if @access_token
apply_access_token(env)
elsif @cookie
apply_cookie(env)
else
authenticate(env)
apply_cookie(env)
end
@app.call(env)
end
|