mirror of
https://github.com/believethehype/nostdress.git
synced 2026-07-22 14:08:10 -07:00
refactor
refactored profile picture download function to support both jpeg & png disabled image download on invoice for now deleted unused file
This commit is contained in:
-40
@@ -1,40 +0,0 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/base64"
|
||||
"errors"
|
||||
"fmt"
|
||||
"image"
|
||||
"image/jpeg"
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"github.com/nfnt/resize"
|
||||
)
|
||||
|
||||
func base64ImageFromURL(url string) (string, error) {
|
||||
resp, err := http.Get(url)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
if resp.StatusCode >= 300 {
|
||||
return "", errors.New("image returned status " + strconv.Itoa(resp.StatusCode))
|
||||
}
|
||||
|
||||
img, _, err := image.Decode(resp.Body)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("failed to decode image from %s: %w", url, err)
|
||||
}
|
||||
|
||||
img = resize.Resize(160, 0, img, resize.NearestNeighbor)
|
||||
out := &bytes.Buffer{}
|
||||
err = jpeg.Encode(out, img, &jpeg.Options{60})
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("failed to encode image: %w", err)
|
||||
}
|
||||
|
||||
return base64.StdEncoding.EncodeToString(out.Bytes()), nil
|
||||
}
|
||||
+62
-29
@@ -2,10 +2,12 @@ package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/base64"
|
||||
"errors"
|
||||
"fmt"
|
||||
"image"
|
||||
"image/jpeg"
|
||||
"io/ioutil"
|
||||
"image/png"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"time"
|
||||
@@ -15,6 +17,11 @@ import (
|
||||
"github.com/fiatjaf/go-lnurl"
|
||||
)
|
||||
|
||||
const (
|
||||
thumbnailWidth = 160
|
||||
thumbnailHeight = 160
|
||||
)
|
||||
|
||||
func metaData(params *Params) lnurl.Metadata {
|
||||
|
||||
metadata := lnurl.Metadata{
|
||||
@@ -22,63 +29,89 @@ func metaData(params *Params) lnurl.Metadata {
|
||||
LightningAddress: fmt.Sprintf("%s@%s", params.Name, params.Domain),
|
||||
}
|
||||
|
||||
if params.Npub != "" && s.GetNostrProfile {
|
||||
/* if params.Npub != "" && s.GetNostrProfile {
|
||||
NostrProfile, err := GetNostrProfileMetaData(params.Npub)
|
||||
if err == nil {
|
||||
addImageToMetaData(&metadata, NostrProfile.Picture)
|
||||
}
|
||||
|
||||
}
|
||||
} */
|
||||
|
||||
return metadata
|
||||
|
||||
}
|
||||
|
||||
// addImageMetaData add images an image to the LNURL metadata
|
||||
// addImageToMetaData adds an image to the LNURL metadata
|
||||
func addImageToMetaData(metadata *lnurl.Metadata, imageurl string) {
|
||||
|
||||
// Download and resize profile picture
|
||||
picture, err := DownloadProfilePicture(imageurl)
|
||||
if err != nil {
|
||||
log.Debug().Str("Downloading profile picture", err.Error()).Msg("Error")
|
||||
return
|
||||
}
|
||||
metadata.Image.Ext = "jpeg" //filepath.Ext(imageurl)
|
||||
metadata.Image.DataURI = imageurl
|
||||
|
||||
// Determine image format
|
||||
contentType := http.DetectContentType(picture)
|
||||
var ext string
|
||||
if contentType == "image/jpeg" {
|
||||
ext = "jpeg"
|
||||
} else if contentType == "image/png" {
|
||||
ext = "png"
|
||||
} else {
|
||||
log.Debug().Str("Detecting image format", "unknown format").Msg("Error")
|
||||
return
|
||||
}
|
||||
|
||||
// Set image metadata in LNURL metadata
|
||||
metadata.Image.Ext = ext
|
||||
metadata.Image.DataURI = "data:" + contentType + ";base64," + base64.StdEncoding.EncodeToString(picture)
|
||||
metadata.Image.Bytes = picture
|
||||
}
|
||||
|
||||
func DownloadProfilePicture(url string) ([]byte, error) {
|
||||
res, err := http.Get(url)
|
||||
client := http.Client{
|
||||
Timeout: 5 * time.Second,
|
||||
}
|
||||
|
||||
res, err := client.Get(url)
|
||||
if err != nil {
|
||||
log.Debug().Str("http.Get ->", err.Error()).Msg("Error")
|
||||
return nil, err
|
||||
return nil, errors.New("failed to download image: " + err.Error())
|
||||
}
|
||||
defer res.Body.Close()
|
||||
|
||||
contentType := res.Header.Get("Content-Type")
|
||||
if contentType != "image/jpeg" && contentType != "image/png" {
|
||||
return nil, errors.New("unsupported image format")
|
||||
}
|
||||
|
||||
var img image.Image
|
||||
switch contentType {
|
||||
case "image/jpeg":
|
||||
img, err = jpeg.Decode(res.Body)
|
||||
case "image/png":
|
||||
img, err = png.Decode(res.Body)
|
||||
}
|
||||
data, err := ioutil.ReadAll(res.Body)
|
||||
if err != nil {
|
||||
log.Debug().Str("ioutil.ReadAll ->", err.Error()).Msg("Error")
|
||||
return nil, err
|
||||
return nil, errors.New("failed to decode image: " + err.Error())
|
||||
}
|
||||
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)
|
||||
|
||||
img = resize.Thumbnail(thumbnailWidth, thumbnailHeight, img, resize.Lanczos3)
|
||||
|
||||
buf := new(bytes.Buffer)
|
||||
_ = jpeg.Encode(buf, img, nil)
|
||||
//ioutil.WriteFile("test.jpg", buf.Bytes(), 0666)
|
||||
if contentType == "image/jpeg" {
|
||||
if err := jpeg.Encode(buf, img, nil); err != nil {
|
||||
return nil, errors.New("failed to encode image: " + err.Error())
|
||||
}
|
||||
} else if contentType == "image/png" {
|
||||
if err := png.Encode(buf, img); err != nil {
|
||||
return nil, errors.New("failed to encode image: " + err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
return buf.Bytes(), nil
|
||||
}
|
||||
|
||||
func makeInvoice(
|
||||
params *Params,
|
||||
msat int,
|
||||
pin *string,
|
||||
zapEventSerializedStr string,
|
||||
comment string,
|
||||
) (bolt11 string, err error) {
|
||||
func makeInvoice(params *Params, msat int, pin *string, zapEventSerializedStr string, comment string) (bolt11 string, err error) {
|
||||
// prepare params
|
||||
|
||||
var backend BackendParams
|
||||
|
||||
Reference in New Issue
Block a user