38 lines
1,020 B
Ruby
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
|