summaryrefslogtreecommitdiff
path: root/lib/api
diff options
context:
space:
mode:
authorDrew Blessing <drew@gitlab.com>2016-07-26 16:48:51 -0500
committerDrew Blessing <drew@gitlab.com>2016-08-24 17:50:57 -0500
commitbba85773519e972d036a933b1f054b6c76050c5f (patch)
treeaf569948abbcba0e206c33b4114c5b22f024746a /lib/api
parentf52cf56e90b2be3edb405fe588c94b637cf5088b (diff)
downloadgitlab-ce-bba85773519e972d036a933b1f054b6c76050c5f.tar.gz
Add two factor recovery endpoint to internal API
Diffstat (limited to 'lib/api')
-rw-r--r--lib/api/internal.rb25
1 files changed, 25 insertions, 0 deletions
diff --git a/lib/api/internal.rb b/lib/api/internal.rb
index d8e9ac406c4..5b54c11ef62 100644
--- a/lib/api/internal.rb
+++ b/lib/api/internal.rb
@@ -101,6 +101,31 @@ module API
{}
end
end
+
+ post '/two_factor_recovery_codes' do
+ status 200
+
+ key = Key.find(params[:key_id])
+ user = key.user
+
+ # Make sure this isn't a deploy key
+ unless key.type.nil?
+ return { success: false, message: 'Deploy keys cannot be used to retrieve recovery codes' }
+ end
+
+ unless user.present?
+ return { success: false, message: 'Could not find a user for the given key' }
+ end
+
+ unless user.two_factor_enabled?
+ return { success: false, message: 'Two-factor authentication is not enabled for this user' }
+ end
+
+ codes = user.generate_otp_backup_codes!
+ user.save!
+
+ { success: true, recovery_codes: codes }
+ end
end
end
end