mirror of
https://github.com/discourse/discourse.git
synced 2025-05-31 21:55:25 +08:00
DEV: Remove redundant admin_login route, share with email_login
This commit is contained in:
@ -537,126 +537,6 @@ describe UsersController do
|
||||
expect(response_body).to_not match(I18n.t("login.second_factor_description"))
|
||||
end
|
||||
end
|
||||
|
||||
context 'logs in admin' do
|
||||
it 'does not log in admin with invalid token' do
|
||||
SiteSetting.sso_url = "https://www.example.com/sso"
|
||||
SiteSetting.enable_sso = true
|
||||
get "/u/admin-login/invalid"
|
||||
expect(session[:current_user_id]).to be_blank
|
||||
end
|
||||
|
||||
context 'valid token' do
|
||||
it 'does log in admin with SSO disabled' do
|
||||
SiteSetting.enable_sso = false
|
||||
token = admin.email_tokens.create(email: admin.email).token
|
||||
|
||||
get "/u/admin-login/#{token}"
|
||||
expect(response).to redirect_to('/')
|
||||
expect(session[:current_user_id]).to eq(admin.id)
|
||||
end
|
||||
|
||||
it 'logs in admin with SSO enabled' do
|
||||
SiteSetting.sso_url = "https://www.example.com/sso"
|
||||
SiteSetting.enable_sso = true
|
||||
token = admin.email_tokens.create(email: admin.email).token
|
||||
|
||||
get "/u/admin-login/#{token}"
|
||||
expect(response).to redirect_to('/')
|
||||
expect(session[:current_user_id]).to eq(admin.id)
|
||||
end
|
||||
end
|
||||
|
||||
describe 'when 2 factor authentication is enabled' do
|
||||
fab!(:second_factor) { Fabricate(:user_second_factor_totp, user: admin) }
|
||||
fab!(:email_token) { Fabricate(:email_token, user: admin) }
|
||||
|
||||
it 'does not log in when token required' do
|
||||
second_factor
|
||||
get "/u/admin-login/#{email_token.token}"
|
||||
expect(response).not_to redirect_to('/')
|
||||
expect(session[:current_user_id]).not_to eq(admin.id)
|
||||
expect(response.body).to include(I18n.t('login.second_factor_description'))
|
||||
end
|
||||
|
||||
describe 'invalid 2 factor token' do
|
||||
it 'should display the right error' do
|
||||
second_factor
|
||||
|
||||
put "/u/admin-login/#{email_token.token}", params: {
|
||||
second_factor_token: '13213',
|
||||
second_factor_method: UserSecondFactor.methods[:totp]
|
||||
}
|
||||
|
||||
expect(response.status).to eq(200)
|
||||
expect(response.body).to include(I18n.t('login.second_factor_description'))
|
||||
expect(response.body).to include(I18n.t('login.invalid_second_factor_code'))
|
||||
end
|
||||
end
|
||||
|
||||
it 'logs in when a valid 2-factor token is given' do
|
||||
put "/u/admin-login/#{email_token.token}", params: {
|
||||
second_factor_token: ROTP::TOTP.new(second_factor.data).now,
|
||||
second_factor_method: UserSecondFactor.methods[:totp]
|
||||
}
|
||||
|
||||
expect(response).to redirect_to('/')
|
||||
expect(session[:current_user_id]).to eq(admin.id)
|
||||
end
|
||||
end
|
||||
|
||||
describe 'when security key authentication required' do
|
||||
fab!(:email_token) { Fabricate(:email_token, user: admin) }
|
||||
let!(:security_key) do
|
||||
Fabricate(
|
||||
:user_security_key,
|
||||
user: admin,
|
||||
credential_id: valid_security_key_data[:credential_id],
|
||||
public_key: valid_security_key_data[:public_key]
|
||||
)
|
||||
end
|
||||
|
||||
before do
|
||||
simulate_localhost_webauthn_challenge
|
||||
|
||||
# store challenge in secure session by visiting the admin login page
|
||||
get "/u/admin-login/#{email_token.token}"
|
||||
end
|
||||
|
||||
it 'does not log in when token required' do
|
||||
expect(response).not_to redirect_to('/')
|
||||
expect(session[:current_user_id]).not_to eq(admin.id)
|
||||
expect(response.body).to include(I18n.t('login.security_key_authenticate'))
|
||||
end
|
||||
|
||||
describe 'invalid security key' do
|
||||
it 'should display the right error' do
|
||||
put "/u/admin-login/#{email_token.token}", params: {
|
||||
security_key_credential: {
|
||||
signature: 'bad',
|
||||
clientData: 'bad',
|
||||
authenticatorData: 'bad',
|
||||
credentialId: 'bad'
|
||||
}.to_json,
|
||||
second_factor_method: UserSecondFactor.methods[:security_key]
|
||||
}
|
||||
|
||||
expect(response.status).to eq(200)
|
||||
expect(response.body).to include(I18n.t('webauthn.validation.not_found_error'))
|
||||
end
|
||||
end
|
||||
|
||||
it 'logs in when a valid security key is given' do
|
||||
put "/u/admin-login/#{email_token.token}", params: {
|
||||
security_key_credential: valid_security_key_auth_post_data.to_json,
|
||||
second_factor_method: UserSecondFactor.methods[:security_key]
|
||||
}
|
||||
|
||||
expect(response).to redirect_to('/')
|
||||
expect(session[:current_user_id]).to eq(admin.id)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#toggle_anon' do
|
||||
|
Reference in New Issue
Block a user