diff --git a/app/helpers/users_helper.rb b/app/helpers/users_helper.rb index 1f5841199a840cebed838feeeb31466d7a741b35..1c00a9ad4dc68381cbfd6fc6f98f2e6398e9f2ae 100644 --- a/app/helpers/users_helper.rb +++ b/app/helpers/users_helper.rb @@ -78,6 +78,21 @@ module UsersHelper tabs end + def csv_content(column_name, user) + case column_name + when 'status' + l("status_#{User::LABEL_BY_STATUS[user.status]}") + when 'twofa_scheme' + if user.twofa_active? + l(:twofa__totp__name) + else + l(:label_disabled) + end + else + user.send(column_name) + end + end + def users_to_csv(users) Redmine::Export::CSV.generate(:encoding => params[:encoding]) do |csv| columns = [ @@ -90,7 +105,8 @@ module UsersHelper 'created_on', 'updated_on', 'last_login_on', - 'passwd_changed_on' + 'passwd_changed_on', + 'twofa_scheme' ] user_custom_fields = UserCustomField.sorted @@ -99,7 +115,7 @@ module UsersHelper # csv lines users = users.preload(:custom_values) users.each do |user| - values = columns.map {|c| c == 'status' ? l("status_#{User::LABEL_BY_STATUS[user.status]}") : user.send(c)} + + values = columns.map {|c| csv_content(c, user)} + user_custom_fields.map {|custom_field| user.custom_value_for(custom_field)} csv << values.map do |value| diff --git a/config/locales/en.yml b/config/locales/en.yml index b5245a7dfeecf5f033111baba56d9a93443f810e..dce5bda76bbff3393be5bf0da75d6257c0463911 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -320,6 +320,7 @@ en: field_password: Password field_new_password: New password field_password_confirmation: Confirmation + field_twofa_scheme: Two-factor authentication scheme field_version: Version field_type: Type field_host: Host diff --git a/config/locales/ja.yml b/config/locales/ja.yml index 2819728622c34b33893cafdee10daf094147d5d9..68a8f2297cfde74dfb51d81f996d236507030bb0 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -289,6 +289,7 @@ ja: field_password: パスワード field_new_password: 新しいパスワード field_password_confirmation: パスワードの確認 + field_twofa_scheme: 二要素認証方式 field_version: バージョン field_type: タイプ field_host: ホスト diff --git a/test/functional/users_controller_test.rb b/test/functional/users_controller_test.rb index 5b9c51dd96fa5e54e3880109071a964ede39599e..feb75ccff8f90d5fbab5d136a77c54721b5ea603 100644 --- a/test/functional/users_controller_test.rb +++ b/test/functional/users_controller_test.rb @@ -69,15 +69,22 @@ class UsersControllerTest < Redmine::ControllerTest def test_index_csv with_settings :default_language => 'en' do user = User.logged.status(1).first - user.update(passwd_changed_on: Time.current.last_month) - get :index, :params => { :format => 'csv' } + user.update(passwd_changed_on: Time.current.last_month, twofa_scheme: 'totp') + get :index, params: {format: 'csv'} assert_response :success assert_equal User.logged.status(1).count, response.body.chomp.split("\n").size - 1 - assert_include 'active', response.body - assert_not_include 'locked', response.body - assert_include format_time(user.updated_on), response.body - assert_include format_time(user.passwd_changed_on), response.body + assert_include format_time(user.updated_on), response.body.split("\n").second + assert_include format_time(user.passwd_changed_on), response.body.split("\n").second + + # status + assert_include 'active', response.body.split("\n").second + assert_not_include 'locked', response.body.split("\n").second + + # twofa_scheme + assert_include 'Authenticator app', response.body.split("\n").second + assert_include 'disabled', response.body.split("\n").third + assert_equal 'text/csv', @response.media_type end end