diff --git a/plugins/stoa/lib/stoa_plugin.rb b/plugins/stoa/lib/stoa_plugin.rb index 0ea7ef9..01b60bb 100644 --- a/plugins/stoa/lib/stoa_plugin.rb +++ b/plugins/stoa/lib/stoa_plugin.rb @@ -42,6 +42,23 @@ class StoaPlugin < Noosfero::Plugin } if context.profile.person? && context.profile.usp_id.blank? end + def login_extra_contents + lambda { + content_tag('div', labelled_form_field(_('USP number / Username'), text_field_tag('usp_id_login', '', :id => 'stoa_field_login')) + + labelled_form_field(_('Password'), password_field_tag('password', '', :id => 'stoa_field_password')), :id => 'stoa-login-fields') + } + end + + def alternative_authentication + person = Person.find_by_usp_id(context.params[:usp_id_login]) + if person + user = User.authenticate(person.user.login, context.params[:password]) + else + user = User.authenticate(context.params[:usp_id_login], context.params[:password]) + end + user + end + def account_controller_filters block = lambda do params[:profile_data] ||= {} diff --git a/plugins/stoa/public/style.css b/plugins/stoa/public/style.css index 7a42189..9012e03 100644 --- a/plugins/stoa/public/style.css +++ b/plugins/stoa/public/style.css @@ -64,3 +64,16 @@ .controller-profile_editor div.checking { background: transparent url(/images/loading-small.gif) 153px center no-repeat; } + +.login-box #main_user_login, +.login-box .formlabel[for=main_user_login], +.login-box #user_login, +.login-box .formlabel[for=user_login], +.login-box #user_password, +.login-box .formlabel[for=user_password] { + display:none; +} + +#stoa-login-fields{ + margin-top: -10px; +} diff --git a/plugins/stoa/test/functional/account_controller_test.rb b/plugins/stoa/test/functional/account_controller_test.rb index f45007a..b448bdb 100644 --- a/plugins/stoa/test/functional/account_controller_test.rb +++ b/plugins/stoa/test/functional/account_controller_test.rb @@ -24,6 +24,8 @@ class AccountControllerTest < ActionController::TestCase ActiveRecord::Base.establish_connection(:test) StoaPlugin::UspUser.create!(:codpes => 12345678, :cpf => Digest::MD5.hexdigest(SALT+'12345678'), :birth_date => '1970-01-30') Environment.default.enable_plugin(StoaPlugin.name) + @user = create_user('joao-stoa', {:password => 'pass', :password_confirmation => 'pass'},:usp_id=>'87654321') + @user.activate end def teardown @@ -47,4 +49,21 @@ class AccountControllerTest < ActionController::TestCase assert assigns(:person).invitation_code == '12345678' end + should 'authenticate with usp id' do + post :login, :usp_id_login => '87654321', :password => 'pass' + assert session[:user] + assert_equal @user.login, assigns(:current_user).login + end + + should 'not authenticate with wrong password' do + post :login, :usp_id_login => '87654321', :password => 'pass123' + assert_nil session[:user] + end + + should 'authenticate with username' do + post :login, :usp_id_login => 'joao-stoa', :password => 'pass' + assert session[:user] + assert_equal @user.login, assigns(:current_user).login + end + end diff --git a/plugins/stoa/test/functional/profile_editor_controller_test.rb b/plugins/stoa/test/functional/profile_editor_controller_test.rb index caa3499..6f0dd61 100644 --- a/plugins/stoa/test/functional/profile_editor_controller_test.rb +++ b/plugins/stoa/test/functional/profile_editor_controller_test.rb @@ -23,20 +23,23 @@ class StoaPluginProfileEditorControllerTest < ActionController::TestCase should 'show usp_id field if person did not filled it' do get :edit, :profile => person.identifier - assert_match /USP number/, @response.body + assert_tag_in_string @response.body, :tag => 'label', :content => /USP number/, :attributes => { :for => 'usp_id_field' } + assert_tag_in_string @response.body, :tag => 'input', :attributes => { :id => 'usp_id_field' } end should 'not show usp_id field if person already filled it' do person.usp_id = 12345 person.save get :edit, :profile => person.identifier - assert_no_match /USP number/, @response.body + assert_no_tag_in_string @response.body, :tag => 'label', :content => /USP number/, :attributes => { :for => 'usp_id_field' } + assert_no_tag_in_string @response.body, :tag => 'input', :attributes => { :id => 'usp_id_field' } end should 'not display field if profile is an organization' do organization = fast_create(Organization) + organization.add_admin @person get :edit, :profile => organization.identifier - assert_no_match /USP number/, @response.body + assert_no_tag_in_string @response.body, :tag => 'label', :content => /USP number/, :attributes => { :for => 'usp_id_field' } end should 'display error if usp_id does not match with supplied confirmation' do -- libgit2 0.21.2