diff options
author | Matija Čupić <matteeyah@gmail.com> | 2018-01-07 16:18:53 +0100 |
---|---|---|
committer | Matija Čupić <matteeyah@gmail.com> | 2018-01-07 16:18:53 +0100 |
commit | e7a8564f39a46a5fa5f34f798b890c0a62ff12e2 (patch) | |
tree | 701591864859c64c297dcf3895a456bd4db21dcf /app | |
parent | 15b5b91d20d75c159898e716ba199c4b2e3a0af5 (diff) | |
download | gitlab-ce-e7a8564f39a46a5fa5f34f798b890c0a62ff12e2.tar.gz |
Refactor GCP session token exchange scheme
Diffstat (limited to 'app')
-rw-r--r-- | app/controllers/projects/clusters/gcp_controller.rb | 6 | ||||
-rw-r--r-- | app/workers/check_gcp_project_billing_worker.rb | 25 |
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) |