From c58314a948ebcd37d295bf07732f24a2995ec484 Mon Sep 17 00:00:00 2001 From: Asara Date: Fri, 5 May 2023 00:37:27 -0400 Subject: [PATCH] Clean up requests, start working out request management --- go.mod | 5 +++-- go.sum | 6 ++++-- lnd/lnd.go | 25 ++++++++++++++++++------- nostr/nostr.go | 18 ++++++++++++++---- 4 files changed, 39 insertions(+), 15 deletions(-) diff --git a/go.mod b/go.mod index 8a3826e..858c08b 100644 --- a/go.mod +++ b/go.mod @@ -3,12 +3,12 @@ module git.minhas.io/asara/well-goknown go 1.19 require ( - github.com/davecgh/go-spew v1.1.1 github.com/lightninglabs/lndclient v0.16.0-10 github.com/lightningnetwork/lnd v0.16.0-beta - github.com/nbd-wtf/go-nostr v0.17.1 + github.com/nbd-wtf/go-nostr v0.17.3 github.com/redis/go-redis/v9 v9.0.4 github.com/rs/zerolog v1.15.0 + github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e ) require ( @@ -36,6 +36,7 @@ require ( github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/coreos/go-semver v0.3.0 // indirect github.com/coreos/go-systemd/v22 v22.3.2 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect github.com/decred/dcrd/crypto/blake256 v1.0.0 // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 // indirect github.com/decred/dcrd/lru v1.0.0 // indirect diff --git a/go.sum b/go.sum index ba3caef..8230a46 100644 --- a/go.sum +++ b/go.sum @@ -440,8 +440,8 @@ github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9 github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/nbd-wtf/go-nostr v0.17.1 h1:dRyNNf1rx5vGYi9AH1A/mcKKQg8ZSiY8uRUJGObXPPI= -github.com/nbd-wtf/go-nostr v0.17.1/go.mod h1:YCDHJtaFQE76d1ZkcUsTkz3dYNP+bldo5CIQwXPPcbk= +github.com/nbd-wtf/go-nostr v0.17.3 h1:OG/85OgjandmHfnVZmr/qsnMPbkVaIaJyXHMBI3ywIE= +github.com/nbd-wtf/go-nostr v0.17.3/go.mod h1:YCDHJtaFQE76d1ZkcUsTkz3dYNP+bldo5CIQwXPPcbk= github.com/nwaples/rardecode v1.1.0/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= github.com/nwaples/rardecode v1.1.2 h1:Cj0yZY6T1Zx1R7AhTbyGSALm44/Mmq+BAPc4B/p/d3M= github.com/nwaples/rardecode v1.1.2/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= @@ -507,6 +507,8 @@ github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6Mwd github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0 h1:ShrD1U9pZB12TX0cVy0DtePoCH97K8EtX+mg7ZARUtM= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e h1:MRM5ITcdelLK2j1vwZ3Je0FKVCfqOLp5zO6trqMLYs0= +github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e/go.mod h1:XV66xRDqSt+GTGFMVlhk3ULuV0y9ZmzeVGR4mloJI3M= github.com/soheilhy/cmux v0.1.5 h1:jjzc5WVemNEDTLwv9tlmemhC73tI08BNOIGwBOo10Js= github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= diff --git a/lnd/lnd.go b/lnd/lnd.go index 9a31a1d..dfe6180 100644 --- a/lnd/lnd.go +++ b/lnd/lnd.go @@ -7,15 +7,16 @@ import ( "errors" "fmt" "strconv" + "time" "git.minhas.io/asara/well-goknown/config" "git.minhas.io/asara/well-goknown/logger" - "github.com/davecgh/go-spew/spew" + "git.minhas.io/asara/well-goknown/redis" "github.com/lightninglabs/lndclient" "github.com/lightningnetwork/lnd/lnrpc" ) -func Request(rKey string, request []byte) (string, error) { +func Request(rKey string) (string, error) { l := logger.Get() ctx := context.TODO() // connect to lnd @@ -33,8 +34,9 @@ func Request(rKey string, request []byte) (string, error) { addrFee, err := strconv.ParseInt(config.GetConfig().NostrAddrFee, 10, 64) if err != nil { l.Fatal().Msg("nostr address fee not set properlly") - return "", errors.New("nostr address fee not set properly") + return "", errors.New("internal server error") } + info, err := lndCli.AddInvoice(ctx, &lnrpc.Invoice{ Memo: fmt.Sprintf("nostr addr %s", rKey), Expiry: 1 * 60, @@ -42,9 +44,18 @@ func Request(rKey string, request []byte) (string, error) { }) if err != nil { l.Fatal().Msg("unable to create lnd invoice") + return "", errors.New("internal server error") } - spew.Dump(hex.EncodeToString(info.RHash)) - spew.Dump(info.PaymentRequest) - spew.Dump(request) - return "x", nil + rHash := hex.EncodeToString(info.RHash) + paymentReq := info.PaymentRequest + + // write lnd request to redis + redisCli := redis.LndRedisConn.Client + err = redisCli.Set(ctx, rKey, fmt.Sprintf("%s:%s", rHash, paymentReq), 15*time.Minute).Err() + if err != nil { + l.Error().Msg("unable to connect to redis when writing lnd request") + return "", errors.New("unable to make the request, please try again") + } + + return paymentReq, nil } diff --git a/nostr/nostr.go b/nostr/nostr.go index 55aae21..db21b7c 100644 --- a/nostr/nostr.go +++ b/nostr/nostr.go @@ -8,11 +8,13 @@ import ( "fmt" "net/http" "strings" + "time" "git.minhas.io/asara/well-goknown/lnd" "git.minhas.io/asara/well-goknown/logger" "git.minhas.io/asara/well-goknown/redis" "github.com/nbd-wtf/go-nostr/nip19" + "github.com/skip2/go-qrcode" ) type nostrWellKnown struct { @@ -86,8 +88,7 @@ func RequestNostrAddr(w http.ResponseWriter, r *http.Request) { enc := b64.StdEncoding.EncodeToString([]byte(jsonUser)) // generate the payment request - // paymentReq, err := lnd.Request(rKey, jsonUser) - _, err = lnd.Request(rKey, jsonUser) + paymentReq, err := lnd.Request(rKey) if err != nil { w.WriteHeader(http.StatusServiceUnavailable) json.NewEncoder(w).Encode(&jsonErrorMessage{ @@ -95,11 +96,20 @@ func RequestNostrAddr(w http.ResponseWriter, r *http.Request) { }) return } - requestKey := getRkey("requested", r.FormValue("Name"), getHostname(r.Host)) - err = redisCli.Set(ctx, requestKey, enc, 0).Err() + + // generate qr png + png, err := qrcode.Encode(paymentReq, qrcode.Medium, 256) + + // write request to redis + err = redisCli.Set(ctx, rKey, enc, 15*time.Minute).Err() if err != nil { l.Error().Msg("unable to connect to redis") } + + // return qr code + w.Header().Set("Content-Type", "image/png") + w.WriteHeader(http.StatusOK) + w.Write(png) } }