summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorMatija Čupić <matteeyah@gmail.com>2018-01-07 16:18:53 +0100
committerMatija Čupić <matteeyah@gmail.com>2018-01-07 16:18:53 +0100
commite7a8564f39a46a5fa5f34f798b890c0a62ff12e2 (patch)
tree701591864859c64c297dcf3895a456bd4db21dcf /app
parent15b5b91d20d75c159898e716ba199c4b2e3a0af5 (diff)
downloadgitlab-ce-e7a8564f39a46a5fa5f34f798b890c0a62ff12e2.tar.gz
Refactor GCP session token exchange scheme
Diffstat (limited to 'app')
-rw-r--r--app/controllers/projects/clusters/gcp_controller.rb6
-rw-r--r--app/workers/check_gcp_project_billing_worker.rb25
2 files changed, 21 insertions, 10 deletions
diff --git a/app/controllers/projects/clusters/gcp_controller.rb b/app/controllers/projects/clusters/gcp_controller.rb
index 41b25ed1325..25608df0b9c 100644
--- a/app/controllers/projects/clusters/gcp_controller.rb
+++ b/app/controllers/projects/clusters/gcp_controller.rb
@@ -65,11 +65,7 @@ class Projects::Clusters::GcpController < Projects::ApplicationController
end
def authorize_google_project_billing
- redis_token_key = CheckGcpProjectBillingWorker.generate_redis_token_key
- Gitlab::Redis::SharedState.with do |redis|
- redis.set(redis_token_key, token_in_session, ex: 5.minutes)
- end
-
+ redis_token_key = CheckGcpProjectBillingWorker.store_session_token(token_in_session)
CheckGcpProjectBillingWorker.perform_async(redis_token_key)
end
diff --git a/app/workers/check_gcp_project_billing_worker.rb b/app/workers/check_gcp_project_billing_worker.rb
index 784d17c4654..96d5c2a2193 100644
--- a/app/workers/check_gcp_project_billing_worker.rb
+++ b/app/workers/check_gcp_project_billing_worker.rb
@@ -5,9 +5,20 @@ class CheckGcpProjectBillingWorker
include ClusterQueue
LEASE_TIMEOUT = 15.seconds.to_i
+ SESSION_KEY_TIMEOUT = 5.minutes
- def self.generate_redis_token_key
- SecureRandom.uuid
+ def self.get_session_token(token_key)
+ Gitlab::Redis::SharedState.with do |redis|
+ redis.get(get_redis_session_key(token_key))
+ end
+ end
+
+ def self.store_session_token(token)
+ generate_token_key.tap do |token_key|
+ Gitlab::Redis::SharedState.with do |redis|
+ redis.set(get_redis_session_key(token_key), token, ex: SESSION_KEY_TIMEOUT)
+ end
+ end
end
def self.redis_shared_state_key_for(token)
@@ -17,7 +28,7 @@ class CheckGcpProjectBillingWorker
def perform(token_key)
return unless token_key
- token = get_token(token_key)
+ token = self.get_session_token(token_key)
return unless token
return unless try_obtain_lease_for(token)
@@ -29,8 +40,12 @@ class CheckGcpProjectBillingWorker
private
- def get_token(token_key)
- Gitlab::Redis::SharedState.with { |redis| redis.get(token_key) }
+ def self.generate_token_key
+ SecureRandom.uuid
+ end
+
+ def self.get_redis_session_key(token_key)
+ "gitlab:gcp:session:#{token_key}"
end
def try_obtain_lease_for(token)