mirror of
https://github.com/believethehype/nostdress.git
synced 2026-07-05 15:38:10 -07:00
Download Nostr Profile picture to show in some wallets (non zaps)
This commit is contained in:
+50
-2
@@ -1,12 +1,18 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"image"
|
||||
"image/jpeg"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"github.com/nbd-wtf/go-nostr"
|
||||
"github.com/nfnt/resize"
|
||||
|
||||
"github.com/fiatjaf/go-lnurl"
|
||||
// "github.com/fiatjaf/makeinvoice"
|
||||
@@ -14,11 +20,52 @@ import (
|
||||
|
||||
func metaData(params *Params) lnurl.Metadata {
|
||||
|
||||
//addImageToMetaData(w.telegram, &metadata, username, user.Telegram)
|
||||
return lnurl.Metadata{
|
||||
metadata := lnurl.Metadata{
|
||||
Description: fmt.Sprintf("Pay to %s@%s", params.Name, params.Domain),
|
||||
LightningAddress: fmt.Sprintf("%s@%s", params.Name, params.Domain),
|
||||
}
|
||||
|
||||
NostrProfile, _ := GetNostrProfileMetaData(params.Npub)
|
||||
|
||||
addImageToMetaData(&metadata, NostrProfile.Picture)
|
||||
return metadata
|
||||
|
||||
}
|
||||
|
||||
// addImageMetaData add images an image to the LNURL metadata
|
||||
func addImageToMetaData(metadata *lnurl.Metadata, imageurl string) {
|
||||
|
||||
picture, _ := DownloadProfilePicture(imageurl)
|
||||
// if err != nil {
|
||||
// log.Debug().Str("Downloading profile picture", err.Error()).Msg("Error")
|
||||
// return
|
||||
// }
|
||||
metadata.Image.Ext = "jpeg"
|
||||
metadata.Image.DataURI = imageurl
|
||||
metadata.Image.Bytes = picture
|
||||
}
|
||||
|
||||
func DownloadProfilePicture(url string) ([]byte, error) {
|
||||
res, err := http.Get(url)
|
||||
|
||||
if err != nil {
|
||||
//log.Fatalf("http.Get -> %v", err)
|
||||
}
|
||||
data, err := ioutil.ReadAll(res.Body)
|
||||
if err != nil {
|
||||
// log.Fatalf("ioutil.ReadAll -> %v", err)
|
||||
}
|
||||
res.Body.Close()
|
||||
img, _, err := image.Decode(bytes.NewReader(data))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
// resize image
|
||||
img = resize.Thumbnail(160, 160, img, resize.Lanczos3)
|
||||
buf := new(bytes.Buffer)
|
||||
_ = jpeg.Encode(buf, img, nil)
|
||||
ioutil.WriteFile("test.jpg", buf.Bytes(), 0666)
|
||||
return buf.Bytes(), nil
|
||||
}
|
||||
|
||||
func makeInvoice(
|
||||
@@ -29,6 +76,7 @@ func makeInvoice(
|
||||
comment string,
|
||||
) (bolt11 string, err error) {
|
||||
// prepare params
|
||||
|
||||
var backend BackendParams
|
||||
switch params.Kind {
|
||||
case "sparko":
|
||||
|
||||
@@ -82,6 +82,50 @@ func handleNip05(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
}
|
||||
|
||||
func GetNostrProfileMetaData(npub string) (nostr.ProfileMetadata, error) {
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
|
||||
|
||||
var metadata *nostr.ProfileMetadata
|
||||
// connect to any relay
|
||||
url := "wss://relay.damus.io"
|
||||
relay, err := nostr.RelayConnect(ctx, url)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
// create filters
|
||||
var filters nostr.Filters
|
||||
if _, v, err := nip19.Decode(npub); err == nil {
|
||||
t := make(map[string][]string)
|
||||
t["p"] = []string{v.(string)}
|
||||
filters = []nostr.Filter{{
|
||||
Authors: []string{v.(string)},
|
||||
Kinds: []int{0},
|
||||
// limit = 3, get the three most recent notes
|
||||
Limit: 1,
|
||||
}}
|
||||
} else {
|
||||
return *metadata, err
|
||||
|
||||
}
|
||||
sub := relay.Subscribe(ctx, filters)
|
||||
evs := make([]nostr.Event, 0)
|
||||
|
||||
go func() {
|
||||
<-sub.EndOfStoredEvents
|
||||
cancel()
|
||||
}()
|
||||
|
||||
for ev := range sub.Events {
|
||||
|
||||
evs = append(evs, *ev)
|
||||
}
|
||||
metadata, err = nostr.ParseMetadata(evs[0])
|
||||
|
||||
return *metadata, err
|
||||
|
||||
}
|
||||
|
||||
func publishNostrEvent(ev nostr.Event, relays []string) {
|
||||
pk := s.NostrPrivateKey
|
||||
ev.Sign(pk)
|
||||
|
||||
Reference in New Issue
Block a user