docbrown/app/controllers/incoming_webhooks/mailchimp_unsubscribes_controller.rb

38 lines
1,020 B
Ruby

module IncomingWebhooks
class MailchimpUnsubscribesController < ApplicationController
skip_before_action :verify_authenticity_token
class InvalidListID < StandardError; end
LIST_MAPPINGS = {
mailchimp_newsletter_id: :email_newsletter,
mailchimp_sustaining_members_id: :email_membership_newsletter,
mailchimp_tag_moderators_id: :email_tag_mod_newsletter,
mailchimp_community_moderators_id: :email_community_mod_newsletter
}.freeze
def index
head :ok
end
def create
not_authorized unless valid_secret?
user = User.find_by!(email: params.dig(:data, :email))
user.update(email_type => false)
end
private
def valid_secret?
params[:secret] == SiteConfig.mailchimp_incoming_webhook_secret
end
def email_type
list_id = params.dig(:data, :list_id)
key = LIST_MAPPINGS.keys.detect { |k| SiteConfig.public_send(k) == list_id }
raise InvalidListID unless key
LIST_MAPPINGS[key]
end
end
end