Skip to content
Snippets Groups Projects
Verified Commit 5a1f69f4 authored by Heinrich Lee Yu's avatar Heinrich Lee Yu
Browse files

Move member invite processor

Moved this to the same module as the failure logger
parent b3f343f8
No related branches found
No related tags found
1 merge request!89113Log email delivery failures
......@@ -14,7 +14,7 @@ class WebhooksController < ApplicationController
WEBHOOK_PROCESSORS = [
Gitlab::Mailgun::WebhookProcessors::FailureLogger,
::Members::Mailgun::ProcessWebhookService
Gitlab::Mailgun::WebhookProcessors::MemberInvites
].freeze
def process_webhook
......
# frozen_string_literal: true
module Members
module Mailgun
class ProcessWebhookService
ProcessWebhookServiceError = Class.new(StandardError)
def initialize(payload)
@payload = payload
end
def execute
@member = Member.find_by_invite_token(invite_token)
update_member_and_log if member
rescue ProcessWebhookServiceError => e
Gitlab::ErrorTracking.track_exception(e)
end
def should_process?
payload['event'] == 'failed' && payload['severity'] == 'permanent' && payload['tags']&.include?(::Members::Mailgun::INVITE_EMAIL_TAG)
end
private
attr_reader :payload, :member
def update_member_and_log
log_update_event if member.update(invite_email_success: false)
end
def log_update_event
Gitlab::AppLogger.info "UPDATED MEMBER INVITE_EMAIL_SUCCESS: member_id: #{member.id}"
end
def invite_token
# may want to validate schema in some way using ::JSONSchemer.schema(SCHEMA_PATH).valid?(message) if this
# gets more complex
payload.dig('user-variables', ::Members::Mailgun::INVITE_EMAIL_TOKEN_KEY) ||
raise(ProcessWebhookServiceError, "Failed to receive #{::Members::Mailgun::INVITE_EMAIL_TOKEN_KEY} in user-variables: #{payload}")
end
end
end
end
# frozen_string_literal: true
module Gitlab
module Mailgun
module WebhookProcessors
class MemberInvites < Base
ProcessWebhookServiceError = Class.new(StandardError)
def execute
@member = Member.find_by_invite_token(invite_token)
update_member_and_log if member
rescue ProcessWebhookServiceError => e
Gitlab::ErrorTracking.track_exception(e)
end
def should_process?
payload['event'] == 'failed' && payload['severity'] == 'permanent' &&
payload['tags']&.include?(::Members::Mailgun::INVITE_EMAIL_TAG)
end
private
attr_reader :payload, :member
def update_member_and_log
log_update_event if member.update(invite_email_success: false)
end
def log_update_event
Gitlab::AppLogger.info "UPDATED MEMBER INVITE_EMAIL_SUCCESS: member_id: #{member.id}"
end
def invite_token
# may want to validate schema in some way using ::JSONSchemer.schema(SCHEMA_PATH).valid?(message) if this
# gets more complex
payload.dig('user-variables', ::Members::Mailgun::INVITE_EMAIL_TOKEN_KEY) ||
raise(ProcessWebhookServiceError, "Failed to receive #{::Members::Mailgun::INVITE_EMAIL_TOKEN_KEY} " \
"in user-variables: #{payload}")
end
end
end
end
end
......@@ -2,7 +2,7 @@
require 'spec_helper'
RSpec.describe Members::Mailgun::ProcessWebhookService do
RSpec.describe Gitlab::Mailgun::WebhookProcessors::MemberInvites do
describe '#execute', :aggregate_failures do
let_it_be(:member) { create(:project_member, :invited) }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment