Only support primary domain for Lightning Address
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
Release Drafter / Update release notes draft (pull_request) Successful in 3s

Part of the process of removing support for serving multiple domains
from a single akkounts instance.

Also puts the Lightning Address discovery routes under the .well-known
path. Combined, these changes simplify reverse-proxying to the
.well-known endpoints.
This commit is contained in:
2024-01-26 16:03:57 +02:00
parent eaf41e0835
commit a628a03f84
3 changed files with 28 additions and 33 deletions

View File

@@ -2,59 +2,59 @@ require 'rails_helper'
RSpec.describe "/lnurlpay", type: :request do
context "Non-existent user/address" do
describe "GET /lnurlpay/:address" do
context "Non-existent user" do
describe "GET /.well-known/lnurlpay/:username" do
it "returns a 404" do
get lightning_address_path(address: "csw@kosmos.org")
get lightning_address_path(username: "csw")
expect(response).to have_http_status(:not_found)
end
end
describe "GET /lnurlpay/:address/invoice" do
describe "GET /lnurlpay/:username/invoice" do
it "returns a 404" do
get lnurlpay_invoice_path(address: "csw@kosmos.org", params: { amount: 5000 })
get lnurlpay_invoice_path(username: "csw", params: { amount: 5000 })
expect(response).to have_http_status(:not_found)
end
end
describe "GET /keysend/:address/" do
describe "GET /.well-known/keysend/:username/" do
it "returns a 404" do
get lightning_address_keysend_path(address: "csw@kosmos.org")
get lightning_address_keysend_path(username: "csw")
expect(response).to have_http_status(:not_found)
end
end
end
context "Valid user/address" do
context "Valid user" do
let(:user) { create :user, cn: 'satoshi', ou: 'kosmos.org', ln_account: 'abcdefg123456' }
before do
login_as user, :scope => :user
end
describe "GET /lnurlpay/:address" do
describe "GET /.well-known/lnurlpay/:username" do
it "returns a formatted Lightning Address response" do
get lightning_address_path(address: "satoshi@kosmos.org")
get lightning_address_path(username: "satoshi")
expect(response).to have_http_status(:ok)
res = JSON.parse(response.body)
expect(res["status"]).to eq('OK')
expect(res["tag"]).to eq('payRequest')
expect(res["callback"]).to match(lnurlpay_invoice_path('satoshi@kosmos.org'))
expect(res["callback"]).to match(lnurlpay_invoice_path('satoshi'))
expect(res["minSendable"]).to be_a(Integer)
expect(res["maxSendable"]).to be_a(Integer)
expect(res["commentAllowed"]).to be_a(Integer)
end
end
describe "GET /lnurlpay/:address/invoice" do
describe "GET /lnurlpay/:username/invoice" do
before do
allow_any_instance_of(User).to receive(:ln_create_invoice).and_return("lnbc50u1p3lwgknpp52g78gqya5euvzjc53fc6hkmlm2rfjhcd305tcmc0g9gaestav48sdq4gdhkven9v5sx6mmwv4ujzcqzpgxqyz5vqsp5skkz4jlqr6tkvv2g9739ygrjupc4rkqd94mc7dfpj3pgx3f6w7qs9qyyssq7mf3fzcuxlmkr9nqatcch3u8uf4gjyawe052tejz8e9fqxu4pncqk3qklt8g6ylpshg09xyjquyrgtc72vcw5cp0dzcf406apyua7dgpnfn7an")
end
it "returns a formatted lnurlpay response" do
get lnurlpay_invoice_path(address: "satoshi@kosmos.org", params: {
get lnurlpay_invoice_path(username: "satoshi", params: {
amount: 50000, comment: "Coffee time!"
})
@@ -69,7 +69,7 @@ RSpec.describe "/lnurlpay", type: :request do
context "amount too low" do
it "returns an error" do
get lnurlpay_invoice_path(address: "satoshi@kosmos.org", params: {
get lnurlpay_invoice_path(username: "satoshi", params: {
amount: 5000, comment: "Coffee time!"
})
expect(response).to have_http_status(:ok)
@@ -81,7 +81,7 @@ RSpec.describe "/lnurlpay", type: :request do
context "comment too long" do
it "returns an error" do
get lnurlpay_invoice_path(address: "satoshi@kosmos.org", params: {
get lnurlpay_invoice_path(username: "satoshi", params: {
amount: 5000000, comment: "Coffee time is the best time, so here's some money for you to get some. May I suggest to sample some Pacamara beans from El Salvador?"
})
expect(response).to have_http_status(:ok)
@@ -92,9 +92,9 @@ RSpec.describe "/lnurlpay", type: :request do
end
end
describe "GET /keysend/:address/" do
describe "GET /.well-known/keysend/:username/" do
it "returns a formatted Lightning Address keysend response" do
get lightning_address_keysend_path(address: "satoshi@kosmos.org")
get lightning_address_keysend_path(username: "satoshi")
expect(response).to have_http_status(:ok)