Skip to content

Commit

Permalink
update gem, test pam authentication (mastodon#7028)
Browse files Browse the repository at this point in the history
* update gem, test pam authentication

* add description for test parameters

* fix inclusion of optional group
  • Loading branch information
devkral authored and Gargron committed Apr 11, 2018
1 parent 12f5f13 commit 8e88a18
Show file tree
Hide file tree
Showing 6 changed files with 73 additions and 6 deletions.
4 changes: 4 additions & 0 deletions .env.test
Original file line number Diff line number Diff line change
@@ -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
3 changes: 2 additions & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ env:
- RAILS_ENV=test
- NOKOGIRI_USE_SYSTEM_LIBRARIES=true
- PARALLEL_TEST_PROCESSORS=2
- ALLOW_NOPAM=true

addons:
postgresql: 9.4
Expand All @@ -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:
Expand Down
2 changes: 1 addition & 1 deletion Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand Down
8 changes: 4 additions & 4 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down
11 changes: 11 additions & 0 deletions config/environments/test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -59,3 +59,14 @@
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
51 changes: 51 additions & 0 deletions spec/controllers/auth/sessions_controller_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,57 @@
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') }

Expand Down

0 comments on commit 8e88a18

Please sign in to comment.