]> source.dussan.org Git - redmine.git/commitdiff
Include two-factor authentication scheme in users API response (#34242).
authorGo MAEDA <maeda@farend.jp>
Wed, 23 Dec 2020 02:58:49 +0000 (02:58 +0000)
committerGo MAEDA <maeda@farend.jp>
Wed, 23 Dec 2020 02:58:49 +0000 (02:58 +0000)
Patch by Mizuki ISHIKAWA.

git-svn-id: http://svn.redmine.org/redmine/trunk@20686 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/views/users/index.api.rsb
app/views/users/show.api.rsb
test/integration/api_test/users_test.rb

index 66b104f46622f398c635063c6dd4668610b71686..4b51ba47a82bb22860bbf71d2df79cfddf53affe 100644 (file)
@@ -11,6 +11,7 @@ api.array :users, api_meta(:total_count => @user_count, :offset => @offset, :lim
       api.updated_on user.updated_on
       api.last_login_on     user.last_login_on
       api.passwd_changed_on user.passwd_changed_on
+      api.twofa_scheme user.twofa_scheme
 
       render_api_custom_values user.visible_custom_field_values, api
     end
index 3bc77e3bee7d44a82aea79d1d2919ffc80fc32e1..5fe3d5b1ccccbbd4810c2073353d8dfea37bfaee 100644 (file)
@@ -9,6 +9,7 @@ api.user do
   api.updated_on @user.updated_on
   api.last_login_on     @user.last_login_on
   api.passwd_changed_on @user.passwd_changed_on
+  api.twofa_scheme      @user.twofa_scheme
   api.api_key    @user.api_key if User.current.admin? || (User.current == @user)
   api.status     @user.status if User.current.admin?
 
index 1c669c9f5ac26c947efaee1082659374a29e24e2..b79791a7c82c64cb36dc4a0db808dda13927a030 100644 (file)
@@ -23,25 +23,35 @@ class Redmine::ApiTest::UsersTest < Redmine::ApiTest::Base
   fixtures :users, :email_addresses, :members, :member_roles, :roles, :projects
 
   test "GET /users.xml should return users" do
+    users = User.active.order('login')
+    users.last.update(twofa_scheme: 'totp')
     get '/users.xml', :headers => credentials('admin')
 
     assert_response :success
     assert_equal 'application/xml', response.media_type
     assert_select 'users' do
-      users = User.active.order('login')
       assert_select 'user', :count => users.size do |nodeset|
         nodeset.zip(users) do |user_element, user|
           assert_select user_element, 'id', :text => user.id.to_s
           assert_select user_element, 'updated_on', :text => user.updated_on.iso8601
+          assert_select user_element, 'twofa_scheme', :text => user.twofa_scheme.to_s
 
           # No one has changed password.
           assert_select user_element, 'passwd_changed_on', :text => ''
+
+          if user == users.last
+            assert_select user_element, 'twofa_scheme', :text => 'totp'
+          else
+            assert_select user_element, 'twofa_scheme', :text => ''
+          end
         end
       end
     end
   end
 
   test "GET /users.json should return users" do
+    users = User.active.order('login')
+    users.last.update(twofa_scheme: 'totp')
     get '/users.json', :headers => credentials('admin')
 
     assert_response :success
@@ -58,6 +68,12 @@ class Redmine::ApiTest::UsersTest < Redmine::ApiTest::Base
 
       # No one has changed password.
       assert_nil user_json['passwd_changed_on']
+
+      if user == users.last
+        assert_equal 'totp', user_json['twofa_scheme']
+      else
+        assert_nil user_json['twofa_scheme']
+      end
     end
   end
 
@@ -68,6 +84,7 @@ class Redmine::ApiTest::UsersTest < Redmine::ApiTest::Base
     assert_select 'user id', :text => '2'
     assert_select 'user updated_on', :text => Time.zone.parse('2006-07-19T20:42:15Z').iso8601
     assert_select 'user passwd_changed_on', :text => ''
+    assert_select 'user twofa_scheme', :text => ''
   end
 
   test "GET /users/:id.json should return the user" do
@@ -80,6 +97,7 @@ class Redmine::ApiTest::UsersTest < Redmine::ApiTest::Base
     assert_equal 2, json['user']['id']
     assert_equal Time.zone.parse('2006-07-19T20:42:15Z').iso8601, json['user']['updated_on']
     assert_nil json['user']['passwd_changed_on']
+    assert_nil json['user']['twofa_scheme']
   end
 
   test "GET /users/:id.xml with include=memberships should include memberships" do