Feature #35439 » 0001-Option-to-require-2FA-authentication-only-for-users-.patch
| app/models/setting.rb | ||
|---|---|---|
| 247 | 247 |
twofa == '1' |
| 248 | 248 |
end |
| 249 | 249 | |
| 250 |
def self.twofa_required_for_administrators? |
|
| 251 |
twofa == '3' |
|
| 252 |
end |
|
| 253 | ||
| 250 | 254 |
# Helper that returns an array based on per_page_options setting |
| 251 | 255 |
def self.per_page_options_array |
| 252 | 256 |
per_page_options.split(%r{[\s,]}).collect(&:to_i).select {|n| n > 0}.sort
|
| app/models/user.rb | ||
|---|---|---|
| 386 | 386 |
def must_activate_twofa? |
| 387 | 387 |
( |
| 388 | 388 |
Setting.twofa_required? || |
| 389 |
(Setting.twofa_required_for_administrators? && admin?) || |
|
| 389 | 390 |
(Setting.twofa_optional? && groups.any?(&:twofa_required?)) |
| 390 | 391 |
) && !twofa_active? |
| 391 | 392 |
end |
| app/views/settings/_authentication.html.erb | ||
|---|---|---|
| 31 | 31 |
<p> |
| 32 | 32 |
<%= setting_select :twofa, [[l(:label_disabled), "0"], |
| 33 | 33 |
[l(:label_optional), "1"], |
| 34 |
[l(:label_required_lower), "2"]] -%> |
|
| 34 |
[l(:label_required_lower), "2"], |
|
| 35 |
[l(:label_required_administrators), "3"]] -%> |
|
| 35 | 36 |
<em class="info"> |
| 36 | 37 |
<%= t 'twofa_hint_disabled_html', label: t(:label_disabled) -%><br/> |
| 37 | 38 |
<%= t 'twofa_hint_optional_html', label: t(:label_optional) -%><br/> |
| 38 |
<%= t 'twofa_hint_required_html', label: t(:label_required_lower) -%> |
|
| 39 |
<%= t 'twofa_hint_required_html', label: t(:label_required_lower) -%><br/> |
|
| 40 |
<%= t 'twofa_hint_required_administrators_html', label: t(:label_required_administrators) -%> |
|
| 39 | 41 |
</em> |
| 40 | 42 |
</p> |
| 41 | 43 | |
| ... | ... | |
| 48 | 50 |
<p><%= setting_select :session_lifetime, session_lifetime_options %></p> |
| 49 | 51 |
<p><%= setting_select :session_timeout, session_timeout_options %></p> |
| 50 | 52 |
</div> |
| 51 |
|
|
| 53 | ||
| 52 | 54 |
<p><em class="info"><%= l(:text_session_expiration_settings) %></em></p> |
| 53 | 55 |
</fieldset> |
| 54 | 56 | |
| config/additional_environment.rb.example | ||
|---|---|---|
| 7 | 7 |
# config.log_level = :debug |
| 8 | 8 |
# ... |
| 9 | 9 |
# |
| 10 | ||
| config/locales/en.yml | ||
|---|---|---|
| 1019 | 1019 |
label_readonly: Read-only |
| 1020 | 1020 |
label_required: Required |
| 1021 | 1021 |
label_required_lower: required |
| 1022 |
label_required_administrators: required for administrators |
|
| 1022 | 1023 |
label_hidden: Hidden |
| 1023 | 1024 |
label_attribute_of_project: "Project's %{name}"
|
| 1024 | 1025 |
label_attribute_of_issue: "Issue's %{name}"
|
| ... | ... | |
| 1349 | 1350 |
twofa_hint_disabled_html: Setting <strong>%{label}</strong> will deactivate and unpair two-factor authentication devices for all users.
|
| 1350 | 1351 |
twofa_hint_optional_html: Setting <strong>%{label}</strong> will let users set up two-factor authentication at will, unless it is required by one of their groups.
|
| 1351 | 1352 |
twofa_hint_required_html: Setting <strong>%{label}</strong> will require all users to set up two-factor authentication at their next login.
|
| 1353 |
twofa_hint_required_administrators_html: Setting <strong>%{label}</strong> will require all users with administration rights to set up two-factor authentication at their next login.
|
|
| 1352 | 1354 |
twofa_label_setup: Enable two-factor authentication |
| 1353 | 1355 |
twofa_label_deactivation_confirmation: Disable two-factor authentication |
| 1354 | 1356 |
twofa_notice_select: "Please select the two-factor scheme you would like to use:" |
| test/integration/twofa_test.rb | ||
|---|---|---|
| 31 | 31 |
end |
| 32 | 32 |
end |
| 33 | 33 | |
| 34 |
test "should require twofa setup when required for administrators" do |
|
| 35 |
user = User.find_by_login 'admin' |
|
| 36 |
assert_not user.must_activate_twofa? |
|
| 37 | ||
| 38 |
with_settings twofa: "3" do |
|
| 39 |
assert_not Setting.twofa_optional? |
|
| 40 |
assert_not Setting.twofa_required? |
|
| 41 |
assert Setting.twofa_required_for_administrators? |
|
| 42 |
assert user.must_activate_twofa? |
|
| 43 |
log_user('admin', 'admin')
|
|
| 44 |
follow_redirect! |
|
| 45 |
assert_redirected_to "/my/twofa/totp/activate/confirm" |
|
| 46 |
end |
|
| 47 |
end |
|
| 48 | ||
| 34 | 49 |
test "should require twofa setup when required by group" do |
| 35 | 50 |
user = User.find_by_login 'jsmith' |
| 36 | 51 |
assert_not user.must_activate_twofa? |