Skip to content

Commit a79605a

Browse files
Raphael WeinerJason Madsen
authored andcommitted
remove Canvas specific code from LinkedIn
fixes: CNVS-12505 test plan: regression test linked in functionality Change-Id: I7d4c327eefb8ac976c1d51e36aa6514c1742f739 Reviewed-on: https://gerrit.instructure.com/33458 Reviewed-by: Simon Williams <simon@instructure.com> Tested-by: Jenkins <jenkins@instructure.com> QA-Review: Trevor deHaan <tdehaan@instructure.com> Product-Review: Jason Madsen <jmadsen@instructure.com>
1 parent 3383887 commit a79605a

3 files changed

Lines changed: 47 additions & 44 deletions

File tree

app/controllers/users_controller.rb

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,21 @@ def oauth
148148
redirect_to twitter_request_token_url(return_to_url)
149149
elsif params[:service] == "linked_in"
150150
linkedin_connection = LinkedIn.new
151-
redirect_to linkedin_connection.linked_in_request_token_url(return_to_url, @current_user, session, request.host_with_port, oauth_success_url(:service => 'linked_in'))
151+
152+
request_token = linkedin_connection.request_token(oauth_success_url(:service => 'linked_in'))
153+
154+
session[:oauth_linked_in_request_token_token] = request_token.token
155+
session[:oauth_linked_in_request_token_secret] = request_token.secret
156+
OauthRequest.create(
157+
:service => 'linked_in',
158+
:token => request_token.token,
159+
:secret => request_token.secret,
160+
:return_url => return_to_url,
161+
:user => @current_user,
162+
:original_host_with_port => request.host_with_port
163+
)
164+
165+
redirect_to request_token.authorize_url
152166
elsif params[:service] == "facebook"
153167
oauth_request = OauthRequest.create(
154168
:service => 'facebook',
@@ -194,7 +208,26 @@ def oauth_success
194208
elsif params[:service] == "linked_in"
195209
begin
196210
linkedin_connection = LinkedIn.new
197-
linkedin_connection.linked_in_get_access_token(oauth_request, params[:oauth_verifier], session)
211+
token = session.delete(:oauth_linked_in_request_token_token)
212+
secret = session.delete(:oauth_linked_in_request_token_secret)
213+
access_token = linkedin_connection.get_access_token(token, secret, params[:oauth_verifier])
214+
service_user_id, service_user_name, service_user_url = linkedin_connection.get_service_user(access_token)
215+
216+
if oauth_request.user
217+
UserService.register(
218+
:service => "linked_in",
219+
:access_token => access_token,
220+
:user => oauth_request.user,
221+
:service_domain => "linked_in.com",
222+
:service_user_id => service_user_id,
223+
:service_user_name => service_user_name,
224+
:service_user_url => service_user_url
225+
)
226+
else
227+
session[:oauth_linked_in_access_token_token] = access_token.token
228+
session[:oauth_linked_in_access_token_secret] = access_token.secret
229+
end
230+
198231
flash[:notice] = t('linkedin_added', "LinkedIn account successfully added!")
199232
rescue => e
200233
ErrorReport.log_exception(:oauth, e)

lib/linked_in.rb

Lines changed: 10 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
#
1818

1919
class LinkedIn
20-
def linked_in_get_service_user(access_token)
20+
def get_service_user(access_token)
2121
body = access_token.get('/v1/people/~:(id,first-name,last-name,public-profile-url,picture-url)').body
2222
data = Nokogiri::XML(body)
2323
service_user_id = data.css("id")[0].content
@@ -26,48 +26,18 @@ def linked_in_get_service_user(access_token)
2626
return service_user_id, service_user_name, service_user_url
2727
end
2828

29-
def linked_in_get_access_token(oauth_request, oauth_verifier, session)
30-
consumer = linked_in_consumer
31-
request_token = OAuth::RequestToken.new(consumer,
32-
session.delete(:oauth_linked_in_request_token_token),
33-
session.delete(:oauth_linked_in_request_token_secret))
34-
access_token = request_token.get_access_token(:oauth_verifier => oauth_verifier)
35-
service_user_id, service_user_name, service_user_url = linked_in_get_service_user(access_token)
36-
session[:oauth_linked_in_access_token_token] = access_token.token
37-
session[:oauth_linked_in_access_token_secret] = access_token.secret
38-
if oauth_request.user
39-
UserService.register(
40-
:service => "linked_in",
41-
:access_token => access_token,
42-
:user => oauth_request.user,
43-
:service_domain => "linked_in.com",
44-
:service_user_id => service_user_id,
45-
:service_user_name => service_user_name,
46-
:service_user_url => service_user_url
47-
)
48-
session.delete(:oauth_linked_in_access_token_token)
49-
session.delete(:oauth_linked_in_access_token_secret)
50-
end
51-
access_token
29+
def get_access_token(token, secret, oauth_verifier)
30+
consumer = self.class.consumer
31+
request_token = OAuth::RequestToken.new(consumer, token, secret)
32+
request_token.get_access_token(:oauth_verifier => oauth_verifier)
5233
end
5334

54-
def linked_in_request_token_url(return_to, user, session, host_with_port, oauth_callback)
55-
consumer = linked_in_consumer
56-
request_token = consumer.get_request_token(:oauth_callback => oauth_callback)
57-
session[:oauth_linked_in_request_token_token] = request_token.token
58-
session[:oauth_linked_in_request_token_secret] = request_token.secret
59-
OauthRequest.create(
60-
:service => 'linked_in',
61-
:token => request_token.token,
62-
:secret => request_token.secret,
63-
:return_url => return_to,
64-
:user => user,
65-
:original_host_with_port => host_with_port
66-
)
67-
request_token.authorize_url
35+
def request_token(oauth_callback)
36+
consumer = self.class.consumer
37+
consumer.get_request_token(:oauth_callback => oauth_callback)
6838
end
6939

70-
def linked_in_consumer(key=nil, secret=nil)
40+
def self.consumer(key=nil, secret=nil)
7141
require 'oauth'
7242
require 'oauth/consumer'
7343
config = LinkedIn.config
@@ -83,7 +53,7 @@ def linked_in_consumer(key=nil, secret=nil)
8353
end
8454

8555
def self.config_check(settings)
86-
consumer = self.new.linked_in_consumer(settings[:api_key], settings[:secret_key])
56+
consumer = self.consumer(settings[:api_key], settings[:secret_key])
8757
token = consumer.get_request_token rescue nil
8858
token ? nil : "Configuration check failed, please check your settings"
8959
end

spec/integration/oauth_token_spec.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ def oauth_start(integration)
9191
if integration == "GoogleDocs"
9292
GoogleDocs.any_instance.expects(:get_service_user).with(instance_of(OAuth::AccessToken)).returns(["test_user_id", "test_user_name"])
9393
elsif integration == "LinkedIn"
94-
LinkedIn.any_instance.expects(:linked_in_get_service_user).with(instance_of(OAuth::AccessToken)).returns(["test_user_id", "test_user_name"])
94+
LinkedIn.any_instance.expects(:get_service_user).with(instance_of(OAuth::AccessToken)).returns(["test_user_id", "test_user_name"])
9595
else
9696
UsersController.any_instance.expects("#{integration.underscore}_get_service_user").with(instance_of(OAuth::AccessToken)).returns(["test_user_id", "test_user_name"])
9797
end
@@ -118,7 +118,7 @@ def oauth_start(integration)
118118
if integration == "GoogleDocs"
119119
GoogleDocs.any_instance.expects(:get_service_user).with(instance_of(OAuth::AccessToken)).raises(RuntimeError, "Third-party service totally like, failed")
120120
elsif integration == "LinkedIn"
121-
LinkedIn.any_instance.expects(:linked_in_get_service_user).with(instance_of(OAuth::AccessToken)).raises(RuntimeError, "Third-party service totally like, failed")
121+
LinkedIn.any_instance.expects(:get_service_user).with(instance_of(OAuth::AccessToken)).raises(RuntimeError, "Third-party service totally like, failed")
122122
else
123123
UsersController.any_instance.expects("#{integration.underscore}_get_service_user").with(instance_of(OAuth::AccessToken)).raises(RuntimeError, "Third-party service totally like, failed")
124124
end

0 commit comments

Comments
 (0)