Skip to content

Commit e311861

Browse files
committed
Prevent login of non-regular users
1 parent 43f070d commit e311861

5 files changed

Lines changed: 45 additions & 0 deletions

File tree

app/policies/global_policy.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
class GlobalPolicy < BasePolicy
44
condition(:organization_creation_restricted) { ApplicationSetting.current[:organization_creation_restricted] }
55
condition(:admin) { user&.admin }
6+
condition(:user_is_regular) { user&.regular? }
67

78
rule { ~anonymous }.enable :create_organization
89
rule { organization_creation_restricted & ~admin }.prevent :create_organization
@@ -15,6 +16,8 @@ class GlobalPolicy < BasePolicy
1516
enable :read_velorum_config
1617
end
1718

19+
rule { user_is_regular }.enable :create_user_session
20+
1821
rule { admin }.policy do
1922
enable :read_application_setting
2023
enable :update_application_setting

app/services/users/identity/login_service.rb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,16 @@ def execute
5050
details: user_session.errors)
5151
end
5252

53+
unless Ability.allowed?(Sagittarius::Authentication.new(:session, user_session), :create_user_session)
54+
logger.warn(
55+
message: 'User was not allowed to create user session',
56+
user_id: user.id,
57+
username: user.username
58+
)
59+
t.rollback_and_return! ServiceResponse.error(message: 'Not allowed to create user session',
60+
error_code: :invalid_login_data)
61+
end
62+
5363
AuditService.audit(
5464
:user_logged_in,
5565
author_id: user.id,

app/services/users/login_service.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,12 @@ def execute
4545
details: user_session.errors)
4646
end
4747

48+
unless Ability.allowed?(Sagittarius::Authentication.new(:session, user_session), :create_user_session)
49+
logger.warn(message: 'User was not allowed to create user session', user_id: user.id, username: user.username)
50+
t.rollback_and_return! ServiceResponse.error(message: 'Not allowed to create user session',
51+
error_code: :invalid_login_data)
52+
end
53+
4854
AuditService.audit(
4955
:user_logged_in,
5056
author_id: user.id,

spec/services/users/identity/login_service_spec.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,18 @@ def setup_identity_provider(identity)
5656
expect(service_response.payload[:error_code]).to eq(:user_blocked)
5757
end
5858
end
59+
60+
context 'when user is ghost' do
61+
before do
62+
current_user.update!(user_type: :ghost)
63+
end
64+
65+
it do
66+
is_expected.not_to create_audit_event
67+
expect(service_response).to be_error
68+
expect(service_response.payload[:error_code]).to eq(:invalid_login_data)
69+
end
70+
end
5971
end
6072

6173
context 'when user identity validation fails' do

spec/services/users/login_service_spec.rb

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,20 @@
6767
end
6868
end
6969

70+
context 'when user is ghost' do
71+
let(:params) { { username: username, password: password } }
72+
73+
before do
74+
current_user.update!(user_type: :ghost)
75+
end
76+
77+
it 'returns an error response' do
78+
expect(service_response).to be_error
79+
expect(service_response.payload[:error_code]).to eq(:invalid_login_data)
80+
is_expected.not_to create_audit_event
81+
end
82+
end
83+
7084
context 'when using mfa' do
7185
context 'when mfa is not activated' do
7286
let(:params) do

0 commit comments

Comments
 (0)