class Sidekiq::Crypt::ClientMiddleware

Attributes

configuration[R]
encrypted_keys[R]

Public Class Methods

new(opts = {}) click to toggle source
# File lib/sidekiq-crypt/client_middleware.rb, line 9
def initialize(opts = {})
  @configuration = opts[:configuration]
  @encrypted_keys = Set.new
end

Public Instance Methods

call(worker_class, job, _queue, _redis_pool) { || ... } click to toggle source
# File lib/sidekiq-crypt/client_middleware.rb, line 14
def call(worker_class, job, _queue, _redis_pool)
  if encrypted_worker?(worker_class, job)
    @iv = Cipher.random_iv
    traverser.traverse!(job['args'], encryption_proc)
    write_encryption_header_to_redis(job['jid'], encrypted_keys)
  end

  yield
end

Private Instance Methods

encrypted_worker?(worker_class, job) click to toggle source
# File lib/sidekiq-crypt/client_middleware.rb, line 28
def encrypted_worker?(worker_class, job)
  @worker_klass = worker_class(worker_class, job)
  @worker_klass && @worker_klass.ancestors.include?(Sidekiq::Crypt::Worker)
end
encryption_proc() click to toggle source
# File lib/sidekiq-crypt/client_middleware.rb, line 50
def encryption_proc
  proc do |key, param|
    encrypted_keys << key
    Cipher.encrypt(param, @iv)
  end
end
traverser() click to toggle source
# File lib/sidekiq-crypt/client_middleware.rb, line 33
def traverser
  Traverser.new(@worker_klass.sidekiq_crypt_worker_filters || configuration.filters)
end
worker_class(worker_class, job) click to toggle source
# File lib/sidekiq-crypt/client_middleware.rb, line 57
def worker_class(worker_class, job)
  klass = begin
            job['args'][0]['job_class'] || worker_class
          rescue StandardError
            worker_class
          end

  if klass.is_a?(Class)
    klass
  elsif Module.const_defined?(klass)
    Module.const_get(klass)
  end
end
write_encryption_header_to_redis(job_id, encrypted_keys) click to toggle source
# File lib/sidekiq-crypt/client_middleware.rb, line 37
def write_encryption_header_to_redis(job_id, encrypted_keys)
  Sidekiq.redis do |conn|
    conn.set(
      "sidekiq-crpyt-header:#{job_id}",
      JSON.generate(
        nonce: Base64.encode64(@iv),
        encrypted_keys: encrypted_keys.to_a,
        key_version: Sidekiq::Crypt.configuration.current_key_version
      )
    )
  end
end