2017-04-27 13:18:21 +00:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2016-03-27 22:06:52 +00:00
|
|
|
require 'rails_helper'
|
|
|
|
|
|
|
|
RSpec.describe Auth::SessionsController, type: :controller do
|
2016-11-17 11:29:11 +00:00
|
|
|
render_views
|
|
|
|
|
2019-09-15 19:08:39 +00:00
|
|
|
before do
|
|
|
|
request.env['devise.mapping'] = Devise.mappings[:user]
|
|
|
|
end
|
2016-03-27 22:06:52 +00:00
|
|
|
|
2019-09-15 19:08:39 +00:00
|
|
|
describe 'GET #new' do
|
2016-03-27 22:06:52 +00:00
|
|
|
it 'returns http success' do
|
|
|
|
get :new
|
2018-04-21 19:35:07 +00:00
|
|
|
expect(response).to have_http_status(200)
|
2016-03-27 22:06:52 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2017-05-02 21:37:58 +00:00
|
|
|
describe 'DELETE #destroy' do
|
|
|
|
let(:user) { Fabricate(:user) }
|
|
|
|
|
|
|
|
context 'with a regular user' do
|
|
|
|
it 'redirects to home after sign out' do
|
|
|
|
sign_in(user, scope: :user)
|
|
|
|
delete :destroy
|
|
|
|
|
2017-08-05 02:24:58 +00:00
|
|
|
expect(response).to redirect_to(new_user_session_path)
|
2017-05-02 21:37:58 +00:00
|
|
|
end
|
2018-09-09 02:10:44 +00:00
|
|
|
|
|
|
|
it 'does not delete redirect location with continue=true' do
|
|
|
|
sign_in(user, scope: :user)
|
|
|
|
controller.store_location_for(:user, '/authorize')
|
|
|
|
delete :destroy, params: { continue: 'true' }
|
|
|
|
expect(controller.stored_location_for(:user)).to eq '/authorize'
|
|
|
|
end
|
2017-05-02 21:37:58 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
context 'with a suspended user' do
|
|
|
|
it 'redirects to home after sign out' do
|
|
|
|
Fabricate(:account, user: user, suspended: true)
|
|
|
|
sign_in(user, scope: :user)
|
|
|
|
delete :destroy
|
|
|
|
|
2017-08-05 02:24:58 +00:00
|
|
|
expect(response).to redirect_to(new_user_session_path)
|
2017-05-02 21:37:58 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2016-03-27 22:06:52 +00:00
|
|
|
describe 'POST #create' do
|
2018-10-20 15:28:04 +00:00
|
|
|
context 'using PAM authentication', if: ENV['PAM_ENABLED'] == 'true' 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')
|
2018-04-11 19:40:38 +00:00
|
|
|
end
|
|
|
|
|
2018-10-20 15:28:04 +00:00
|
|
|
it "doesn't log the user in" do
|
|
|
|
expect(controller.current_user).to be_nil
|
|
|
|
end
|
|
|
|
end
|
2018-04-11 19:40:38 +00:00
|
|
|
|
2018-10-20 15:28:04 +00:00
|
|
|
context 'using a valid email and existing user' do
|
|
|
|
let(:user) do
|
|
|
|
account = Fabricate.build(:account, username: 'pam_user1')
|
|
|
|
account.save!(validate: false)
|
2019-09-18 14:37:27 +00:00
|
|
|
user = Fabricate(:user, email: 'pam@example.com', password: nil, account: account, external: true)
|
2018-10-20 15:28:04 +00:00
|
|
|
user
|
|
|
|
end
|
2018-04-11 19:40:38 +00:00
|
|
|
|
2018-10-20 15:28:04 +00:00
|
|
|
before do
|
|
|
|
post :create, params: { user: { email: user.email, password: '123456' } }
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'redirects to home' do
|
|
|
|
expect(response).to redirect_to(root_path)
|
2018-04-11 19:40:38 +00:00
|
|
|
end
|
|
|
|
|
2018-10-20 15:28:04 +00:00
|
|
|
it 'logs the user in' do
|
|
|
|
expect(controller.current_user).to eq user
|
2018-04-11 19:40:38 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2017-04-15 11:26:03 +00:00
|
|
|
context 'using password authentication' do
|
|
|
|
let(:user) { Fabricate(:user, email: 'foo@bar.com', password: 'abcdefgh') }
|
|
|
|
|
|
|
|
context 'using a valid password' do
|
|
|
|
before do
|
|
|
|
post :create, params: { user: { email: user.email, password: user.password } }
|
|
|
|
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
|
|
|
|
|
2017-06-11 00:29:08 +00:00
|
|
|
context 'using email with uppercase letters' do
|
|
|
|
before do
|
|
|
|
post :create, params: { user: { email: user.email.upcase, password: user.password } }
|
|
|
|
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
|
|
|
|
|
2017-04-15 11:26:03 +00:00
|
|
|
context 'using an invalid password' do
|
|
|
|
before do
|
|
|
|
post :create, params: { user: { email: user.email, 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
|
2017-04-25 13:06:41 +00:00
|
|
|
|
|
|
|
context 'using an unconfirmed password' do
|
|
|
|
before do
|
|
|
|
request.headers['Accept-Language'] = accept_language
|
|
|
|
post :create, params: { user: { email: unconfirmed_user.email, password: unconfirmed_user.password } }
|
|
|
|
end
|
|
|
|
|
|
|
|
let(:unconfirmed_user) { user.tap { |u| u.update!(confirmed_at: nil) } }
|
|
|
|
let(:accept_language) { 'fr' }
|
|
|
|
|
Change unconfirmed user login behaviour (#11375)
Allow access to account settings, 2FA, authorized applications, and
account deletions to unconfirmed and pending users, as well as
users who had their accounts disabled. Suspended users cannot update
their e-mail or password or delete their account.
Display account status on account settings page, for example, when
an account is frozen, limited, unconfirmed or pending review.
After sign up, login users straight away and show a simple page that
tells them the status of their account with links to account settings
and logout, to reduce onboarding friction and allow users to correct
wrongly typed e-mail addresses.
Move the final sign-up step of SSO integrations to be the same
as above to reduce code duplication.
2019-07-22 08:48:50 +00:00
|
|
|
it 'redirects to home' do
|
|
|
|
expect(response).to redirect_to(root_path)
|
2017-04-25 13:06:41 +00:00
|
|
|
end
|
|
|
|
end
|
2017-05-26 12:14:03 +00:00
|
|
|
|
|
|
|
context "logging in from the user's page" do
|
|
|
|
before do
|
|
|
|
allow(controller).to receive(:single_user_mode?).and_return(single_user_mode)
|
|
|
|
allow(controller).to receive(:stored_location_for).with(:user).and_return("/@#{user.account.username}")
|
|
|
|
post :create, params: { user: { email: user.email, password: user.password } }
|
|
|
|
end
|
|
|
|
|
|
|
|
context "in single user mode" do
|
|
|
|
let(:single_user_mode) { true }
|
|
|
|
|
|
|
|
it 'redirects to home' do
|
|
|
|
expect(response).to redirect_to(root_path)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context "in non-single user mode" do
|
|
|
|
let(:single_user_mode) { false }
|
|
|
|
|
|
|
|
it "redirects back to the user's page" do
|
|
|
|
expect(response).to redirect_to(short_account_path(username: user.account))
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2016-03-27 22:06:52 +00:00
|
|
|
end
|
|
|
|
|
2017-04-15 11:26:03 +00:00
|
|
|
context 'using two-factor authentication' do
|
2019-09-15 19:08:39 +00:00
|
|
|
let!(:user) do
|
|
|
|
Fabricate(:user, email: 'x@y.com', password: 'abcdefgh', otp_required_for_login: true, otp_secret: User.generate_otp_secret(32))
|
2017-04-15 11:26:03 +00:00
|
|
|
end
|
2019-09-15 19:08:39 +00:00
|
|
|
|
|
|
|
let!(:recovery_codes) do
|
2017-04-15 11:26:03 +00:00
|
|
|
codes = user.generate_otp_backup_codes!
|
|
|
|
user.save
|
|
|
|
return codes
|
|
|
|
end
|
|
|
|
|
2017-06-11 00:29:08 +00:00
|
|
|
context 'using email and password' do
|
|
|
|
before do
|
|
|
|
post :create, params: { user: { email: user.email, password: user.password } }
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'renders two factor authentication page' do
|
|
|
|
expect(controller).to render_template("two_factor")
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'using upcase email and password' do
|
|
|
|
before do
|
|
|
|
post :create, params: { user: { email: user.email.upcase, password: user.password } }
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'renders two factor authentication page' do
|
|
|
|
expect(controller).to render_template("two_factor")
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2017-04-15 11:26:03 +00:00
|
|
|
context 'using a valid OTP' do
|
|
|
|
before do
|
Backport fixes to 3.2 (#15360)
* Fix 2FA/sign-in token sessions being valid after password change (#14802)
If someone tries logging in to an account and is prompted for a 2FA
code or sign-in token, even if the account's password or e-mail is
updated in the meantime, the session will show the prompt and allow
the login process to complete with a valid 2FA code or sign-in token
* Fix Move handler not being triggered when failing to fetch target (#15107)
When failing to fetch the target account, the ProcessingWorker fails
as expected, but since it hasn't cleared the `move_in_progress` flag,
the next attempt at processing skips the `Move` activity altogether.
This commit changes it to clear the flag when encountering any
unexpected error on fetching the target account. This is likely to
occur because, of, e.g., a timeout, when many instances query the
same actor at the same time.
* Fix slow distinct queries where grouped queries are faster (#15287)
About 2x speed-up on inboxes query
* Fix possible inconsistencies in tag search (#14906)
Do not downcase the queried tag before passing it to postgres when searching:
- tags are not downcased on creation
- `arel_table[:name].lower.matches(pattern)` generates an ILIKE anyway
- if Postgres and Rails happen to use different case-folding rules,
downcasing before query but not before insertion may mean that some
tags with some casings are not searchable
* Fix updating account counters when account_stat is not yet created (#15108)
* Fix account processing failing because of large collections (#15027)
Fixes #15025
* Fix downloading remote media files when server returns empty filename (#14867)
Fixes #14817
* Fix webfinger redirect handling in ResolveAccountService (#15187)
* Fix webfinger redirect handling in ResolveAccountService
ResolveAccountService#process_webfinger! handled a one-step webfinger
redirection, but only accepting the result if it matched the exact URI passed
as input, defeating the point of a redirection check.
Instead, use the same logic as in `ActivityPub::FetchRemoteAccountService`,
updating the resulting `acct:` URI with the result of the first webfinger
query.
* Add tests
* Remove dependency on unused and unmaintained http_parser.rb gem (#14574)
It seems that years ago, the “http” gem dependend on the “http_parser.rb” gem
(it now depends on the “http-parser” gem), and, still years ago, we pulled
it from git in order to benefit from a bugfix that wasn't released yet (#7467).
* Add tootctl maintenance fix-duplicates (#14860, #15201, #15264, #15349, #15359)
* Fix old migration script not being able to run if it fails midway (#15361)
* Fix old migration script not being able to run if it fails midway
Improve the robustness of a migration script likely to fail because of database
corruption so it can run again once database corruptions are fixed.
* Display a specific error message in case of index corruption
Co-authored-by: Eugen Rochko <eugen@zeonfederated.com>
Co-authored-by: Claire <claire.github-309c@sitedethib.com>
Co-authored-by: Eugen Rochko <eugen@zeonfederated.com>
Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2020-12-18 22:31:14 +00:00
|
|
|
post :create, params: { user: { otp_attempt: user.current_otp } }, session: { attempt_user_id: user.id, attempt_user_updated_at: user.updated_at.to_s }
|
2017-04-15 11:26:03 +00:00
|
|
|
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
|
|
|
|
|
2017-04-27 13:18:21 +00:00
|
|
|
context 'when the server has an decryption error' do
|
|
|
|
before do
|
|
|
|
allow_any_instance_of(User).to receive(:validate_and_consume_otp!).and_raise(OpenSSL::Cipher::CipherError)
|
Backport fixes to 3.2 (#15360)
* Fix 2FA/sign-in token sessions being valid after password change (#14802)
If someone tries logging in to an account and is prompted for a 2FA
code or sign-in token, even if the account's password or e-mail is
updated in the meantime, the session will show the prompt and allow
the login process to complete with a valid 2FA code or sign-in token
* Fix Move handler not being triggered when failing to fetch target (#15107)
When failing to fetch the target account, the ProcessingWorker fails
as expected, but since it hasn't cleared the `move_in_progress` flag,
the next attempt at processing skips the `Move` activity altogether.
This commit changes it to clear the flag when encountering any
unexpected error on fetching the target account. This is likely to
occur because, of, e.g., a timeout, when many instances query the
same actor at the same time.
* Fix slow distinct queries where grouped queries are faster (#15287)
About 2x speed-up on inboxes query
* Fix possible inconsistencies in tag search (#14906)
Do not downcase the queried tag before passing it to postgres when searching:
- tags are not downcased on creation
- `arel_table[:name].lower.matches(pattern)` generates an ILIKE anyway
- if Postgres and Rails happen to use different case-folding rules,
downcasing before query but not before insertion may mean that some
tags with some casings are not searchable
* Fix updating account counters when account_stat is not yet created (#15108)
* Fix account processing failing because of large collections (#15027)
Fixes #15025
* Fix downloading remote media files when server returns empty filename (#14867)
Fixes #14817
* Fix webfinger redirect handling in ResolveAccountService (#15187)
* Fix webfinger redirect handling in ResolveAccountService
ResolveAccountService#process_webfinger! handled a one-step webfinger
redirection, but only accepting the result if it matched the exact URI passed
as input, defeating the point of a redirection check.
Instead, use the same logic as in `ActivityPub::FetchRemoteAccountService`,
updating the resulting `acct:` URI with the result of the first webfinger
query.
* Add tests
* Remove dependency on unused and unmaintained http_parser.rb gem (#14574)
It seems that years ago, the “http” gem dependend on the “http_parser.rb” gem
(it now depends on the “http-parser” gem), and, still years ago, we pulled
it from git in order to benefit from a bugfix that wasn't released yet (#7467).
* Add tootctl maintenance fix-duplicates (#14860, #15201, #15264, #15349, #15359)
* Fix old migration script not being able to run if it fails midway (#15361)
* Fix old migration script not being able to run if it fails midway
Improve the robustness of a migration script likely to fail because of database
corruption so it can run again once database corruptions are fixed.
* Display a specific error message in case of index corruption
Co-authored-by: Eugen Rochko <eugen@zeonfederated.com>
Co-authored-by: Claire <claire.github-309c@sitedethib.com>
Co-authored-by: Eugen Rochko <eugen@zeonfederated.com>
Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2020-12-18 22:31:14 +00:00
|
|
|
post :create, params: { user: { otp_attempt: user.current_otp } }, session: { attempt_user_id: user.id, attempt_user_updated_at: user.updated_at.to_s }
|
2017-04-27 13:18:21 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
it 'shows a login error' do
|
|
|
|
expect(flash[:alert]).to match I18n.t('users.invalid_otp_token')
|
|
|
|
end
|
|
|
|
|
|
|
|
it "doesn't log the user in" do
|
|
|
|
expect(controller.current_user).to be_nil
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2017-04-15 11:26:03 +00:00
|
|
|
context 'using a valid recovery code' do
|
|
|
|
before do
|
Backport fixes to 3.2 (#15360)
* Fix 2FA/sign-in token sessions being valid after password change (#14802)
If someone tries logging in to an account and is prompted for a 2FA
code or sign-in token, even if the account's password or e-mail is
updated in the meantime, the session will show the prompt and allow
the login process to complete with a valid 2FA code or sign-in token
* Fix Move handler not being triggered when failing to fetch target (#15107)
When failing to fetch the target account, the ProcessingWorker fails
as expected, but since it hasn't cleared the `move_in_progress` flag,
the next attempt at processing skips the `Move` activity altogether.
This commit changes it to clear the flag when encountering any
unexpected error on fetching the target account. This is likely to
occur because, of, e.g., a timeout, when many instances query the
same actor at the same time.
* Fix slow distinct queries where grouped queries are faster (#15287)
About 2x speed-up on inboxes query
* Fix possible inconsistencies in tag search (#14906)
Do not downcase the queried tag before passing it to postgres when searching:
- tags are not downcased on creation
- `arel_table[:name].lower.matches(pattern)` generates an ILIKE anyway
- if Postgres and Rails happen to use different case-folding rules,
downcasing before query but not before insertion may mean that some
tags with some casings are not searchable
* Fix updating account counters when account_stat is not yet created (#15108)
* Fix account processing failing because of large collections (#15027)
Fixes #15025
* Fix downloading remote media files when server returns empty filename (#14867)
Fixes #14817
* Fix webfinger redirect handling in ResolveAccountService (#15187)
* Fix webfinger redirect handling in ResolveAccountService
ResolveAccountService#process_webfinger! handled a one-step webfinger
redirection, but only accepting the result if it matched the exact URI passed
as input, defeating the point of a redirection check.
Instead, use the same logic as in `ActivityPub::FetchRemoteAccountService`,
updating the resulting `acct:` URI with the result of the first webfinger
query.
* Add tests
* Remove dependency on unused and unmaintained http_parser.rb gem (#14574)
It seems that years ago, the “http” gem dependend on the “http_parser.rb” gem
(it now depends on the “http-parser” gem), and, still years ago, we pulled
it from git in order to benefit from a bugfix that wasn't released yet (#7467).
* Add tootctl maintenance fix-duplicates (#14860, #15201, #15264, #15349, #15359)
* Fix old migration script not being able to run if it fails midway (#15361)
* Fix old migration script not being able to run if it fails midway
Improve the robustness of a migration script likely to fail because of database
corruption so it can run again once database corruptions are fixed.
* Display a specific error message in case of index corruption
Co-authored-by: Eugen Rochko <eugen@zeonfederated.com>
Co-authored-by: Claire <claire.github-309c@sitedethib.com>
Co-authored-by: Eugen Rochko <eugen@zeonfederated.com>
Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2020-12-18 22:31:14 +00:00
|
|
|
post :create, params: { user: { otp_attempt: recovery_codes.first } }, session: { attempt_user_id: user.id, attempt_user_updated_at: user.updated_at.to_s }
|
2017-04-15 11:26:03 +00:00
|
|
|
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
|
|
|
|
|
|
|
|
context 'using an invalid OTP' do
|
|
|
|
before do
|
Backport fixes to 3.2 (#15360)
* Fix 2FA/sign-in token sessions being valid after password change (#14802)
If someone tries logging in to an account and is prompted for a 2FA
code or sign-in token, even if the account's password or e-mail is
updated in the meantime, the session will show the prompt and allow
the login process to complete with a valid 2FA code or sign-in token
* Fix Move handler not being triggered when failing to fetch target (#15107)
When failing to fetch the target account, the ProcessingWorker fails
as expected, but since it hasn't cleared the `move_in_progress` flag,
the next attempt at processing skips the `Move` activity altogether.
This commit changes it to clear the flag when encountering any
unexpected error on fetching the target account. This is likely to
occur because, of, e.g., a timeout, when many instances query the
same actor at the same time.
* Fix slow distinct queries where grouped queries are faster (#15287)
About 2x speed-up on inboxes query
* Fix possible inconsistencies in tag search (#14906)
Do not downcase the queried tag before passing it to postgres when searching:
- tags are not downcased on creation
- `arel_table[:name].lower.matches(pattern)` generates an ILIKE anyway
- if Postgres and Rails happen to use different case-folding rules,
downcasing before query but not before insertion may mean that some
tags with some casings are not searchable
* Fix updating account counters when account_stat is not yet created (#15108)
* Fix account processing failing because of large collections (#15027)
Fixes #15025
* Fix downloading remote media files when server returns empty filename (#14867)
Fixes #14817
* Fix webfinger redirect handling in ResolveAccountService (#15187)
* Fix webfinger redirect handling in ResolveAccountService
ResolveAccountService#process_webfinger! handled a one-step webfinger
redirection, but only accepting the result if it matched the exact URI passed
as input, defeating the point of a redirection check.
Instead, use the same logic as in `ActivityPub::FetchRemoteAccountService`,
updating the resulting `acct:` URI with the result of the first webfinger
query.
* Add tests
* Remove dependency on unused and unmaintained http_parser.rb gem (#14574)
It seems that years ago, the “http” gem dependend on the “http_parser.rb” gem
(it now depends on the “http-parser” gem), and, still years ago, we pulled
it from git in order to benefit from a bugfix that wasn't released yet (#7467).
* Add tootctl maintenance fix-duplicates (#14860, #15201, #15264, #15349, #15359)
* Fix old migration script not being able to run if it fails midway (#15361)
* Fix old migration script not being able to run if it fails midway
Improve the robustness of a migration script likely to fail because of database
corruption so it can run again once database corruptions are fixed.
* Display a specific error message in case of index corruption
Co-authored-by: Eugen Rochko <eugen@zeonfederated.com>
Co-authored-by: Claire <claire.github-309c@sitedethib.com>
Co-authored-by: Eugen Rochko <eugen@zeonfederated.com>
Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2020-12-18 22:31:14 +00:00
|
|
|
post :create, params: { user: { otp_attempt: 'wrongotp' } }, session: { attempt_user_id: user.id, attempt_user_updated_at: user.updated_at.to_s }
|
2017-04-15 11:26:03 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
it 'shows a login error' do
|
|
|
|
expect(flash[:alert]).to match I18n.t('users.invalid_otp_token')
|
|
|
|
end
|
|
|
|
|
|
|
|
it "doesn't log the user in" do
|
|
|
|
expect(controller.current_user).to be_nil
|
|
|
|
end
|
|
|
|
end
|
2016-03-27 22:06:52 +00:00
|
|
|
end
|
2020-06-09 08:23:06 +00:00
|
|
|
|
|
|
|
context 'when 2FA is disabled and IP is unfamiliar' do
|
|
|
|
let!(:user) { Fabricate(:user, email: 'x@y.com', password: 'abcdefgh', current_sign_in_at: 3.weeks.ago, current_sign_in_ip: '0.0.0.0') }
|
|
|
|
|
|
|
|
before do
|
|
|
|
request.remote_ip = '10.10.10.10'
|
|
|
|
request.user_agent = 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:75.0) Gecko/20100101 Firefox/75.0'
|
|
|
|
|
|
|
|
allow(UserMailer).to receive(:sign_in_token).and_return(double('email', deliver_later!: nil))
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'using email and password' do
|
|
|
|
before do
|
|
|
|
post :create, params: { user: { email: user.email, password: user.password } }
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'renders sign in token authentication page' do
|
|
|
|
expect(controller).to render_template("sign_in_token")
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'generates sign in token' do
|
|
|
|
expect(user.reload.sign_in_token).to_not be_nil
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'sends sign in token e-mail' do
|
|
|
|
expect(UserMailer).to have_received(:sign_in_token)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'using a valid sign in token' do
|
|
|
|
before do
|
|
|
|
user.generate_sign_in_token && user.save
|
Backport fixes to 3.2 (#15360)
* Fix 2FA/sign-in token sessions being valid after password change (#14802)
If someone tries logging in to an account and is prompted for a 2FA
code or sign-in token, even if the account's password or e-mail is
updated in the meantime, the session will show the prompt and allow
the login process to complete with a valid 2FA code or sign-in token
* Fix Move handler not being triggered when failing to fetch target (#15107)
When failing to fetch the target account, the ProcessingWorker fails
as expected, but since it hasn't cleared the `move_in_progress` flag,
the next attempt at processing skips the `Move` activity altogether.
This commit changes it to clear the flag when encountering any
unexpected error on fetching the target account. This is likely to
occur because, of, e.g., a timeout, when many instances query the
same actor at the same time.
* Fix slow distinct queries where grouped queries are faster (#15287)
About 2x speed-up on inboxes query
* Fix possible inconsistencies in tag search (#14906)
Do not downcase the queried tag before passing it to postgres when searching:
- tags are not downcased on creation
- `arel_table[:name].lower.matches(pattern)` generates an ILIKE anyway
- if Postgres and Rails happen to use different case-folding rules,
downcasing before query but not before insertion may mean that some
tags with some casings are not searchable
* Fix updating account counters when account_stat is not yet created (#15108)
* Fix account processing failing because of large collections (#15027)
Fixes #15025
* Fix downloading remote media files when server returns empty filename (#14867)
Fixes #14817
* Fix webfinger redirect handling in ResolveAccountService (#15187)
* Fix webfinger redirect handling in ResolveAccountService
ResolveAccountService#process_webfinger! handled a one-step webfinger
redirection, but only accepting the result if it matched the exact URI passed
as input, defeating the point of a redirection check.
Instead, use the same logic as in `ActivityPub::FetchRemoteAccountService`,
updating the resulting `acct:` URI with the result of the first webfinger
query.
* Add tests
* Remove dependency on unused and unmaintained http_parser.rb gem (#14574)
It seems that years ago, the “http” gem dependend on the “http_parser.rb” gem
(it now depends on the “http-parser” gem), and, still years ago, we pulled
it from git in order to benefit from a bugfix that wasn't released yet (#7467).
* Add tootctl maintenance fix-duplicates (#14860, #15201, #15264, #15349, #15359)
* Fix old migration script not being able to run if it fails midway (#15361)
* Fix old migration script not being able to run if it fails midway
Improve the robustness of a migration script likely to fail because of database
corruption so it can run again once database corruptions are fixed.
* Display a specific error message in case of index corruption
Co-authored-by: Eugen Rochko <eugen@zeonfederated.com>
Co-authored-by: Claire <claire.github-309c@sitedethib.com>
Co-authored-by: Eugen Rochko <eugen@zeonfederated.com>
Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2020-12-18 22:31:14 +00:00
|
|
|
post :create, params: { user: { sign_in_token_attempt: user.sign_in_token } }, session: { attempt_user_id: user.id, attempt_user_updated_at: user.updated_at.to_s }
|
2020-06-09 08:23:06 +00:00
|
|
|
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
|
|
|
|
|
|
|
|
context 'using an invalid sign in token' do
|
|
|
|
before do
|
Backport fixes to 3.2 (#15360)
* Fix 2FA/sign-in token sessions being valid after password change (#14802)
If someone tries logging in to an account and is prompted for a 2FA
code or sign-in token, even if the account's password or e-mail is
updated in the meantime, the session will show the prompt and allow
the login process to complete with a valid 2FA code or sign-in token
* Fix Move handler not being triggered when failing to fetch target (#15107)
When failing to fetch the target account, the ProcessingWorker fails
as expected, but since it hasn't cleared the `move_in_progress` flag,
the next attempt at processing skips the `Move` activity altogether.
This commit changes it to clear the flag when encountering any
unexpected error on fetching the target account. This is likely to
occur because, of, e.g., a timeout, when many instances query the
same actor at the same time.
* Fix slow distinct queries where grouped queries are faster (#15287)
About 2x speed-up on inboxes query
* Fix possible inconsistencies in tag search (#14906)
Do not downcase the queried tag before passing it to postgres when searching:
- tags are not downcased on creation
- `arel_table[:name].lower.matches(pattern)` generates an ILIKE anyway
- if Postgres and Rails happen to use different case-folding rules,
downcasing before query but not before insertion may mean that some
tags with some casings are not searchable
* Fix updating account counters when account_stat is not yet created (#15108)
* Fix account processing failing because of large collections (#15027)
Fixes #15025
* Fix downloading remote media files when server returns empty filename (#14867)
Fixes #14817
* Fix webfinger redirect handling in ResolveAccountService (#15187)
* Fix webfinger redirect handling in ResolveAccountService
ResolveAccountService#process_webfinger! handled a one-step webfinger
redirection, but only accepting the result if it matched the exact URI passed
as input, defeating the point of a redirection check.
Instead, use the same logic as in `ActivityPub::FetchRemoteAccountService`,
updating the resulting `acct:` URI with the result of the first webfinger
query.
* Add tests
* Remove dependency on unused and unmaintained http_parser.rb gem (#14574)
It seems that years ago, the “http” gem dependend on the “http_parser.rb” gem
(it now depends on the “http-parser” gem), and, still years ago, we pulled
it from git in order to benefit from a bugfix that wasn't released yet (#7467).
* Add tootctl maintenance fix-duplicates (#14860, #15201, #15264, #15349, #15359)
* Fix old migration script not being able to run if it fails midway (#15361)
* Fix old migration script not being able to run if it fails midway
Improve the robustness of a migration script likely to fail because of database
corruption so it can run again once database corruptions are fixed.
* Display a specific error message in case of index corruption
Co-authored-by: Eugen Rochko <eugen@zeonfederated.com>
Co-authored-by: Claire <claire.github-309c@sitedethib.com>
Co-authored-by: Eugen Rochko <eugen@zeonfederated.com>
Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2020-12-18 22:31:14 +00:00
|
|
|
post :create, params: { user: { sign_in_token_attempt: 'wrongotp' } }, session: { attempt_user_id: user.id, attempt_user_updated_at: user.updated_at.to_s }
|
2020-06-09 08:23:06 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
it 'shows a login error' do
|
|
|
|
expect(flash[:alert]).to match I18n.t('users.invalid_sign_in_token')
|
|
|
|
end
|
|
|
|
|
|
|
|
it "doesn't log the user in" do
|
|
|
|
expect(controller.current_user).to be_nil
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2016-03-27 22:06:52 +00:00
|
|
|
end
|
|
|
|
end
|