Offer lnurl-pay QR codes for download on the Lightning page
This commit is contained in:
parent
8eb5f093a4
commit
aedaabc7ba
3
Gemfile
3
Gemfile
@ -58,6 +58,9 @@ gem 'discourse_api'
|
|||||||
gem "sentry-ruby"
|
gem "sentry-ruby"
|
||||||
gem "sentry-rails"
|
gem "sentry-rails"
|
||||||
|
|
||||||
|
# Lightning
|
||||||
|
gem "lnurl"
|
||||||
|
|
||||||
group :development, :test do
|
group :development, :test do
|
||||||
# Use sqlite3 as the database for Active Record
|
# Use sqlite3 as the database for Active Record
|
||||||
gem 'sqlite3', '~> 1.4'
|
gem 'sqlite3', '~> 1.4'
|
||||||
|
@ -180,6 +180,8 @@ GEM
|
|||||||
listen (3.7.1)
|
listen (3.7.1)
|
||||||
rb-fsevent (~> 0.10, >= 0.10.3)
|
rb-fsevent (~> 0.10, >= 0.10.3)
|
||||||
rb-inotify (~> 0.9, >= 0.9.10)
|
rb-inotify (~> 0.9, >= 0.9.10)
|
||||||
|
lnurl (1.0.1)
|
||||||
|
bech32 (~> 1.1)
|
||||||
lockbox (1.1.0)
|
lockbox (1.1.0)
|
||||||
loofah (2.19.0)
|
loofah (2.19.0)
|
||||||
crass (~> 1.0.2)
|
crass (~> 1.0.2)
|
||||||
@ -409,6 +411,7 @@ DEPENDENCIES
|
|||||||
letter_opener
|
letter_opener
|
||||||
letter_opener_web
|
letter_opener_web
|
||||||
listen (~> 3.2)
|
listen (~> 3.2)
|
||||||
|
lnurl
|
||||||
lockbox
|
lockbox
|
||||||
net-ldap
|
net-ldap
|
||||||
pagy (~> 6.0, >= 6.0.2)
|
pagy (~> 6.0, >= 6.0.2)
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
require "rqrcode"
|
require "rqrcode"
|
||||||
|
require "lnurl"
|
||||||
|
|
||||||
class Services::LightningController < ApplicationController
|
class Services::LightningController < ApplicationController
|
||||||
before_action :authenticate_user!
|
before_action :authenticate_user!
|
||||||
@ -8,9 +9,55 @@ class Services::LightningController < ApplicationController
|
|||||||
|
|
||||||
def index
|
def index
|
||||||
@wallet_url = "lndhub://#{current_user.ln_account}:#{current_user.ln_password}@#{ENV['LNDHUB_PUBLIC_URL']}"
|
@wallet_url = "lndhub://#{current_user.ln_account}:#{current_user.ln_password}@#{ENV['LNDHUB_PUBLIC_URL']}"
|
||||||
|
initialize_lndhub_qr_code
|
||||||
|
end
|
||||||
|
|
||||||
qrcode = RQRCode::QRCode.new(@wallet_url)
|
def transactions
|
||||||
@svg = qrcode.as_svg(
|
@transactions = fetch_transactions
|
||||||
|
end
|
||||||
|
|
||||||
|
def qr_lnurlp
|
||||||
|
lnurlp_url = "https://kosmos.org/.well-known/lnurlp/#{current_user.cn}"
|
||||||
|
lnurlp_bech32 = Lnurl.new(lnurlp_url).to_bech32
|
||||||
|
qr_code = RQRCode::QRCode.new("lightning:" + lnurlp_bech32)
|
||||||
|
|
||||||
|
if params[:format] == "svg"
|
||||||
|
qr_svg = qr_code.as_svg(
|
||||||
|
color: "000",
|
||||||
|
shape_rendering: "crispEdges",
|
||||||
|
module_size: 6,
|
||||||
|
standalone: true,
|
||||||
|
use_path: true,
|
||||||
|
svg_attributes: {
|
||||||
|
class: 'inline-block'
|
||||||
|
}
|
||||||
|
)
|
||||||
|
send_data(
|
||||||
|
qr_svg,
|
||||||
|
filename: "bitcoin-lightning-#{current_user.address}.svg",
|
||||||
|
type: "image/svg+xml"
|
||||||
|
)
|
||||||
|
elsif params[:format] == "png"
|
||||||
|
qr_png = qr_code.as_png(
|
||||||
|
fill: "white",
|
||||||
|
color: "black",
|
||||||
|
size: 1024,
|
||||||
|
)
|
||||||
|
send_data(
|
||||||
|
qr_png,
|
||||||
|
filename: "bitcoin-lightning-#{current_user.address}.png",
|
||||||
|
type: "image/png"
|
||||||
|
)
|
||||||
|
else
|
||||||
|
http_status :not_found
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def initialize_lndhub_qr_code
|
||||||
|
qr_code = RQRCode::QRCode.new(@wallet_url)
|
||||||
|
@lndhub_qr_svg = qr_code.as_svg(
|
||||||
color: "000",
|
color: "000",
|
||||||
shape_rendering: "crispEdges",
|
shape_rendering: "crispEdges",
|
||||||
module_size: 6,
|
module_size: 6,
|
||||||
@ -22,12 +69,6 @@ class Services::LightningController < ApplicationController
|
|||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
def transactions
|
|
||||||
@transactions = fetch_transactions
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def authenticate_with_lndhub(options={})
|
def authenticate_with_lndhub(options={})
|
||||||
if session[:ln_auth_token].present? && !options[:force_reauth]
|
if session[:ln_auth_token].present? && !options[:force_reauth]
|
||||||
@ln_auth_token = session[:ln_auth_token]
|
@ln_auth_token = session[:ln_auth_token]
|
||||||
|
@ -39,7 +39,7 @@
|
|||||||
<button id="hide-setup-code" class="hidden btn-md btn-blue w-full sm:w-auto">Hide setup QR code</button>
|
<button id="hide-setup-code" class="hidden btn-md btn-blue w-full sm:w-auto">Hide setup QR code</button>
|
||||||
</p>
|
</p>
|
||||||
<p id="setup-code" class="hidden my-10 w-full text-center">
|
<p id="setup-code" class="hidden my-10 w-full text-center">
|
||||||
<%= raw @svg %>
|
<%= raw @lndhub_qr_svg %>
|
||||||
</p>
|
</p>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
@ -88,6 +88,24 @@
|
|||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
<section class="mb-12">
|
||||||
|
<h3>QR Code for Donations/Tips</h3>
|
||||||
|
<p>
|
||||||
|
You can print out or publish a QR code for people to scan with their
|
||||||
|
wallet apps, so they can send you sats without a direct personal
|
||||||
|
interaction (for example at a concert, or on your website).
|
||||||
|
</p>
|
||||||
|
<p class="my-6 text-center md:text-left">
|
||||||
|
<%= link_to "Download SVG file",
|
||||||
|
qr_lnurlp_services_lightning_index_path(format: "svg"),
|
||||||
|
class: "btn-md btn-blue w-full sm:w-auto"%>
|
||||||
|
<span class="mx-2 my-2 md:my-0 block md:inline">or</span>
|
||||||
|
<%= link_to "Download PNG file",
|
||||||
|
qr_lnurlp_services_lightning_index_path(format: "png"),
|
||||||
|
class: "btn-md btn-blue w-full sm:w-auto"%>
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
|
@ -24,6 +24,7 @@ Rails.application.routes.draw do
|
|||||||
resources :lightning, only: [:index] do
|
resources :lightning, only: [:index] do
|
||||||
collection do
|
collection do
|
||||||
get 'transactions'
|
get 'transactions'
|
||||||
|
get 'qr_lnurlp'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user