forked from cybrespace/mastodon
		
	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