Commit 4b70336641314777802ffc20700ec0fefed57366

Authored by Arthur Esposte
1 parent e571c718

remote_user_plugin: add support to remote_user_data

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