You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
bit4sat/api/handlers.go

123 lines
2.6 KiB
Go

package api
import (
"fmt"
"log"
"net/http"
"git.sp4ke.com/sp4ke/bit4sat/db"
"git.sp4ke.com/sp4ke/bit4sat/ln"
"git.sp4ke.com/sp4ke/bit4sat/storage"
"git.sp4ke.com/sp4ke/bit4sat/utils"
"github.com/gin-contrib/sessions"
"github.com/gin-gonic/gin"
"github.com/mediocregopher/radix/v3"
)
func sessionHandler(c *gin.Context) {
session := sessions.Default(c)
lastUp := session.Get(storage.SessLastUploadName)
if lastUp != nil {
// Get upload status
key := fmt.Sprintf("upload_status_%s", lastUp.(string))
var upStatus storage.UpStatus
err := db.DB.Redis.Do(radix.FlatCmd(&upStatus, "GET", key))
if err != nil {
utils.JSONErrPriv(c, http.StatusInternalServerError,
fmt.Errorf("error finding upload status %s", lastUp))
fmt.Println(err)
return
}
invoice, err := storage.GetUploadInvoice(lastUp.(string))
if err != nil {
utils.JSONErrPriv(c, http.StatusInternalServerError, err)
return
}
if invoice.Id != "" {
c.JSON(http.StatusOK, gin.H{
"uploadId": lastUp,
"status": upStatus,
"invoice": invoice,
})
return
}
}
c.JSON(http.StatusOK, gin.H{
"uploadId": 0,
})
return
}
func invoiceCbHandler(c *gin.Context) {
invoice := ln.Invoice{}
//dec := json.Decoder(c.Request.Body)
if err := c.ShouldBindJSON(&invoice); err != nil {
log.Println(err)
utils.JSONErr(c, http.StatusNotAcceptable,
"callback: could not parse request from charge api")
return
}
log.Printf("received invoice paid from ln charge\n%s", invoice)
c.Status(http.StatusOK)
// get upload id related to invoice
var uploadId string
invoiceUploadKey := fmt.Sprintf("invoice_%s_upload", invoice.Id)
err := db.DB.Redis.Do(radix.FlatCmd(&uploadId, "GET", invoiceUploadKey))
if err != nil {
panic(err)
}
if uploadId == "" {
log.Printf("cannot find uploadId for invoice %s", invoice)
return
}
invoice.UploadId = uploadId
// Invoice paid !!!!
// Set upload status to paid
err = storage.SetUploadStatus(invoice.UploadId, storage.UpPaid)
if err != nil {
panic(err)
}
//
// Update Upload Invoice
err = storage.SetUploadInvoice(invoice.UploadId, &invoice)
if err != nil {
panic(err)
}
// publish invoice was updated to upload_id_paid channel
//msg := bus.Message{}
//msg.Type = bus.PaymentReceived
//msg.UploadId = invoice.UploadId
//msg.Data = gin.H{
//"invoice": invoice,
//}
//msgJson, err := json.Marshal(msg)
//if err != nil {
//panic(err)
//}
//log.Printf("Notifying upload paid %s", invoice.UploadId)
//key := fmt.Sprintf("%s_%s", bus.UploadUpdateChannelPrefix,
//invoice.UploadId)
//err = db.DB.Redis.Do(radix.FlatCmd(nil, "PUBLISH",
//key, msgJson))
return
}