update gem, test pam authentication (#7028)
* update gem, test pam authentication * add description for test parameters * fix inclusion of optional grouplolsob-rspec
parent
47cb9587b7
commit
8a9da4c414
|
@ -1,3 +1,7 @@
|
||||||
# Federation
|
# Federation
|
||||||
LOCAL_DOMAIN=cb6e6126.ngrok.io
|
LOCAL_DOMAIN=cb6e6126.ngrok.io
|
||||||
LOCAL_HTTPS=true
|
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
|
- RAILS_ENV=test
|
||||||
- NOKOGIRI_USE_SYSTEM_LIBRARIES=true
|
- NOKOGIRI_USE_SYSTEM_LIBRARIES=true
|
||||||
- PARALLEL_TEST_PROCESSORS=2
|
- PARALLEL_TEST_PROCESSORS=2
|
||||||
|
- ALLOW_NOPAM=true
|
||||||
|
|
||||||
addons:
|
addons:
|
||||||
postgresql: 9.4
|
postgresql: 9.4
|
||||||
|
@ -47,7 +48,7 @@ services:
|
||||||
|
|
||||||
install:
|
install:
|
||||||
- nvm 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
|
- yarn install
|
||||||
|
|
||||||
before_script:
|
before_script:
|
||||||
|
|
2
Gemfile
2
Gemfile
|
@ -33,7 +33,7 @@ gem 'devise', '~> 4.4'
|
||||||
gem 'devise-two-factor', '~> 3.0'
|
gem 'devise-two-factor', '~> 3.0'
|
||||||
|
|
||||||
group :pam_authentication, optional: true do
|
group :pam_authentication, optional: true do
|
||||||
gem 'devise_pam_authenticatable2', '~> 9.0'
|
gem 'devise_pam_authenticatable2', '~> 9.1'
|
||||||
end
|
end
|
||||||
|
|
||||||
gem 'net-ldap', '~> 0.10'
|
gem 'net-ldap', '~> 0.10'
|
||||||
|
|
|
@ -146,9 +146,9 @@ GEM
|
||||||
devise (~> 4.0)
|
devise (~> 4.0)
|
||||||
railties (< 5.2)
|
railties (< 5.2)
|
||||||
rotp (~> 2.0)
|
rotp (~> 2.0)
|
||||||
devise_pam_authenticatable2 (9.0.0)
|
devise_pam_authenticatable2 (9.1.0)
|
||||||
devise (>= 4.0.0)
|
devise (>= 4.0.0)
|
||||||
rpam2 (~> 3.0)
|
rpam2 (~> 4.0)
|
||||||
diff-lcs (1.3)
|
diff-lcs (1.3)
|
||||||
docile (1.1.5)
|
docile (1.1.5)
|
||||||
domain_name (0.5.20170404)
|
domain_name (0.5.20170404)
|
||||||
|
@ -464,7 +464,7 @@ GEM
|
||||||
actionpack (>= 4.2.0, < 5.3)
|
actionpack (>= 4.2.0, < 5.3)
|
||||||
railties (>= 4.2.0, < 5.3)
|
railties (>= 4.2.0, < 5.3)
|
||||||
rotp (2.1.2)
|
rotp (2.1.2)
|
||||||
rpam2 (3.1.0)
|
rpam2 (4.0.2)
|
||||||
rqrcode (0.10.1)
|
rqrcode (0.10.1)
|
||||||
chunky_png (~> 1.0)
|
chunky_png (~> 1.0)
|
||||||
rspec-core (3.7.0)
|
rspec-core (3.7.0)
|
||||||
|
@ -639,7 +639,7 @@ DEPENDENCIES
|
||||||
climate_control (~> 0.2)
|
climate_control (~> 0.2)
|
||||||
devise (~> 4.4)
|
devise (~> 4.4)
|
||||||
devise-two-factor (~> 3.0)
|
devise-two-factor (~> 3.0)
|
||||||
devise_pam_authenticatable2 (~> 9.0)
|
devise_pam_authenticatable2 (~> 9.1)
|
||||||
doorkeeper (~> 4.2)
|
doorkeeper (~> 4.2)
|
||||||
dotenv-rails (~> 2.2)
|
dotenv-rails (~> 2.2)
|
||||||
fabrication (~> 2.18)
|
fabrication (~> 2.18)
|
||||||
|
|
|
@ -59,3 +59,14 @@ Rails.application.configure do
|
||||||
end
|
end
|
||||||
|
|
||||||
Paperclip::Attachment.default_options[:path] = "#{Rails.root}/spec/test_files/:class/:id_partition/:style.:extension"
|
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]
|
request.env['devise.mapping'] = Devise.mappings[:user]
|
||||||
end
|
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
|
context 'using password authentication' do
|
||||||
let(:user) { Fabricate(:user, email: 'foo@bar.com', password: 'abcdefgh') }
|
let(:user) { Fabricate(:user, email: 'foo@bar.com', password: 'abcdefgh') }
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue