redd 0.1.6 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/redd/client/authenticated.rb +1 -10
- data/lib/redd/client/authenticated/account.rb +1 -4
- data/lib/redd/client/oauth2.rb +62 -0
- data/lib/redd/client/oauth2/authorization.rb +31 -0
- data/lib/redd/client/oauth2/identity.rb +12 -0
- data/lib/redd/client/unauthenticated.rb +1 -1
- data/lib/redd/error.rb +16 -16
- data/lib/redd/version.rb +1 -1
- metadata +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cabe1bab129d4622fc26a19bea40fcbf27a676f4
|
4
|
+
data.tar.gz: 00a8d3c241c58c0ed449a1002e5e4ae3fb936093
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1275d0cba8f74d11d17b0bdb2644cfb4fcfa982fcc8597e665c505bcfc2252f990a6ecdbdc26d4f4671aef012353997428fac1845319b0ecc703bf673e364354
|
7
|
+
data.tar.gz: 5f21e8de382d108263b1fda22fd833e5862d0d214c9e54ab64f0b153a560185685326688571304120aeeb2e0484ca8627ce3d8505d219789dc0de6c7943827a5
|
@@ -41,14 +41,6 @@ module Redd
|
|
41
41
|
# @return [String] The returned modhash used when making requests.
|
42
42
|
attr_reader :modhash
|
43
43
|
|
44
|
-
# @!attribute [rw] auth_endpoint
|
45
|
-
# @return [String] The site to connect to authenticate with.
|
46
|
-
attr_accessor :auth_endpoint
|
47
|
-
|
48
|
-
def self.new_from_credentials(username, password, options = {})
|
49
|
-
Redd::Client::Unauthenticated.new.login(username, password, options)
|
50
|
-
end
|
51
|
-
|
52
44
|
# Set up an authenticated connection to reddit.
|
53
45
|
#
|
54
46
|
# @param [String] cookie The cookie to use when sending a request.
|
@@ -66,8 +58,7 @@ module Redd
|
|
66
58
|
|
67
59
|
@rate_limit = options[:rate_limit] || Redd::RateLimit.new
|
68
60
|
@user_agent = options[:user_agent] || "Redd/Ruby, v#{Redd::VERSION}"
|
69
|
-
@api_endpoint = options[:api_endpoint] || "
|
70
|
-
@auth_endpoint = options[:auth_endpoint] || "https://ssl.reddit.com/"
|
61
|
+
@api_endpoint = options[:api_endpoint] || "https://www.reddit.com/"
|
71
62
|
end
|
72
63
|
|
73
64
|
private
|
data/lib/redd/client/oauth2.rb
CHANGED
@@ -4,6 +4,68 @@ module Redd
|
|
4
4
|
module Client
|
5
5
|
# The client to connect using OAuth2.
|
6
6
|
class OAuth2 < Redd::Client::Authenticated
|
7
|
+
require "redd/client/oauth2/authorization"
|
8
|
+
require "redd/client/oauth2/identity"
|
9
|
+
|
10
|
+
include Redd::Client::OAuth2::Authorization
|
11
|
+
include Redd::Client::OAuth2::Identity
|
12
|
+
|
13
|
+
# @!attribute [r] api_endpoint
|
14
|
+
# @return [String] The site to make oauth requests with.
|
15
|
+
attr_accessor :api_endpoint
|
16
|
+
|
17
|
+
# @!attribute [r] auth_endpoint
|
18
|
+
# @return [String] The site to connect to authenticate with.
|
19
|
+
attr_accessor :auth_endpoint
|
20
|
+
|
21
|
+
# @!attribute [r] client_id
|
22
|
+
# @return [String] The client_id of the oauth application.
|
23
|
+
attr_reader :client_id
|
24
|
+
|
25
|
+
# @!attribute [r] redirect_uri
|
26
|
+
# @return [String] The exact redirect_uri of the oauth application.
|
27
|
+
attr_reader :redirect_uri
|
28
|
+
|
29
|
+
# @!attribute [rw] access_token
|
30
|
+
# @return [String] The access token used to make requests.
|
31
|
+
attr_accessor :access_token
|
32
|
+
|
33
|
+
def initialize(client_id, secret, redirect_uri, options = {})
|
34
|
+
@client_id = client_id
|
35
|
+
@secret = secret
|
36
|
+
@redirect_uri = redirect_uri
|
37
|
+
|
38
|
+
@rate_limit = options[:rate_limit] || Redd::RateLimit.new(1)
|
39
|
+
@api_endpoint = options[:api_endpoint] || "https://oauth.reddit.com/"
|
40
|
+
@auth_endpoint = options[:auth_endpoint] || "https://ssl.reddit.com/"
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def connection(access_token = @access_token)
|
46
|
+
@connection ||= Faraday.new(url: api_endpoint) do |faraday|
|
47
|
+
faraday.use Faraday::Request::UrlEncoded
|
48
|
+
faraday.use Redd::Response::RaiseError
|
49
|
+
faraday.use Redd::Response::ParseJson
|
50
|
+
faraday.adapter Faraday.default_adapter
|
51
|
+
|
52
|
+
faraday.headers["Authorization"] = "bearer #{access_token}"
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def auth_connection
|
57
|
+
@auth_connection ||= Faraday.new(url: auth_endpoint) do |faraday|
|
58
|
+
faraday.use Faraday::Request::UrlEncoded
|
59
|
+
faraday.use Redd::Response::ParseJson
|
60
|
+
faraday.basic_auth(@client_id, @secret)
|
61
|
+
faraday.adapter Faraday.default_adapter
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
# @return [Hash] The headers that are sent with every request.
|
66
|
+
def headers
|
67
|
+
@headers ||= {}
|
68
|
+
end
|
7
69
|
end
|
8
70
|
end
|
9
71
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Redd
|
2
|
+
module Client
|
3
|
+
class OAuth2
|
4
|
+
module Authorization
|
5
|
+
def auth_url(scope = ["identity"], duration = "temporary", state = "x")
|
6
|
+
path = "https://ssl.reddit.com/api/v1/authorize"
|
7
|
+
query = {
|
8
|
+
client_id: @client_id,
|
9
|
+
redirect_uri: @redirect_uri,
|
10
|
+
response_type: "code",
|
11
|
+
state: state,
|
12
|
+
scope: scope.join(","),
|
13
|
+
duration: duration
|
14
|
+
}
|
15
|
+
string_query = query.map { |key, value| "#{key}=#{value}" }.join("&")
|
16
|
+
|
17
|
+
"#{path}?#{string_query}"
|
18
|
+
end
|
19
|
+
|
20
|
+
def request_access_token(code, set_token = true)
|
21
|
+
response = auth_connection.post "/api/v1/access_token",
|
22
|
+
grant_type: "authorization_code", code: code,
|
23
|
+
redirect_uri: @redirect_uri
|
24
|
+
|
25
|
+
@access_token = response.body[:access_token] if set_token
|
26
|
+
response.body
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -52,7 +52,7 @@ module Redd
|
|
52
52
|
def initialize(options = {})
|
53
53
|
@rate_limit = options[:rate_limit] || Redd::RateLimit.new
|
54
54
|
@user_agent = options[:user_agent] || "Redd/Ruby, v#{Redd::VERSION}"
|
55
|
-
@api_endpoint = options[:api_endpoint] || "
|
55
|
+
@api_endpoint = options[:api_endpoint] || "https://www.reddit.com/"
|
56
56
|
end
|
57
57
|
|
58
58
|
private
|
data/lib/redd/error.rb
CHANGED
@@ -20,41 +20,41 @@ module Redd
|
|
20
20
|
when 200
|
21
21
|
case body
|
22
22
|
when /WRONG_PASSWORD/i
|
23
|
-
InvalidCredentials
|
23
|
+
Redd::Error::InvalidCredentials
|
24
24
|
when /BAD_CAPTCHA/i
|
25
|
-
InvalidCaptcha
|
25
|
+
Redd::Error::InvalidCaptcha
|
26
26
|
when /RATELIMIT/i
|
27
|
-
RateLimited
|
27
|
+
Redd::Error::RateLimited
|
28
28
|
when /BAD_CSS_NAME/i
|
29
|
-
InvalidClassName
|
29
|
+
Redd::Error::InvalidClassName
|
30
30
|
when /TOO_OLD/i
|
31
|
-
Archived
|
31
|
+
Redd::Error::Archived
|
32
32
|
when /TOO_MUCH_FLAIR_CSS/i
|
33
|
-
TooManyClassNames
|
33
|
+
Redd::Error::TooManyClassNames
|
34
34
|
when /USER_REQUIRED/i
|
35
|
-
AuthenticationRequired
|
35
|
+
Redd::Error::AuthenticationRequired
|
36
36
|
end
|
37
37
|
when 400
|
38
|
-
BadRequest
|
38
|
+
Redd::Error::BadRequest
|
39
39
|
when 403
|
40
40
|
case body
|
41
41
|
when /USER_REQUIRED/i
|
42
|
-
AuthenticationRequired
|
42
|
+
Redd::Error::AuthenticationRequired
|
43
43
|
else
|
44
|
-
PermissionDenied
|
44
|
+
Redd::Error::PermissionDenied
|
45
45
|
end
|
46
46
|
when 404
|
47
|
-
NotFound
|
47
|
+
Redd::Error::NotFound
|
48
48
|
when 409
|
49
|
-
Conflict
|
49
|
+
Redd::Error::Conflict
|
50
50
|
when 500
|
51
|
-
InternalServerError
|
51
|
+
Redd::Error::InternalServerError
|
52
52
|
when 502
|
53
|
-
BadGateway
|
53
|
+
Redd::Error::BadGateway
|
54
54
|
when 503
|
55
|
-
ServiceUnavailable
|
55
|
+
Redd::Error::ServiceUnavailable
|
56
56
|
when 504
|
57
|
-
TimedOut
|
57
|
+
Redd::Error::TimedOut
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
data/lib/redd/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: redd
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Avinash Dwarapu
|
@@ -184,6 +184,8 @@ files:
|
|
184
184
|
- lib/redd/client/authenticated/users.rb
|
185
185
|
- lib/redd/client/authenticated/wiki.rb
|
186
186
|
- lib/redd/client/oauth2.rb
|
187
|
+
- lib/redd/client/oauth2/authorization.rb
|
188
|
+
- lib/redd/client/oauth2/identity.rb
|
187
189
|
- lib/redd/client/unauthenticated.rb
|
188
190
|
- lib/redd/client/unauthenticated/account.rb
|
189
191
|
- lib/redd/client/unauthenticated/captcha.rb
|