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:
		
							parent
							
								
									12f5f13fab
								
							
						
					
					
						commit
						8e88a18316
					
				
					 6 changed files with 73 additions and 6 deletions
				
			
		|  | @ -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') } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue