class Sidekiq::Crypt::ServerMiddleware

Constants

FILTERED

Public Instance Methods

call(_worker_class, job, _queue, _redis_pool = {}) { || ... } click to toggle source
# File lib/sidekiq-crypt/server_middleware.rb, line 8
def call(_worker_class, job, _queue, _redis_pool = {})
  return yield unless encrypted_worker?(job)

  encrypt_secret_params(job)

  yield

  delete_encryption_header(job['jid'])
rescue StandardError => e
  if encrypted_worker?(job)
    Traverser.new(@encryption_header[:encrypted_keys]).traverse!(job['args'], filter_proc)
  end

  raise e
end

Private Instance Methods

decryption_proc() click to toggle source
# File lib/sidekiq-crypt/server_middleware.rb, line 45
def decryption_proc
  proc do |_key, param|
    Cipher.decrypt(param, @encryption_header[:iv], @encryption_header[:key_version])
  end
end
delete_encryption_header(job_id) click to toggle source
# File lib/sidekiq-crypt/server_middleware.rb, line 71
def delete_encryption_header(job_id)
  Sidekiq.redis do |conn|
    conn.del("sidekiq-crpyt-header:#{job_id}")
  end
end
encrypt_secret_params(job) click to toggle source
# File lib/sidekiq-crypt/server_middleware.rb, line 26
def encrypt_secret_params(job)
  @encryption_header = read_encryption_header_from_redis(job['jid'])
  Traverser.new(@encryption_header[:encrypted_keys]).traverse!(job['args'], decryption_proc)
end
encrypted_worker?(job) click to toggle source
# File lib/sidekiq-crypt/server_middleware.rb, line 31
def encrypted_worker?(job)
  klass = worker_klass(job)
  klass && klass.ancestors.include?(Sidekiq::Crypt::Worker)
end
filter_proc() click to toggle source
# File lib/sidekiq-crypt/server_middleware.rb, line 51
def filter_proc
  proc { |_key, _param| FILTERED }
end
read_encryption_header(job_id) click to toggle source
# File lib/sidekiq-crypt/server_middleware.rb, line 65
def read_encryption_header(job_id)
  Sidekiq.redis do |conn|
    conn.get("sidekiq-crpyt-header:#{job_id}")
  end
end
read_encryption_header_from_redis(job_id) click to toggle source
# File lib/sidekiq-crypt/server_middleware.rb, line 55
def read_encryption_header_from_redis(job_id)
  parsed_header = JSON.parse(read_encryption_header(job_id))

  {
    iv: Base64.decode64(parsed_header['nonce']),
    encrypted_keys: parsed_header['encrypted_keys'],
    key_version: parsed_header['key_version']
  }
end
worker_klass(job) click to toggle source
# File lib/sidekiq-crypt/server_middleware.rb, line 36
def worker_klass(job)
  klass = begin
            job['args'][0]['job_class'] || job['class']
          rescue StandardError
            job['class']
          end
  klass.is_a?(Class) ? klass : Module.const_get(klass)
end