diff options
author | Thong Kuah <tkuah@gitlab.com> | 2018-10-11 10:42:32 +0300 |
---|---|---|
committer | Thong Kuah <tkuah@gitlab.com> | 2018-10-11 11:26:13 +0300 |
commit | 3552187e920a593de16b877cd129e3d56844c754 (patch) | |
tree | 6b3709227d7f4b65c816b2a670316ec664bb704b | |
parent | f9bedcfc08bc454e6864df47a7ca0d76b75c634f (diff) |
Extract gcp session methods into new Concern
Soon this can be shared with group clusters controller
-rw-r--r-- | app/controllers/concerns/gcp_session.rb | 41 | ||||
-rw-r--r-- | app/controllers/projects/clusters_controller.rb | 29 |
2 files changed, 45 insertions, 25 deletions
diff --git a/app/controllers/concerns/gcp_session.rb b/app/controllers/concerns/gcp_session.rb new file mode 100644 index 00000000000..75909aedf4c --- /dev/null +++ b/app/controllers/concerns/gcp_session.rb @@ -0,0 +1,41 @@ +# frozen_string_literal: true + +module GcpSession + extend ActiveSupport::Concern + + included do + helper_method :token_in_session + end + + private + + def gcp_authorize_url(redirect_url) + state = generate_session_key_redirect(redirect_url.to_s) + + GoogleApi::CloudPlatform::Client.new( + nil, callback_google_api_auth_url, + state: state).authorize_url + rescue GoogleApi::Auth::ConfigMissingError + # no-op + end + + def validated_gcp_token + GoogleApi::CloudPlatform::Client.new(token_in_session, nil) + .validate_token(expires_at_in_session) + end + + def expires_at_in_session + @expires_at_in_session ||= + session[GoogleApi::CloudPlatform::Client.session_key_for_expires_at] + end + + def generate_session_key_redirect(uri) + GoogleApi::CloudPlatform::Client.new_session_key_for_redirect_uri do |key| + session[key] = uri + end + end + + def token_in_session + session[GoogleApi::CloudPlatform::Client.session_key_for_token] + end +end diff --git a/app/controllers/projects/clusters_controller.rb b/app/controllers/projects/clusters_controller.rb index bcdbf48bb35..6e063fce296 100644 --- a/app/controllers/projects/clusters_controller.rb +++ b/app/controllers/projects/clusters_controller.rb @@ -1,6 +1,8 @@ # frozen_string_literal: true class Projects::ClustersController < Projects::ApplicationController + include GcpSession + before_action :cluster, except: [:index, :new, :create_gcp, :create_user] before_action :authorize_read_cluster! before_action :generate_gcp_authorize_url, only: [:new] @@ -11,7 +13,6 @@ class Projects::ClustersController < Projects::ApplicationController before_action :authorize_update_cluster!, only: [:update] before_action :authorize_admin_cluster!, only: [:destroy] before_action :update_applications_status, only: [:status] - helper_method :token_in_session STATUS_POLLING_INTERVAL = 10_000 @@ -169,13 +170,7 @@ class Projects::ClustersController < Projects::ApplicationController end def generate_gcp_authorize_url - state = generate_session_key_redirect(new_project_cluster_path(@project).to_s) - - @authorize_url = GoogleApi::CloudPlatform::Client.new( - nil, callback_google_api_auth_url, - state: state).authorize_url - rescue GoogleApi::Auth::ConfigMissingError - # no-op + @authorize_url = gcp_authorize_url(new_project_cluster_path(@project)) end def gcp_cluster @@ -191,23 +186,7 @@ class Projects::ClustersController < Projects::ApplicationController end def validate_gcp_token - @valid_gcp_token = GoogleApi::CloudPlatform::Client.new(token_in_session, nil) - .validate_token(expires_at_in_session) - end - - def token_in_session - session[GoogleApi::CloudPlatform::Client.session_key_for_token] - end - - def expires_at_in_session - @expires_at_in_session ||= - session[GoogleApi::CloudPlatform::Client.session_key_for_expires_at] - end - - def generate_session_key_redirect(uri) - GoogleApi::CloudPlatform::Client.new_session_key_for_redirect_uri do |key| - session[key] = uri - end + @valid_gcp_token = validated_gcp_token end def authorize_update_cluster! |