* Turn prefs into a flat hash structure, since nesting is not worth the trouble * Add a custom serializer class for prefs * Add a config file for defaults and merge set prefs with unset ones * Use booleans for "true" and "false", and integers where appropriate
47 lines
1.3 KiB
Ruby
47 lines
1.3 KiB
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])
|
|
notify = user.preferences[:lightning_notify_sats_received]
|
|
case notify
|
|
when "xmpp"
|
|
notify_xmpp(user.address, payload[:amount], payload[:memo])
|
|
when "email"
|
|
NotificationMailer.with(user: user, amount_sats: payload[:amount])
|
|
.lightning_sats_received.deliver_later
|
|
end
|
|
|
|
head :ok
|
|
end
|
|
|
|
private
|
|
|
|
# TODO refactor into mailer-like generic class/service
|
|
def notify_xmpp(address, amt_sats, memo)
|
|
payload = {
|
|
type: "normal",
|
|
from: "kosmos.org", # TODO domain config
|
|
to: address,
|
|
subject: "Sats received!",
|
|
body: "#{helpers.number_with_delimiter 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
|