Feature #35439 » 0001-Option-to-require-2FA-authentication-only-for-users-.patch
| app/models/user.rb | ||
|---|---|---|
| 386 | 386 |
def must_activate_twofa? |
| 387 | 387 |
( |
| 388 | 388 |
Setting.twofa_required? || |
| 389 |
(Setting.twofa_optional? && groups.any?(&:twofa_required?)) |
|
| 389 |
( |
|
| 390 |
Setting.twofa_optional? && ( |
|
| 391 |
groups.any?(&:twofa_required?) || |
|
| 392 |
(Setting.twofa_required_for_administrators? && self.admin) |
|
| 393 |
) |
|
| 394 |
) |
|
| 390 | 395 |
) && !twofa_active? |
| 391 | 396 |
end |
| 392 | 397 | |
| app/views/settings/_authentication.html.erb | ||
|---|---|---|
| 37 | 37 |
<%= t 'twofa_hint_optional_html', label: t(:label_optional) -%><br/> |
| 38 | 38 |
<%= t 'twofa_hint_required_html', label: t(:label_required_lower) -%> |
| 39 | 39 |
</em> |
| 40 |
<span id="twofa_optional" class="<%= "hidden" unless Setting.twofa == "1" %>"> |
|
| 41 |
<label class="block"> |
|
| 42 |
<%= setting_check_box :twofa_required_for_administrators, label: false %> |
|
| 43 |
<%= l(:setting_twofa_required_for_administrators) %> |
|
| 44 |
</label> |
|
| 45 |
</span> |
|
| 40 | 46 |
</p> |
| 41 | 47 | |
| 42 | 48 |
</div> |
| ... | ... | |
| 54 | 60 | |
| 55 | 61 |
<%= submit_tag l(:button_save) %> |
| 56 | 62 |
<% end %> |
| 63 | ||
| 64 |
<%= javascript_tag do %> |
|
| 65 |
$('#settings_twofa').on('change', function(e){
|
|
| 66 |
const twofa = e.target.value; |
|
| 67 |
const parent_block = document.getElementById("twofa_optional");
|
|
| 68 | ||
| 69 |
if (twofa == "1") {
|
|
| 70 |
parent_block.classList.remove('hidden');
|
|
| 71 |
} else {
|
|
| 72 |
parent_block.classList.add('hidden');
|
|
| 73 |
} |
|
| 74 |
}); |
|
| 75 |
<% end %> |
|
| config/locales/en.yml | ||
|---|---|---|
| 508 | 508 |
setting_show_status_changes_in_mail_subject: Show status changes in issue mail notifications subject |
| 509 | 509 |
setting_project_list_defaults: Projects list defaults |
| 510 | 510 |
setting_twofa: Two-factor authentication |
| 511 |
setting_twofa_required_for_administrators: Require two-factor authentication for administrators |
|
| 511 | 512 | |
| 512 | 513 |
permission_add_project: Create project |
| 513 | 514 |
permission_add_subprojects: Create subprojects |
| config/settings.yml | ||
|---|---|---|
| 37 | 37 |
twofa: |
| 38 | 38 |
default: 1 |
| 39 | 39 |
security_notifications: 1 |
| 40 |
twofa_required_for_administrators: |
|
| 41 |
default: 0 |
|
| 42 |
security_notifications: 1 |
|
| 40 | 43 |
unsubscribe: |
| 41 | 44 |
default: 1 |
| 42 | 45 |
password_required_char_classes: |
| 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: "0", twofa_required_for_administrators: "1" do |
|
| 39 |
assert_not Setting.twofa_optional? |
|
| 40 |
assert_not Setting.twofa_required? |
|
| 41 |
assert_not user.must_activate_twofa? |
|
| 42 |
end |
|
| 43 | ||
| 44 |
with_settings twofa: "1", twofa_required_for_administrators: "1" do |
|
| 45 |
assert Setting.twofa_optional? |
|
| 46 |
assert_not Setting.twofa_required? |
|
| 47 |
assert user.must_activate_twofa? |
|
| 48 |
log_user('admin', 'admin')
|
|
| 49 |
follow_redirect! |
|
| 50 |
assert_redirected_to "/my/twofa/totp/activate/confirm" |
|
| 51 |
end |
|
| 52 |
end |
|
| 53 | ||
| 34 | 54 |
test "should require twofa setup when required by group" do |
| 35 | 55 |
user = User.find_by_login 'jsmith' |
| 36 | 56 |
assert_not user.must_activate_twofa? |