From 025261d595d54036205caa2b4ac459f51e644455 Mon Sep 17 00:00:00 2001 From: callebtc <93376500+callebtc@users.noreply.github.com> Date: Mon, 29 Aug 2022 00:47:11 +0200 Subject: [PATCH] fix amount parser --- internal/lnurl/lnurl.go | 20 +++++++++++++------- internal/telegram/amounts.go | 2 ++ 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/internal/lnurl/lnurl.go b/internal/lnurl/lnurl.go index 2701a6c..86dd448 100644 --- a/internal/lnurl/lnurl.go +++ b/internal/lnurl/lnurl.go @@ -81,12 +81,18 @@ func (w Lnurl) Handle(writer http.ResponseWriter, request *http.Request) { api.NotFoundHandler(writer, fmt.Errorf("[handleLnUrl] Form value 'amount' is not set")) return } - amount, err := telegram.GetAmount(stringAmount) - if err != nil { - api.NotFoundHandler(writer, fmt.Errorf("[handleLnUrl] Couldn't cast amount to int: %v", err)) - return + + var amount int64 + if amount, err = strconv.ParseInt(stringAmount, 10, 64); err != nil { + // if the value wasn't a clean msat denomination, parse it + amount, err = telegram.GetAmount(stringAmount) + if err != nil { + api.NotFoundHandler(writer, fmt.Errorf("[handleLnUrl] Couldn't cast amount to int: %v", err)) + return + } + // GetAmount returns sat, we need msat + amount *= 1000 } - amount = amount * 1000 // msat comment := request.FormValue("comment") if len(comment) > CommentAllowed { @@ -100,8 +106,8 @@ func (w Lnurl) Handle(writer http.ResponseWriter, request *http.Request) { err = json.Unmarshal([]byte(payerdata), &payerData) if err != nil { // api.NotFoundHandler(writer, fmt.Errorf("[handleLnUrl] Couldn't parse payerdata: %v", err)) - fmt.Errorf("[handleLnUrl] Couldn't parse payerdata: %v", err) - fmt.Errorf("[handleLnUrl] payerdata: %v", payerdata) + log.Errorf("[handleLnUrl] Couldn't parse payerdata: %v", err) + // log.Errorf("[handleLnUrl] payerdata: %v", payerdata) } response, err = w.serveLNURLpSecond(username, int64(amount), comment, payerData) diff --git a/internal/telegram/amounts.go b/internal/telegram/amounts.go index 0ecc3e2..5b45816 100644 --- a/internal/telegram/amounts.go +++ b/internal/telegram/amounts.go @@ -39,6 +39,8 @@ func decodeAmountFromCommand(input string) (amount int64, err error) { return amount, err } +// GetAmount parses an amount from a string like 1.2k or 3.50€ +// and returns the value in satoshis func GetAmount(input string) (amount int64, err error) { // convert something like 1.2k into 1200 if strings.HasSuffix(strings.ToLower(input), "k") {