update gem, test pam authentication (#7028)
* update gem, test pam authentication * add description for test parameters * fix inclusion of optional group
This commit is contained in:
		| @@ -1,3 +1,7 @@ | ||||
| # Federation | ||||
| LOCAL_DOMAIN=cb6e6126.ngrok.io | ||||
| LOCAL_HTTPS=true | ||||
| # test pam authentication | ||||
| PAM_ENABLED=true | ||||
| PAM_DEFAULT_SERVICE=pam_test | ||||
| PAM_CONTROLLED_SERVICE=pam_test_controlled | ||||
|   | ||||
| @@ -23,6 +23,7 @@ env: | ||||
|     - RAILS_ENV=test | ||||
|     - NOKOGIRI_USE_SYSTEM_LIBRARIES=true | ||||
|     - PARALLEL_TEST_PROCESSORS=2 | ||||
|     - ALLOW_NOPAM=true | ||||
|  | ||||
| addons: | ||||
|   postgresql: 9.4 | ||||
| @@ -47,7 +48,7 @@ services: | ||||
|  | ||||
| install: | ||||
|   - nvm install | ||||
|   - bundle install --path=vendor/bundle --without development production --retry=3 --jobs=16 | ||||
|   - bundle install --path=vendor/bundle --with pam_authentication --without development production --retry=3 --jobs=16 | ||||
|   - yarn install | ||||
|  | ||||
| before_script: | ||||
|   | ||||
							
								
								
									
										2
									
								
								Gemfile
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								Gemfile
									
									
									
									
									
								
							| @@ -33,7 +33,7 @@ gem 'devise', '~> 4.4' | ||||
| gem 'devise-two-factor', '~> 3.0' | ||||
|  | ||||
| group :pam_authentication, optional: true do | ||||
|   gem 'devise_pam_authenticatable2', '~> 9.0' | ||||
|   gem 'devise_pam_authenticatable2', '~> 9.1' | ||||
| end | ||||
|  | ||||
| gem 'net-ldap', '~> 0.10' | ||||
|   | ||||
| @@ -146,9 +146,9 @@ GEM | ||||
|       devise (~> 4.0) | ||||
|       railties (< 5.2) | ||||
|       rotp (~> 2.0) | ||||
|     devise_pam_authenticatable2 (9.0.0) | ||||
|     devise_pam_authenticatable2 (9.1.0) | ||||
|       devise (>= 4.0.0) | ||||
|       rpam2 (~> 3.0) | ||||
|       rpam2 (~> 4.0) | ||||
|     diff-lcs (1.3) | ||||
|     docile (1.1.5) | ||||
|     domain_name (0.5.20170404) | ||||
| @@ -464,7 +464,7 @@ GEM | ||||
|       actionpack (>= 4.2.0, < 5.3) | ||||
|       railties (>= 4.2.0, < 5.3) | ||||
|     rotp (2.1.2) | ||||
|     rpam2 (3.1.0) | ||||
|     rpam2 (4.0.2) | ||||
|     rqrcode (0.10.1) | ||||
|       chunky_png (~> 1.0) | ||||
|     rspec-core (3.7.0) | ||||
| @@ -639,7 +639,7 @@ DEPENDENCIES | ||||
|   climate_control (~> 0.2) | ||||
|   devise (~> 4.4) | ||||
|   devise-two-factor (~> 3.0) | ||||
|   devise_pam_authenticatable2 (~> 9.0) | ||||
|   devise_pam_authenticatable2 (~> 9.1) | ||||
|   doorkeeper (~> 4.2) | ||||
|   dotenv-rails (~> 2.2) | ||||
|   fabrication (~> 2.18) | ||||
|   | ||||
| @@ -59,3 +59,14 @@ Rails.application.configure do | ||||
| end | ||||
|  | ||||
| Paperclip::Attachment.default_options[:path] = "#{Rails.root}/spec/test_files/:class/:id_partition/:style.:extension" | ||||
|  | ||||
| # set fake_data for pam, don't do real calls, just use fake data | ||||
| if ENV['PAM_ENABLED'] == 'true' | ||||
|   Rpam2.fake_data = | ||||
|     { | ||||
|       usernames: Set['pam_user1', 'pam_user2'], | ||||
|       servicenames: Set['pam_test', 'pam_test_controlled'], | ||||
|       password: '123456', | ||||
|       env: { email: 'pam@example.com' } | ||||
|     } | ||||
| end | ||||
|   | ||||
| @@ -48,6 +48,57 @@ RSpec.describe Auth::SessionsController, type: :controller do | ||||
|       request.env['devise.mapping'] = Devise.mappings[:user] | ||||
|     end | ||||
|  | ||||
|     context 'using PAM authentication' do | ||||
|       context 'using a valid password' do | ||||
|         before do | ||||
|           post :create, params: { user: { email: "pam_user1", password: '123456' } } | ||||
|         end | ||||
|  | ||||
|         it 'redirects to home' do | ||||
|           expect(response).to redirect_to(root_path) | ||||
|         end | ||||
|  | ||||
|         it 'logs the user in' do | ||||
|           expect(controller.current_user).to be_instance_of(User) | ||||
|         end | ||||
|       end | ||||
|  | ||||
|       context 'using an invalid password' do | ||||
|         before do | ||||
|           post :create, params: { user: { email: "pam_user1", password: 'WRONGPW' } } | ||||
|         end | ||||
|  | ||||
|         it 'shows a login error' do | ||||
|           expect(flash[:alert]).to match I18n.t('devise.failure.invalid', authentication_keys: 'Email') | ||||
|         end | ||||
|  | ||||
|         it "doesn't log the user in" do | ||||
|           expect(controller.current_user).to be_nil | ||||
|         end | ||||
|       end | ||||
|  | ||||
|       context 'using a valid email and existing user' do | ||||
|         let(:user) do | ||||
|           account = Fabricate.build(:account, username: 'pam_user1') | ||||
|           account.save!(validate: false) | ||||
|           user = Fabricate(:user, email: 'pam@example.com', password: nil, account: account) | ||||
|           user | ||||
|         end | ||||
|  | ||||
|         before do | ||||
|           post :create, params: { user: { email: user.email, password: '123456' } } | ||||
|         end | ||||
|  | ||||
|         it 'redirects to home' do | ||||
|           expect(response).to redirect_to(root_path) | ||||
|         end | ||||
|  | ||||
|         it 'logs the user in' do | ||||
|           expect(controller.current_user).to eq user | ||||
|         end | ||||
|       end | ||||
|     end | ||||
|  | ||||
|     context 'using password authentication' do | ||||
|       let(:user) { Fabricate(:user, email: 'foo@bar.com', password: 'abcdefgh') } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user