diff --git a/app/controllers/lnurlpay_controller.rb b/app/controllers/lnurlpay_controller.rb index 1708903..35739ea 100644 --- a/app/controllers/lnurlpay_controller.rb +++ b/app/controllers/lnurlpay_controller.rb @@ -95,11 +95,13 @@ class LnurlpayController < ApplicationController memo = "To #{address}" memo = "#{memo}: \"#{comment}\"" if comment.present? - payment_request = @user.ln_create_invoice({ - amount: amount, # sats - memo: memo, - description_hash: Digest::SHA2.hexdigest(metadata(address)), - }) + payment_request = LndhubManager::CreateUserInvoice.call( + user: @user, payload: { + amount: amount, # sats + memo: memo, + description_hash: Digest::SHA2.hexdigest(metadata(address)), + } + ) render json: { status: "OK", @@ -133,15 +135,14 @@ class LnurlpayController < ApplicationController return end - # TODO - # raise zap_metadata(event).inspect - - payment_request = @user.ln_create_invoice({ - amount: amount, # sats - # TODO should be npub instead of address? - memo: "Zapped #{@user.address} on Nostr", # TODO include event ID if given - description_hash: Digest::SHA2.hexdigest(zap_metadata(event)), - }) + payment_request = LndhubManager::CreateUserInvoice.call( + user: @user, payload: { + amount: amount, # sats + # TODO should be npub instead of address? + memo: "Zapped #{@user.address} on Nostr", # TODO include event ID if given + description_hash: Digest::SHA2.hexdigest(zap_metadata(event)), + } + ) render json: { status: "OK", pr: payment_request } end diff --git a/app/models/user.rb b/app/models/user.rb index 735d7e0..1a181dd 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -143,12 +143,6 @@ class User < ApplicationRecord enable_service Setting.default_services end - def ln_create_invoice(payload) - lndhub = Lndhub.new - lndhub.authenticate self - lndhub.addinvoice payload - end - def dn return @dn if defined?(@dn) @dn = Devise::LDAP::Adapter.get_dn(self.cn) diff --git a/app/services/lndhub_manager/create_user_invoice.rb b/app/services/lndhub_manager/create_user_invoice.rb new file mode 100644 index 0000000..d0728a0 --- /dev/null +++ b/app/services/lndhub_manager/create_user_invoice.rb @@ -0,0 +1,13 @@ +module LndhubManager + class CreateUserInvoice < Lndhub + def initialize(user:, payload:) + @user = user + @payload = payload + end + + def call + authenticate @user + addinvoice @payload + end + end +end diff --git a/spec/requests/lnurlpay_spec.rb b/spec/requests/lnurlpay_spec.rb index 707b711..1727513 100644 --- a/spec/requests/lnurlpay_spec.rb +++ b/spec/requests/lnurlpay_spec.rb @@ -49,7 +49,8 @@ RSpec.describe "/lnurlpay", type: :request do describe "GET /lnurlpay/:username/invoice" do before do - allow_any_instance_of(User).to receive(:ln_create_invoice).and_return("lnbc50u1p3lwgknpp52g78gqya5euvzjc53fc6hkmlm2rfjhcd305tcmc0g9gaestav48sdq4gdhkven9v5sx6mmwv4ujzcqzpgxqyz5vqsp5skkz4jlqr6tkvv2g9739ygrjupc4rkqd94mc7dfpj3pgx3f6w7qs9qyyssq7mf3fzcuxlmkr9nqatcch3u8uf4gjyawe052tejz8e9fqxu4pncqk3qklt8g6ylpshg09xyjquyrgtc72vcw5cp0dzcf406apyua7dgpnfn7an") + allow(LndhubManager::CreateUserInvoice).to receive(:call) + .and_return("lnbc50u1p3lwgknpp52g78gqya5euvzjc53fc6hkmlm2rfjhcd305tcmc0g9gaestav48sdq4gdhkven9v5sx6mmwv4ujzcqzpgxqyz5vqsp5skkz4jlqr6tkvv2g9739ygrjupc4rkqd94mc7dfpj3pgx3f6w7qs9qyyssq7mf3fzcuxlmkr9nqatcch3u8uf4gjyawe052tejz8e9fqxu4pncqk3qklt8g6ylpshg09xyjquyrgtc72vcw5cp0dzcf406apyua7dgpnfn7an") end it "returns a formatted lnurlpay response" do @@ -123,12 +124,12 @@ RSpec.describe "/lnurlpay", type: :request do } it "returns an invoice" do - expect_any_instance_of(User).to receive(:ln_create_invoice) - .with( + expect(LndhubManager::CreateUserInvoice).to receive(:call) + .with(user: user, payload: { amount: 2100, memo: "Zapped satoshi@kosmos.org on Nostr", description_hash: "540279cd9da15279c8299d6d9ff1ab2a79eb259ee218adf3de393e1abe723077" - ) + }) .and_return("lnbc50u1p3lwgknpp52g78gqya5euvzjc53fc6hkmlm2rfjhcd305tcmc0g9gaestav48sdq4gdhkven9v5sx6mmwv4ujzcqzpgxqyz5vqsp5skkz4jlqr6tkvv2g9739ygrjupc4rkqd94mc7dfpj3pgx3f6w7qs9qyyssq7mf3fzcuxlmkr9nqatcch3u8uf4gjyawe052tejz8e9fqxu4pncqk3qklt8g6ylpshg09xyjquyrgtc72vcw5cp0dzcf406apyua7dgpnfn7an") get lnurlpay_invoice_path(username: "satoshi", params: {