Skip to content

Instantly share code, notes, and snippets.

@KamilLelonek
Created May 16, 2014 11:13
Show Gist options
  • Save KamilLelonek/7241e3aee589099b0463 to your computer and use it in GitHub Desktop.
Save KamilLelonek/7241e3aee589099b0463 to your computer and use it in GitHub Desktop.
MessageSerializer
class Hash
def symbolize_keys
inject({}) do |result, (key, value)|
new_key = case key
when String then
key.to_sym
else
key
end
new_value = case value
when Hash then
value.symbolize_keys
else
value
end
result[new_key] = new_value
result
end
end
end
require 'securerandom'
require 'base64'
require 'json'
class MessageSerializer
class << self
def dump(hash)
encrypt hash.to_json
end
def load(hash)
JSON.parse(decrypt hash).symbolize_keys
end
private
def encrypt(message)
encode64 scramble(message, __method__)
end
def decrypt(message)
scramble decode64(message), __method__
end
def scramble(message, mode)
cipher = cipher mode
cipher.key = key
cipher.update(message) << cipher.final
end
def cipher(mode)
OpenSSL::Cipher::AES256.new(:CBC).send mode
end
def key
@key ||= OpenSSL::Digest::SHA256.digest secret
end
def secret
ENV['CPIHER_KEY'] || '3ac956d2'
end
def encode64(message)
Base64.urlsafe_encode64 message
end
def decode64(message)
Base64.urlsafe_decode64 message
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment