Class: SocialAuth::GooglePlusService
- Inherits:
-
Service
show all
- Defined in:
- app/models/social_auth/google_plus_service.rb
Constant Summary
Constants inherited
from Service
Service::ACCEPTED_METHODS, Service::REDIS_CACHE
Class Method Summary
collapse
Instance Method Summary
collapse
Methods inherited from Service
#access_token, append_to_associated_services, #append_to_friends_list, #authenticated?, #connected?, create_with_request, #disconnect, disconnect_user, #redis_instance, #redis_key, #services
Class Method Details
.connect_with(user, auth_token = {}, method = "Connected") ⇒ Object
25
26
27
28
29
30
31
32
33
34
35
36
37
|
# File 'app/models/social_auth/google_plus_service.rb', line 25
def self.connect_with(user, auth_token={}, method="Connected")
access_token = fetch_access_token(auth_token)
request = create_connection(access_token).get('me')
return create_with_request(
request.id,
user,
method,
{refresh_token: access_token[:refresh_token]}
)
rescue GooglePlus::RequestError => e
raise InvalidToken.new(e.message)
end
|
.create_connection(auth_token = {}) ⇒ Object
75
76
77
78
79
|
# File 'app/models/social_auth/google_plus_service.rb', line 75
def self.create_connection(auth_token={})
GooglePlus.api_key = SocialAuth.google_api_key
GooglePlus.access_token = auth_token[:access_token]
GooglePlus::Person
end
|
.fetch_access_token(auth_token = {}) ⇒ Object
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
# File 'app/models/social_auth/google_plus_service.rb', line 39
def self.fetch_access_token(auth_token={})
params = {
client_id: SocialAuth.google_client_id,
client_secret: SocialAuth.google_client_secret,
redirect_uri: SocialAuth.google_redirect_uri
}
if auth_token[:auth_token].present?
params[:code] = auth_token[:auth_token]
params[:grant_type] = "authorization_code"
request = Typhoeus::Request.new(
"https://www.googleapis.com/oauth2/v3/token",
method: :post,
params: params
)
else
params[:refresh_token] = auth_token[:refresh_token]
params[:grant_type] = "refresh_token"
request = Typhoeus::Request.new(
"https://www.googleapis.com/oauth2/v3/token",
method: :post,
params: params
)
end
request.on_complete do |response|
body = JSON.parse(response.body).with_indifferent_access
if response.success?
return body
else
raise InvalidToken.new(body[:error_description])
end
end
request.run
end
|
.init_with(auth_token = {}) ⇒ Object
11
12
13
14
15
16
17
18
19
20
21
22
23
|
# File 'app/models/social_auth/google_plus_service.rb', line 11
def self.init_with(auth_token={})
access_token = fetch_access_token(auth_token)
request = create_connection(access_token).get('me')
return create_with_request(
request.id,
User.create_with_google_plus_request(request),
"Authenticated",
{refresh_token: access_token[:refresh_token]}
)
rescue GooglePlus::RequestError => e
raise InvalidToken.new(e.message)
end
|
Instance Method Details
#friend_ids ⇒ Object
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
# File 'app/models/social_auth/google_plus_service.rb', line 85
def friend_ids
if redis_instance.exists(redis_key(:friends))
friend_ids = redis_instance.smembers(redis_key(:friends))
else
items = google_items
friend_ids = items.map(&:id) if items.present?
if friend_ids.present?
redis_instance.del(redis_key(:friends))
redis_instance.sadd(redis_key(:friends), friend_ids)
redis_instance.expire(redis_key(:friends), REDIS_CACHE)
else
return []
end
end
friend_ids
rescue InvalidToken => e
disconnect
return []
end
|
#google_items ⇒ Object
81
82
83
|
# File 'app/models/social_auth/google_plus_service.rb', line 81
def google_items
self.class.create_connection(self.class.fetch_access_token(access_token)).list.items
end
|
#name ⇒ Object
7
8
9
|
# File 'app/models/social_auth/google_plus_service.rb', line 7
def name
"Google Plus"
end
|