Add a new internal api call "getboltcard"

This commit is contained in:
Chloe Jung 2023-02-23 16:29:31 +13:00
parent 566f8a7b8c
commit 90f7f7a64b
3 changed files with 96 additions and 3 deletions

View file

@ -4,8 +4,9 @@ import (
"database/sql" "database/sql"
"errors" "errors"
"fmt" "fmt"
_ "github.com/lib/pq"
"os" "os"
_ "github.com/lib/pq"
) )
type Card struct { type Card struct {
@ -371,6 +372,37 @@ func Get_card_from_card_id(card_id int) (*Card, error) {
return &c, nil return &c, nil
} }
func Get_card_from_card_name(card_name string) (*Card, error) {
c := Card{}
db, err := open()
if err != nil {
return &c, err
}
defer db.Close()
sqlStatement := `SELECT card_id, k2_cmac_key, uid,` +
` last_counter_value, lnurlw_request_timeout_sec,` +
` lnurlw_enable, tx_limit_sats, day_limit_sats` +
` FROM cards WHERE card_name=$1 AND wiped='N';`
row := db.QueryRow(sqlStatement, card_name)
err = row.Scan(
&c.Card_id,
&c.K2_cmac_key,
&c.Db_uid,
&c.Last_counter_value,
&c.Lnurlw_request_timeout_sec,
&c.Lnurlw_enable,
&c.Tx_limit_sats,
&c.Day_limit_sats)
if err != nil {
return &c, err
}
return &c, nil
}
func Check_lnurlw_timeout(card_payment_id int) (bool, error) { func Check_lnurlw_timeout(card_payment_id int) (bool, error) {
db, err := open() db, err := open()

View file

@ -0,0 +1,59 @@
package internalapi
import (
"net/http"
"strconv"
"github.com/boltcard/boltcard/db"
"github.com/boltcard/boltcard/resp_err"
log "github.com/sirupsen/logrus"
)
func Getboltcard(w http.ResponseWriter, r *http.Request) {
if db.Get_setting("FUNCTION_INTERNAL_API") != "ENABLE" {
msg := "getboltcard: internal API function is not enabled"
log.Debug(msg)
resp_err.Write_message(w, msg)
return
}
card_name := r.URL.Query().Get("card_name")
// check if card_name exists
card_count, err := db.Get_card_name_count(card_name)
if err != nil {
log.Warn(err.Error())
return
}
if card_count == 0 {
msg := "getboltcard: the card name does not exist in the database"
log.Warn(msg)
resp_err.Write_message(w, msg)
return
}
// log the request
log.WithFields(log.Fields{
"card_name": card_name}).Info("getboltcard API request")
// get the card record
c, err := db.Get_card_from_card_name(card_name)
if err != nil {
log.Warn(err.Error())
return
}
jsonData := []byte(`{"status":"OK",` +
`"uid": "` + c.Db_uid + `",` +
`"last_counter_value": "` + strconv.FormatUint(uint64(c.Last_counter_value), 10) + `",` +
`"lnurlw_enable": "` + c.Lnurlw_enable + `",` +
`"tx_limit_sats": "` + strconv.Itoa(c.Tx_limit_sats) + `",` +
`"day_limit_sats": "` + strconv.Itoa(c.Day_limit_sats) + `"}`)
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
w.Write(jsonData)
}

View file

@ -1,14 +1,15 @@
package main package main
import ( import (
"net/http"
"time"
"github.com/boltcard/boltcard/db" "github.com/boltcard/boltcard/db"
"github.com/boltcard/boltcard/internalapi" "github.com/boltcard/boltcard/internalapi"
"github.com/boltcard/boltcard/lnurlp" "github.com/boltcard/boltcard/lnurlp"
"github.com/boltcard/boltcard/lnurlw" "github.com/boltcard/boltcard/lnurlw"
"github.com/gorilla/mux" "github.com/gorilla/mux"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
"net/http"
"time"
) )
var router = mux.NewRouter() var router = mux.NewRouter()
@ -55,6 +56,7 @@ func main() {
internal_router.Path("/createboltcard").Methods("GET").HandlerFunc(internalapi.Createboltcard) internal_router.Path("/createboltcard").Methods("GET").HandlerFunc(internalapi.Createboltcard)
internal_router.Path("/updateboltcard").Methods("GET").HandlerFunc(internalapi.Updateboltcard) internal_router.Path("/updateboltcard").Methods("GET").HandlerFunc(internalapi.Updateboltcard)
internal_router.Path("/wipeboltcard").Methods("GET").HandlerFunc(internalapi.Wipeboltcard) internal_router.Path("/wipeboltcard").Methods("GET").HandlerFunc(internalapi.Wipeboltcard)
internal_router.Path("/getboltcard").Methods("GET").HandlerFunc(internalapi.Getboltcard)
port := db.Get_setting("HOST_PORT") port := db.Get_setting("HOST_PORT")
if port == "" { if port == "" {