diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-02-05 21:09:06 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-02-05 21:09:06 +0300 |
commit | b042382bbf5a4977c5b5c6b0a9a33f4e8ca8d16d (patch) | |
tree | de31671ab7c6ca8c2a3721cbabd1f2a42b3d0194 /lib/gitlab/sidekiq_middleware | |
parent | eabf8fd774fef6a54903e5141138f47bdafeb331 (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.rb | 34 | ||||
-rw-r--r-- | lib/gitlab/sidekiq_middleware/admin_mode/server.rb | 24 |
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 |