class Mailgun::OptInHandler

def self.validate_hash(secret_app_id, unique_hash)

Returns:
  • (Hash or Boolean) - A hash with 'recipient_address' and 'mailing_list', if validates. Otherwise, boolean false.

Parameters:
  • unique_hash (Hash) -- The hash from the user. Likely via link click.
  • secret_app_id (String) -- A secret passphrase used as a constant for the hash.
def self.validate_hash(secret_app_id, unique_hash)
  outer_payload = JSON.parse(Base64.decode64(CGI.unescape(unique_hash)))
  sha1_digest = OpenSSL::Digest.new('sha1')
  generated_hash = OpenSSL::HMAC.hexdigest(sha1_digest, secret_app_id, outer_payload['p'])
  inner_payload = JSON.parse(Base64.decode64(CGI.unescape(outer_payload['p'])))
  hash_provided = outer_payload['h']
  if generated_hash == hash_provided
    return { 'recipient_address' => inner_payload['r'], 'mailing_list' => inner_payload['l'] }
  end
  false
end