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,6 +13,7 @@ class RemoteUserPlugin < Noosfero::Plugin | ||
13 | 13 | ||
14 | begin | 14 | begin |
15 | remote_user = request.headers["HTTP_REMOTE_USER"] | 15 | remote_user = request.headers["HTTP_REMOTE_USER"] |
16 | + user_data = request.env['HTTP_REMOTE_USER_DATA'] | ||
16 | 17 | ||
17 | if remote_user.blank? | 18 | if remote_user.blank? |
18 | if logged_in? | 19 | if logged_in? |
@@ -20,10 +21,19 @@ class RemoteUserPlugin < Noosfero::Plugin | @@ -20,10 +21,19 @@ class RemoteUserPlugin < Noosfero::Plugin | ||
20 | reset_session | 21 | reset_session |
21 | end | 22 | end |
22 | else | 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 | if !logged_in? | 33 | if !logged_in? |
24 | self.current_user = User.find_by_login(remote_user) | 34 | self.current_user = User.find_by_login(remote_user) |
25 | unless self.current_user | 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 | self.current_user.activate | 37 | self.current_user.activate |
28 | end | 38 | end |
29 | self.current_user.save! | 39 | self.current_user.save! |
@@ -34,7 +44,7 @@ class RemoteUserPlugin < Noosfero::Plugin | @@ -34,7 +44,7 @@ class RemoteUserPlugin < Noosfero::Plugin | ||
34 | 44 | ||
35 | self.current_user = User.find_by_login(remote_user) | 45 | self.current_user = User.find_by_login(remote_user) |
36 | unless self.current_user | 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 | self.current_user.activate | 48 | self.current_user.activate |
39 | end | 49 | end |
40 | self.current_user.save! | 50 | self.current_user.save! |
plugins/remote_user/test/functional/remote_user_plugin_test.rb
@@ -42,26 +42,64 @@ class AccountControllerTest < ActionController::TestCase | @@ -42,26 +42,64 @@ class AccountControllerTest < ActionController::TestCase | ||
42 | assert_equal user2.id, session[:user] | 42 | assert_equal user2.id, session[:user] |
43 | end | 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 | User.destroy_all | 46 | User.destroy_all |
47 | 47 | ||
48 | assert_equal 0, User.count | 48 | assert_equal 0, User.count |
49 | 49 | ||
50 | @request.env["HTTP_REMOTE_USER"] = "testuser" | 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 | get :index | 53 | get :index |
52 | 54 | ||
53 | assert_equal 1, User.count | 55 | assert_equal 1, User.count |
54 | assert_equal "testuser", User.last.login | 56 | assert_equal "testuser", User.last.login |
55 | assert_equal true, User.last.activated? | 57 | assert_equal true, User.last.activated? |
56 | assert_equal User.last.id, session[:user] | 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 | end | 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 | user = create_user('testuser', :email => 'testuser@example.com', :password => 'test', :password_confirmation => 'test') | 64 | user = create_user('testuser', :email => 'testuser@example.com', :password => 'test', :password_confirmation => 'test') |
61 | user.activate | 65 | user.activate |
62 | 66 | ||
63 | login_as user.login | 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 | @request.env["HTTP_REMOTE_USER"] = 'another_user' | 104 | @request.env["HTTP_REMOTE_USER"] = 'another_user' |
67 | get :index | 105 | get :index |
@@ -70,6 +108,8 @@ class AccountControllerTest < ActionController::TestCase | @@ -70,6 +108,8 @@ class AccountControllerTest < ActionController::TestCase | ||
70 | assert_equal "another_user", User.last.login | 108 | assert_equal "another_user", User.last.login |
71 | assert_equal true, User.last.activated? | 109 | assert_equal true, User.last.activated? |
72 | assert_equal User.last.id, session[:user] | 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 | end | 113 | end |
74 | 114 | ||
75 | should 'logout if there is a current logged user but not a remote user' do | 115 | should 'logout if there is a current logged user but not a remote user' do |