From fec31b2bd16cb85ff082564b91652caa6a78196e Mon Sep 17 00:00:00 2001 From: Michael Bumann Date: Fri, 27 Aug 2021 14:35:09 +0200 Subject: [PATCH 1/4] Add support to connect to TOR nodes This requires tor to be installed/running on the system --- go.mod | 1 + go.sum | 7 +++++++ ln/lnd.go | 18 ++++++++++++++++++ 3 files changed, 26 insertions(+) diff --git a/go.mod b/go.mod index 24724a1..11f1eb7 100644 --- a/go.mod +++ b/go.mod @@ -7,6 +7,7 @@ go 1.15 replace go.etcd.io/etcd => go.etcd.io/etcd v0.5.0-alpha.5.0.20201125193152-8a03d2e9614b require ( github.com/GeertJohan/go.rice v1.0.2 + github.com/cretz/bine v0.2.0 github.com/didip/tollbooth/v6 v6.1.1 github.com/knadh/koanf v1.2.1 github.com/labstack/echo/v4 v4.5.0 diff --git a/go.sum b/go.sum index d37f763..e4ce30a 100644 --- a/go.sum +++ b/go.sum @@ -135,6 +135,8 @@ github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f h1:lBNOc5arjvs8E5mO2tbp github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/creack/pty v1.1.7 h1:6pwm8kMQKCmgUg0ZHTm5+/YvRK0s3THD/28+T6/kk4A= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= +github.com/cretz/bine v0.2.0 h1:8GiDRGlTgz+o8H9DSnsl+5MeBK4HsExxgl6WgzOCuZo= +github.com/cretz/bine v0.2.0/go.mod h1:WU4o9QR9wWp8AVKtTM1XD5vUHkEqnf2vVSo6dBqbetI= github.com/daaku/go.zipexe v1.0.0 h1:VSOgZtH418pH9L16hC/JrgSNJbbAL26pj7lmD1+CGdY= github.com/daaku/go.zipexe v1.0.0/go.mod h1:z8IiR6TsVLEYKwXAoE/I+8ys/sDkgTzSL0CLnGVd57E= github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -568,6 +570,8 @@ golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a h1:vclmkQCjlDX5OydZ9wv8rB golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2 h1:It14KIkyBFYkHkwZ7k45minvA9aorojkyjGk9KJ5B/w= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a h1:kr2P4QFmQr29mSLA43kwrOcgcReGTfbE9N577tCTuBc= +golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= golang.org/x/exp v0.0.0-20190121172915-509febef88a4 h1:c2HOrn5iMezYjSlGPncknSEr/8x5LELb/ilJbXi9DEA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -599,6 +603,8 @@ golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4 h1:4nGaVu0QrbjT/AK2PRLuQfQuh6DJve+pELhqTdAj3x0= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210525063256-abc453219eb5 h1:wjuX4b5yYQnEQHzd+CBcrcC6OVR2J1CN6mUy0oSxIPo= +golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -636,6 +642,7 @@ golang.org/x/sys v0.0.0-20200826173525-f9321e4c35a6/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210426080607-c94f62235c83 h1:kHSDPqCtsHZOg0nVylfTo20DDhE9gG4Y0jn7hKQ0QAM= golang.org/x/sys v0.0.0-20210426080607-c94f62235c83/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E= diff --git a/ln/lnd.go b/ln/lnd.go index 0263d7a..663d2b2 100644 --- a/ln/lnd.go +++ b/ln/lnd.go @@ -7,12 +7,15 @@ import ( "fmt" "io/ioutil" "log" + "net" "os" + "strings" "github.com/lightningnetwork/lnd/lnrpc" "github.com/lightningnetwork/lnd/macaroons" "gopkg.in/macaroon.v2" + "github.com/cretz/bine/tor" "google.golang.org/grpc" "google.golang.org/grpc/credentials" ) @@ -132,6 +135,21 @@ func NewLNDclient(lndOptions LNDoptions) (LNDclient, error) { grpc.WithTransportCredentials(creds), } + if strings.Contains(lndOptions.Address, ".onion") { + // Start Tor + t, err := tor.Start(nil, nil) + if err != nil { + return result, err + } + torDialer, err := t.Dialer(context.Background(), nil) + if err != nil { + return result, err + } + opts = append(opts, grpc.WithContextDialer(func(ctx context.Context, addr string) (net.Conn, error) { + return torDialer.DialContext(ctx, "tcp", addr) + })) + } + var macaroonData []byte if lndOptions.MacaroonHex != "" { macBytes, err := hex.DecodeString(lndOptions.MacaroonHex) From 91c62ed7ed63cc7104e31fe5d33c007e60bb0d94 Mon Sep 17 00:00:00 2001 From: Michael Bumann Date: Fri, 27 Aug 2021 15:55:51 +0200 Subject: [PATCH 2/4] Add Tor readme --- README.md | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index fdc2b91..8adeb1d 100644 --- a/README.md +++ b/README.md @@ -4,10 +4,10 @@ LnMe is a personal Bitcoin Lightning payment website and payment widget. ![demo](./lnme-demo.gif) -It is a small service written in Go that connects to a [lnd node](https://github.com/lightningnetwork/lnd/blob/master/docs/INSTALL.md) and exposes a simple HTTP JSON API to create and monitor invoices. +It is a small service written in Go that connects to a [lnd node](https://github.com/lightningnetwork/lnd/blob/master/docs/INSTALL.md) and exposes a simple HTTP JSON API to create and monitor invoices. It comes with a configurable personal payment website and offers a JavaScript widget to integrate in existing websites. -If [webln](https://github.com/wbobeirne/webln) is available the widget automatically use webln to request the payment; +If [webln](https://github.com/wbobeirne/webln) is available the widget automatically use webln to request the payment; otherwise an overlay will be shown with the payment request and a QR code. ## Motivation @@ -19,7 +19,7 @@ BTCPay Server is too big and hard to run for that and I do not need most of its ## Installation -LnMe connects to your [LND node](https://github.com/lightningnetwork/lnd/blob/master/docs/INSTALL.md), so a running LND node is required. +LnMe connects to your [LND node](https://github.com/lightningnetwork/lnd/blob/master/docs/INSTALL.md), so a running LND node is required. LnMe can easily run next to LND on the same system. 1. Download the latest [release](https://github.com/bumi/lnme/releases) @@ -85,11 +85,16 @@ All environment variables must be prefixed by `LNME_` use `_` instead of `-` $ LNME_LND_ADDRESS=127.0.0.1:10005 lnme +### TOR + +LnMe can connect to your lightning node through [Tor](https://www.torproject.org/). You need to have Tor installed on your system and then simply provide your LND `.onion` address (don't forget to specify the port). + + ### Deployment It is the easiest to run LnMe on the same node as LND. But you can run it anywhere as long as your LND node is accessible. -#### Heroku +#### Heroku One click deployment with Heroku: [![Deploy on Heroku](https://www.herokucdn.com/deploy/button.svg)](https://heroku.com/deploy?template=https://github.com/bumi/lnme) From 8ff22327c9f4909ba285931ef54e66ef0bd0f016 Mon Sep 17 00:00:00 2001 From: Michael Bumann Date: Mon, 30 Aug 2021 09:59:17 +0200 Subject: [PATCH 3/4] Update README.md --- README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/README.md b/README.md index 82207ea..8cd5dd1 100644 --- a/README.md +++ b/README.md @@ -10,12 +10,22 @@ LnMe focusses on simplicity and ease of deployment. It connects to an existing l LnMe is one [simple executable](https://github.com/bumi/lnme/releases) file that can be deployed anywhere with no dependencies. (on your own node or for example with [one click on Heroku](#heroku)) +## Features + +- [x] Embeded payment page - customizable (see demo) +- [x] [Lightning Address](https://lightningaddress.com/) support +- [x] WebLN integration - if [WebLN](https://webln.dev/) is not available a QRcode and the invoice will be shown +- [x] [JavaScript widget](#javascript-widget-integration) for existing websites +- [x] [Invoice API](https://github.com/bumi/lnme/wiki/API) - simple REST API to create LN invoices from existing JS code +- [ ] [LNURL-pay](https://github.com/fiatjaf/lnurl-rfc/blob/luds/06.md) support ## Installation LnMe connects to your [LND node](https://github.com/lightningnetwork/lnd/blob/master/docs/INSTALL.md), so a running LND node is required. LnMe can easily run next to LND on the same system or any other hosting provider. +There are no other dependencies. Simply download the binary and run it! + 1. Download the latest [release](https://github.com/bumi/lnme/releases) 2. Run `lnme` 3. Done. From 1fff67684a241761c7fe8e90b3625880683b3ec2 Mon Sep 17 00:00:00 2001 From: Michael Bumann Date: Mon, 30 Aug 2021 10:00:23 +0200 Subject: [PATCH 4/4] Igrnore tor data-dir --- .gitignore | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 26486f3..74159c9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ vendor -config.toml \ No newline at end of file +config.toml + +data-dir* \ No newline at end of file