diff --git a/assets/lntip.js b/assets/lntip.js index 379d44f..09137d5 100644 --- a/assets/lntip.js +++ b/assets/lntip.js @@ -69,17 +69,13 @@ LnTip.prototype.stopWatchingPayment = function () { } LnTip.prototype.payWithWebln = function () { - console.log(this.invoice) if (!webln.isEnabled) { webln.enable().then((weblnResponse) => { - console.log(this.invoice.PaymentRequest) return webln.sendPayment({ paymentRequest: this.invoice.PaymentRequest }) }).catch((e) => { - console.log(e); this.requestPayment(); }) } else { - console.log(this.invoice.PaymentRequest) return webln.sendPayment({ paymentRequest: this.invoice.PaymentRequest }) } } @@ -110,8 +106,16 @@ LnTip.prototype.requestPayment = function () { } LnTip.prototype.getInvoice = function () { - return this._request(`${this.host}/payme?memo=${this.memo}&amount=${this.amount}`) - .then((invoice) => { + var args = { + method: 'POST', + mode: 'cors', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ memo: this.memo, amount: this.amount }) + }; + return this._request( + `${this.host}/invoice`, + args + ).then((invoice) => { this.invoice = invoice; this.watchPayment(); @@ -123,8 +127,8 @@ LnTip.prototype.getInvoice = function () { }) } -LnTip.prototype._request = function(url) { - return fetch(url).then((response) => { +LnTip.prototype._request = function(url, args) { + return fetch(url, args).then((response) => { return response.json(); }) } diff --git a/invoices.go b/invoices.go index 8389706..f8a2907 100644 --- a/invoices.go +++ b/invoices.go @@ -8,15 +8,20 @@ import ( "log" "net/http" "os" - "strconv" ) var stdOutLogger = log.New(os.Stdout, "", log.LstdFlags) +type Invoice struct { + Amount int64 `json:"amount"` + Memo string `json:"memo"` +} + func main() { address := flag.String("address", "localhost:10009", "The host and port of the ln gRPC server") certFile := flag.String("cert", "tls.cert", "Path to the lnd tls.cert file") macaroonFile := flag.String("macaroon", "invoice.macaroon", "Path to the lnd macaroon file") + bind := flag.String("bind", ":1323", "Host and port to bind on") flag.Parse() @@ -25,7 +30,7 @@ func main() { e.Use(middleware.CORS()) e.Use(middleware.Recover()) - lndOptions := ln.LNDoptions{ + lndOptions := ln.LNDoptions{ Address: *address, CertFile: *certFile, MacaroonFile: *macaroonFile, @@ -35,12 +40,15 @@ func main() { panic(err) } - e.GET("/payme", func(c echo.Context) error { - memo := c.FormValue("memo") - amount, _ := strconv.ParseInt(c.FormValue("amount"), 10, 64) - invoice, err := lnClient.GenerateInvoice(amount, memo) + e.POST("/invoice", func(c echo.Context) error { + i := new(Invoice) + if err := c.Bind(i); err != nil { + return c.JSON(http.StatusBadRequest, "bad request") + } + + invoice, err := lnClient.GenerateInvoice(i.Amount, i.Memo) if err != nil { - return c.JSON(http.StatusInternalServerError, "error") + return c.JSON(http.StatusInternalServerError, "invoice creation error") } return c.JSON(http.StatusOK, invoice) @@ -52,5 +60,5 @@ func main() { return c.JSON(http.StatusOK, invoice) }) - e.Logger.Fatal(e.Start(":1323")) + e.Logger.Fatal(e.Start(*bind)) } diff --git a/ln/lnd.go b/ln/lnd.go index 2989ae8..b75d4d4 100644 --- a/ln/lnd.go +++ b/ln/lnd.go @@ -36,12 +36,11 @@ type LNDclient struct { func (c LNDclient) GenerateInvoice(amount int64, memo string) (Invoice, error) { result := Invoice{} - // Create the request and send it + stdOutLogger.Printf("Creating invoice: memo=%s amount=%v ", memo, amount) invoice := lnrpc.Invoice{ Memo: memo, Value: amount, } - stdOutLogger.Printf("Creating invoice: %s", memo) res, err := c.lndClient.AddInvoice(c.ctx, &invoice) if err != nil { return result, err @@ -63,7 +62,7 @@ func (c LNDclient) CheckInvoice(id string) (bool, error) { return false, err } - stdOutLogger.Printf("Lookup invoice with hash %v\n", id) + stdOutLogger.Printf("Lookup invoice: hash=%s\n", id) // Get the invoice for that hash paymentHash := lnrpc.PaymentHash{