BigW Consortium Gitlab
Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
gitlab-ce
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Forest Godfrey
gitlab-ce
Commits
e7a8564f
Unverified
Commit
e7a8564f
authored
Jan 07, 2018
by
Matija Čupić
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Refactor GCP session token exchange scheme
parent
15b5b91d
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
23 additions
and
12 deletions
+23
-12
gcp_controller.rb
app/controllers/projects/clusters/gcp_controller.rb
+1
-5
check_gcp_project_billing_worker.rb
app/workers/check_gcp_project_billing_worker.rb
+20
-5
check_gcp_project_billing_worker_spec.rb
spec/workers/check_gcp_project_billing_worker_spec.rb
+2
-2
No files found.
app/controllers/projects/clusters/gcp_controller.rb
View file @
e7a8564f
...
@@ -65,11 +65,7 @@ class Projects::Clusters::GcpController < Projects::ApplicationController
...
@@ -65,11 +65,7 @@ class Projects::Clusters::GcpController < Projects::ApplicationController
end
end
def
authorize_google_project_billing
def
authorize_google_project_billing
redis_token_key
=
CheckGcpProjectBillingWorker
.
generate_redis_token_key
redis_token_key
=
CheckGcpProjectBillingWorker
.
store_session_token
(
token_in_session
)
Gitlab
::
Redis
::
SharedState
.
with
do
|
redis
|
redis
.
set
(
redis_token_key
,
token_in_session
,
ex:
5
.
minutes
)
end
CheckGcpProjectBillingWorker
.
perform_async
(
redis_token_key
)
CheckGcpProjectBillingWorker
.
perform_async
(
redis_token_key
)
end
end
...
...
app/workers/check_gcp_project_billing_worker.rb
View file @
e7a8564f
...
@@ -5,9 +5,20 @@ class CheckGcpProjectBillingWorker
...
@@ -5,9 +5,20 @@ class CheckGcpProjectBillingWorker
include
ClusterQueue
include
ClusterQueue
LEASE_TIMEOUT
=
15
.
seconds
.
to_i
LEASE_TIMEOUT
=
15
.
seconds
.
to_i
SESSION_KEY_TIMEOUT
=
5
.
minutes
def
self
.
generate_redis_token_key
def
self
.
get_session_token
(
token_key
)
SecureRandom
.
uuid
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
end
def
self
.
redis_shared_state_key_for
(
token
)
def
self
.
redis_shared_state_key_for
(
token
)
...
@@ -17,7 +28,7 @@ class CheckGcpProjectBillingWorker
...
@@ -17,7 +28,7 @@ class CheckGcpProjectBillingWorker
def
perform
(
token_key
)
def
perform
(
token_key
)
return
unless
token_key
return
unless
token_key
token
=
get
_token
(
token_key
)
token
=
self
.
get_session
_token
(
token_key
)
return
unless
token
return
unless
token
return
unless
try_obtain_lease_for
(
token
)
return
unless
try_obtain_lease_for
(
token
)
...
@@ -29,8 +40,12 @@ class CheckGcpProjectBillingWorker
...
@@ -29,8 +40,12 @@ class CheckGcpProjectBillingWorker
private
private
def
get_token
(
token_key
)
def
self
.
generate_token_key
Gitlab
::
Redis
::
SharedState
.
with
{
|
redis
|
redis
.
get
(
token_key
)
}
SecureRandom
.
uuid
end
def
self
.
get_redis_session_key
(
token_key
)
"gitlab:gcp:session:
#{
token_key
}
"
end
end
def
try_obtain_lease_for
(
token
)
def
try_obtain_lease_for
(
token
)
...
...
spec/workers/check_gcp_project_billing_worker_spec.rb
View file @
e7a8564f
...
@@ -8,7 +8,7 @@ describe CheckGcpProjectBillingWorker do
...
@@ -8,7 +8,7 @@ describe CheckGcpProjectBillingWorker do
context
'when there is a token in redis'
do
context
'when there is a token in redis'
do
before
do
before
do
allow_any_instance_of
(
described_class
).
to
receive
(
:get_token
).
and_return
(
token
)
allow_any_instance_of
(
described_class
).
to
receive
(
:get_
session_
token
).
and_return
(
token
)
end
end
context
'when there is no lease'
do
context
'when there is no lease'
do
...
@@ -48,7 +48,7 @@ describe CheckGcpProjectBillingWorker do
...
@@ -48,7 +48,7 @@ describe CheckGcpProjectBillingWorker do
context
'when there is no token in redis'
do
context
'when there is no token in redis'
do
before
do
before
do
allow_any_instance_of
(
described_class
).
to
receive
(
:get_token
).
and_return
(
nil
)
allow_any_instance_of
(
described_class
).
to
receive
(
:get_
session_
token
).
and_return
(
nil
)
end
end
it
'does not call the service'
do
it
'does not call the service'
do
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment