Commit 4b70336641314777802ffc20700ec0fefed57366
1 parent
e571c718
Exists in
master
and in
27 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 | ... | ... |