Commit 4b70336641314777802ffc20700ec0fefed57366
1 parent
e571c718
Exists in
master
and in
29 other branches
remote_user_plugin: add support to remote_user_data
Showing
2 changed files
with
54 additions
and
4 deletions
Show diff stats
plugins/remote_user/lib/remote_user_plugin.rb
... | ... | @@ -13,6 +13,7 @@ class RemoteUserPlugin < Noosfero::Plugin |
13 | 13 | |
14 | 14 | begin |
15 | 15 | remote_user = request.headers["HTTP_REMOTE_USER"] |
16 | + user_data = request.env['HTTP_REMOTE_USER_DATA'] | |
16 | 17 | |
17 | 18 | if remote_user.blank? |
18 | 19 | if logged_in? |
... | ... | @@ -20,10 +21,19 @@ class RemoteUserPlugin < Noosfero::Plugin |
20 | 21 | reset_session |
21 | 22 | end |
22 | 23 | else |
24 | + if user_data.blank? | |
25 | + remote_user_email = remote_user + '@remote.user' | |
26 | + remote_user_name = remote_user | |
27 | + else | |
28 | + user_data = JSON.parse(user_data) | |
29 | + remote_user_email = user_data['email'] | |
30 | + remote_user_name = user_data['name'] | |
31 | + end | |
32 | + | |
23 | 33 | if !logged_in? |
24 | 34 | self.current_user = User.find_by_login(remote_user) |
25 | 35 | unless self.current_user |
26 | - self.current_user = User.create!(:login => remote_user, :email => (remote_user + '@remote.user'), :password => ('pw4'+remote_user), :password_confirmation => ('pw4'+remote_user)) | |
36 | + self.current_user = User.create!(:login => remote_user, :email => remote_user_email, :name => remote_user_name, :password => ('pw4'+remote_user), :password_confirmation => ('pw4'+remote_user)) | |
27 | 37 | self.current_user.activate |
28 | 38 | end |
29 | 39 | self.current_user.save! |
... | ... | @@ -34,7 +44,7 @@ class RemoteUserPlugin < Noosfero::Plugin |
34 | 44 | |
35 | 45 | self.current_user = User.find_by_login(remote_user) |
36 | 46 | unless self.current_user |
37 | - self.current_user = User.create!(:login => remote_user, :email => (remote_user + '@remote.user'), :password => ('pw4'+remote_user), :password_confirmation => ('pw4'+remote_user)) | |
47 | + self.current_user = User.create!(:login => remote_user, :email => remote_user_email, :name => remote_user_name, :password => ('pw4'+remote_user), :password_confirmation => ('pw4'+remote_user)) | |
38 | 48 | self.current_user.activate |
39 | 49 | end |
40 | 50 | self.current_user.save! | ... | ... |
plugins/remote_user/test/functional/remote_user_plugin_test.rb
... | ... | @@ -42,26 +42,64 @@ class AccountControllerTest < ActionController::TestCase |
42 | 42 | assert_equal user2.id, session[:user] |
43 | 43 | end |
44 | 44 | |
45 | - should 'create a new user if the remote user does not exist' do | |
45 | + should 'create a new user with remote_user_data if the remote user does not exist' do | |
46 | 46 | User.destroy_all |
47 | 47 | |
48 | 48 | assert_equal 0, User.count |
49 | 49 | |
50 | 50 | @request.env["HTTP_REMOTE_USER"] = "testuser" |
51 | + @request.env["CONTENT_TYPE"] = "application/json" | |
52 | + @request.env["HTTP_REMOTE_USER_DATA"] = '{"email":"testuser@domain.com", "name":"Test User"}' | |
51 | 53 | get :index |
52 | 54 | |
53 | 55 | assert_equal 1, User.count |
54 | 56 | assert_equal "testuser", User.last.login |
55 | 57 | assert_equal true, User.last.activated? |
56 | 58 | assert_equal User.last.id, session[:user] |
59 | + assert_equal "Test User", User.last.name | |
60 | + assert_equal "testuser@domain.com", User.last.email | |
57 | 61 | end |
58 | 62 | |
59 | - should 'create a new user even if there is a logged user but the remote user is different' do | |
63 | + should 'create a new user with remote_user_data even if there is a logged user but the remote user is different' do | |
60 | 64 | user = create_user('testuser', :email => 'testuser@example.com', :password => 'test', :password_confirmation => 'test') |
61 | 65 | user.activate |
62 | 66 | |
63 | 67 | login_as user.login |
64 | 68 | |
69 | + @request.env["HTTP_REMOTE_USER"] = 'another_user' | |
70 | + @request.env["CONTENT_TYPE"] = "application/json" | |
71 | + @request.env["HTTP_REMOTE_USER_DATA"] = '{"email":"another_user@domain.com", "name":"Another User"}' | |
72 | + get :index | |
73 | + | |
74 | + assert_equal 2, User.count | |
75 | + assert_equal "another_user", User.last.login | |
76 | + assert_equal true, User.last.activated? | |
77 | + assert_equal User.last.id, session[:user] | |
78 | + assert_equal "Another User", User.last.name | |
79 | + assert_equal "another_user@domain.com", User.last.email | |
80 | + end | |
81 | + | |
82 | + should 'create a new user without remote_user_data if the remote user does not exist' do | |
83 | + User.destroy_all | |
84 | + | |
85 | + assert_equal 0, User.count | |
86 | + | |
87 | + @request.env["HTTP_REMOTE_USER"] = "testuser" | |
88 | + get :index | |
89 | + | |
90 | + assert_equal 1, User.count | |
91 | + assert_equal "testuser", User.last.login | |
92 | + assert_equal true, User.last.activated? | |
93 | + assert_equal User.last.id, session[:user] | |
94 | + assert_equal "testuser", User.last.name | |
95 | + assert_equal "testuser@remote.user", User.last.email | |
96 | + end | |
97 | + | |
98 | + should 'create a new user without remote_user_data even if there is a logged user but the remote user is different' do | |
99 | + user = create_user('testuser', :email => 'testuser@example.com', :password => 'test', :password_confirmation => 'test') | |
100 | + user.activate | |
101 | + | |
102 | + login_as user.login | |
65 | 103 | |
66 | 104 | @request.env["HTTP_REMOTE_USER"] = 'another_user' |
67 | 105 | get :index |
... | ... | @@ -70,6 +108,8 @@ class AccountControllerTest < ActionController::TestCase |
70 | 108 | assert_equal "another_user", User.last.login |
71 | 109 | assert_equal true, User.last.activated? |
72 | 110 | assert_equal User.last.id, session[:user] |
111 | + assert_equal "another_user", User.last.name | |
112 | + assert_equal "another_user@remote.user", User.last.email | |
73 | 113 | end |
74 | 114 | |
75 | 115 | should 'logout if there is a current logged user but not a remote user' do | ... | ... |