41 lines
989 B
Ruby
41 lines
989 B
Ruby
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,
|
|
subject: "Sats received!",
|
|
body: "#{amt_sats} sats received in your Lightning wallet:\n> #{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
|