Class: Yes::Core::Middlewares::Encryptor

Inherits:
Object
  • Object
show all
Includes:
PgEventstore::Middleware
Defined in:
lib/yes/core/middlewares/encryptor.rb

Overview

PgEventstore middleware for encrypting/decrypting event data.

Examples:

PgEventstore.configure do |config|
  config.middlewares[:encryptor] = Yes::Core::Middlewares::Encryptor.new(key_repository)
end

Instance Method Summary collapse

Constructor Details

#initialize(key_repository) ⇒ Encryptor

Returns a new instance of Encryptor.

Parameters:

  • key_repository (#find, #create, #encrypt, #decrypt)


19
20
21
# File 'lib/yes/core/middlewares/encryptor.rb', line 19

def initialize(key_repository)
  @key_repository = key_repository
end

Instance Method Details

#deserialize(event) ⇒ PgEventstore::Event

Parameters:

  • event (PgEventstore::Event)

Returns:

  • (PgEventstore::Event)


39
40
41
42
43
44
# File 'lib/yes/core/middlewares/encryptor.rb', line 39

def deserialize(event)
  decrypted_data =
    DataDecryptor.new(data: event.data, schema: event.['encryption'], repository: key_repository).call
  event.data = decrypted_data
  event
end

#serialize(event) ⇒ PgEventstore::Event

Parameters:

  • event (PgEventstore::Event)

Returns:

  • (PgEventstore::Event)


25
26
27
28
29
30
31
32
33
34
35
# File 'lib/yes/core/middlewares/encryptor.rb', line 25

def serialize(event)
  return event unless event.class.respond_to?(:encryption_schema)

  encryptor = DataEncryptor.new(
    data: event.data, schema: event.class.encryption_schema, repository: key_repository
  )
  encryptor.call
  event.data = encryptor.encrypted_data
  event.['encryption'] = encryptor.
  event
end