Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/helpers/ci/user_sessions_helper.rb')
-rw-r--r--app/helpers/ci/user_sessions_helper.rb32
1 files changed, 32 insertions, 0 deletions
diff --git a/app/helpers/ci/user_sessions_helper.rb b/app/helpers/ci/user_sessions_helper.rb
new file mode 100644
index 00000000000..0296a74395c
--- /dev/null
+++ b/app/helpers/ci/user_sessions_helper.rb
@@ -0,0 +1,32 @@
+module Ci
+ module UserSessionsHelper
+ def generate_oauth_salt
+ SecureRandom.hex(16)
+ end
+
+ def generate_oauth_hmac(salt, return_to)
+ return unless return_to
+ digest = OpenSSL::Digest.new('sha256')
+ key = Gitlab::Application.secrets.db_key_base + salt
+ OpenSSL::HMAC.hexdigest(digest, key, return_to)
+ end
+
+ def generate_oauth_state(return_to)
+ return unless return_to
+ salt = generate_oauth_salt
+ hmac = generate_oauth_hmac(salt, return_to)
+ "#{salt}:#{hmac}:#{return_to}"
+ end
+
+ def get_ouath_state_return_to(state)
+ state.split(':', 3)[2] if state
+ end
+
+ def is_oauth_state_valid?(state)
+ return true unless state
+ salt, hmac, return_to = state.split(':', 3)
+ return false unless return_to
+ hmac == generate_oauth_hmac(salt, return_to)
+ end
+ end
+end