Class: Volt::MessageBus::MessageEncoder
- Defined in:
- lib/volt/server/message_bus/message_encoder.rb
Instance Attribute Summary collapse
-
#encrypted ⇒ Object
readonly
Returns the value of attribute encrypted.
Instance Method Summary collapse
- #decrypt(message) ⇒ Object
- #encrypt(message) ⇒ Object
-
#initialize ⇒ MessageEncoder
constructor
A new instance of MessageEncoder.
- #receive_message(io) ⇒ Object
- #send_message(io, message) ⇒ Object
Constructor Details
#initialize ⇒ MessageEncoder
Returns a new instance of MessageEncoder.
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/volt/server/message_bus/message_encoder.rb', line 7 def initialize # rbnacl is not supported on windows. windows = Gem.win_platform? if windows Volt.logger.warn('Currently Message Bus encryption is not supported on windows.') end # Message bus is encrypted by default disable = Volt.config..try(:disable_encryption) @encrypted = !windows && (disable != true) if @encrypted # Setup a RbNaCl simple box for handling encryption require 'base64' begin require 'rbnacl/libsodium' rescue LoadError => e # Ignore, incase they have libsodium installed locally end begin require 'rbnacl' rescue LoadError => e Volt.logger.error('Volt requires the rbnacl gem to enable encryption on the message bus. Add it to the gemfile (and rbnacl-sodium if you don\'t have libsodium installed locally') raise e end # use the first 32 chars of the app secret for the encryption key. key = Base64.decode64(Volt.config.app_secret)[0..31] @encrypt_box = RbNaCl::SimpleBox.from_secret_key(key) end end |
Instance Attribute Details
#encrypted ⇒ Object (readonly)
Returns the value of attribute encrypted.
6 7 8 |
# File 'lib/volt/server/message_bus/message_encoder.rb', line 6 def encrypted @encrypted end |
Instance Method Details
#decrypt(message) ⇒ Object
50 51 52 53 54 55 56 |
# File 'lib/volt/server/message_bus/message_encoder.rb', line 50 def decrypt() if @encrypted @encrypt_box.decrypt() else end end |
#encrypt(message) ⇒ Object
42 43 44 45 46 47 48 |
# File 'lib/volt/server/message_bus/message_encoder.rb', line 42 def encrypt() if @encrypted @encrypt_box.encrypt() else end end |
#receive_message(io) ⇒ Object
62 63 64 65 66 67 68 69 |
# File 'lib/volt/server/message_bus/message_encoder.rb', line 62 def (io) begin decrypt(Marshal.load(io)) rescue EOFError => e # We get EOFError when the connection closes, return nil nil end end |
#send_message(io, message) ⇒ Object
58 59 60 |
# File 'lib/volt/server/message_bus/message_encoder.rb', line 58 def (io, ) Marshal.dump(encrypt(), io) end |