Sha256: 1c96a3c2a8a6bb7c9fbd9f6b1dad5e7207cc984221c4f87caa475e3048d77860

Contents?: true

Size: 1.25 KB

Versions: 2

Compression:

Stored size: 1.25 KB

Contents

module Pay
  module Webhooks
    class LagoController < Pay::ApplicationController
      if Rails.application.config.action_controller.default_protect_from_forgery
        skip_before_action :verify_authenticity_token
      end

      def create
        return head :bad_request unless (event = verified_event)
        queue_event(event)
        head :ok
      end

      private

      def queue_event(event)
        return unless Pay::Webhooks.delegator.listening?("lago.#{event["webhook_type"]}")

        record = Pay::Webhook.create!(processor: :lago, event_type: event["webhook_type"], event: event)
        Pay::Webhooks::ProcessJob.perform_later(record)
      end

      def verified_event
        payload_json = JSON.parse(request.raw_post)
        return false unless valid_signature?(request.headers["HTTP_X_LAGO_SIGNATURE"], payload_json)
        payload_json
      rescue JSON::ParserError
        false
      end

      def valid_signature?(signature, payload)
        public_key = Pay::Lago.webhook_public_key
        Pay::Lago.client.webhooks.valid_signature?(signature, payload, public_key)
      end

      def verified_webhook?(signature, payload)
        Pay::Lago.client.webhooks.valid_signature?(signature, payload_json, public_key)
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
pay-lago-0.1.1 app/controllers/pay/webhooks/lago_controller.rb
pay-lago-0.1.0 app/controllers/pay/webhooks/lago_controller.rb