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:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-02-04 15:09:00 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2020-02-04 15:09:00 +0300
commit88a0824944720b6edaaef56376713541b9a02118 (patch)
treef5fcc4f9755f249779cda9a8f02902d734af6e7e /lib/gitlab/sidekiq_middleware
parent7d19df2d34a9803d9f077c16315ba919b7ae2aa2 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'lib/gitlab/sidekiq_middleware')
-rw-r--r--lib/gitlab/sidekiq_middleware/admin_mode/client.rb34
-rw-r--r--lib/gitlab/sidekiq_middleware/admin_mode/server.rb24
2 files changed, 58 insertions, 0 deletions
diff --git a/lib/gitlab/sidekiq_middleware/admin_mode/client.rb b/lib/gitlab/sidekiq_middleware/admin_mode/client.rb
new file mode 100644
index 00000000000..e227ee654ee
--- /dev/null
+++ b/lib/gitlab/sidekiq_middleware/admin_mode/client.rb
@@ -0,0 +1,34 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module SidekiqMiddleware
+ module AdminMode
+ # Checks if admin mode is enabled for the request creating the sidekiq job
+ # by examining if admin mode has been enabled for the user
+ # If enabled then it injects a job field that persists through the job execution
+ class Client
+ def call(_worker_class, job, _queue, _redis_pool)
+ return yield unless Feature.enabled?(:user_mode_in_session)
+
+ # Admin mode enabled in the original request or in a nested sidekiq job
+ admin_mode_user_id = find_admin_user_id
+
+ if admin_mode_user_id
+ job['admin_mode_user_id'] ||= admin_mode_user_id
+
+ Gitlab::AppLogger.debug("AdminMode::Client injected admin mode for job: #{job.inspect}")
+ end
+
+ yield
+ end
+
+ private
+
+ def find_admin_user_id
+ Gitlab::Auth::CurrentUserMode.current_admin&.id ||
+ Gitlab::Auth::CurrentUserMode.bypass_session_admin_id
+ end
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/sidekiq_middleware/admin_mode/server.rb b/lib/gitlab/sidekiq_middleware/admin_mode/server.rb
new file mode 100644
index 00000000000..6366867a0fa
--- /dev/null
+++ b/lib/gitlab/sidekiq_middleware/admin_mode/server.rb
@@ -0,0 +1,24 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module SidekiqMiddleware
+ module AdminMode
+ class Server
+ def call(_worker, job, _queue)
+ return yield unless Feature.enabled?(:user_mode_in_session)
+
+ admin_mode_user_id = job['admin_mode_user_id']
+
+ # Do not bypass session if this job was not enabled with admin mode on
+ return yield unless admin_mode_user_id
+
+ Gitlab::Auth::CurrentUserMode.bypass_session!(admin_mode_user_id) do
+ Gitlab::AppLogger.debug("AdminMode::Server bypasses session for admin mode in job: #{job.inspect}")
+
+ yield
+ end
+ end
+ end
+ end
+ end
+end