Add nostr nip-05 registration with lnd invoices #1
4 changed files with 39 additions and 15 deletions
5
go.mod
5
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
|
||||
|
|
6
go.sum
6
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=
|
||||
|
|
25
lnd/lnd.go
25
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
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue