class WebhooksController < ApplicationController skip_forgery_protection before_action :authorize_request def lndhub begin payload = JSON.parse(request.body.read, symbolize_names: true) head :no_content and return unless payload[:type] == "incoming" rescue head :unprocessable_entity and return end user = User.find_by(ln_account: payload[:user_login]) # TODO make configurable notify_xmpp(user.address, payload[:amount], payload[:memo]) head :ok end private def notify_xmpp(address, amt_sats, memo) payload = { type: "normal", from: "kosmos.org", # TODO domain config # to: address, to: "raucao@kosmos.org", subject: "Sats received!", body: "#{amt_sats} sats received in your wallet. Memo: \"#{memo}\"" } XmppSendMessageJob.perform_later(payload) end def authorize_request if !ENV['WEBHOOKS_ALLOWED_IPS'].split(',').include?(request.remote_ip) head :forbidden and return end end end