diff --git a/db/db.go b/db/db.go index 9d489db..cd6e43a 100644 --- a/db/db.go +++ b/db/db.go @@ -371,6 +371,37 @@ func Get_card_from_card_id(card_id int) (*Card, error) { 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;` + 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) { db, err := open() diff --git a/docs/DOCKER_INSTALL.md b/docs/DOCKER_INSTALL.md index 33e8156..a2d87ed 100644 --- a/docs/DOCKER_INSTALL.md +++ b/docs/DOCKER_INSTALL.md @@ -58,3 +58,4 @@ Run `$ docker ps` to list containers and get container names/ids - `docker exec boltcard_main curl 'localhost:9001/createboltcard?card_name=card_5&enable=false&tx_max=1000&day_max=10000&uid_privacy=true&allow_neg_bal=true'` - `docker exec boltcard_main curl 'localhost:9001/updateboltcard?card_name=card_5&enable=true&tx_max=100&day_max=1000'` - `docker exec boltcard_main curl 'localhost:9001/wipeboltcard?card_name=card_5'` +- `docker exec boltcard_main curl 'localhost:9001/getboltcard?card_name=card_5'` \ No newline at end of file diff --git a/internalapi/getboltcard.go b/internalapi/getboltcard.go new file mode 100644 index 0000000..b0d16e9 --- /dev/null +++ b/internalapi/getboltcard.go @@ -0,0 +1,60 @@ +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 { + msg := "getboltcard: the card name does not exist in the database" + log.Warn(msg) + resp_err.Write_message(w, msg) + return + } + + jsonData := []byte(`{"status":"OK",` + + `"uid": "` + c.Db_uid + `",` + + `"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) +} diff --git a/internalapi/updateboltcard.go b/internalapi/updateboltcard.go index 72b5e37..ae6ea20 100644 --- a/internalapi/updateboltcard.go +++ b/internalapi/updateboltcard.go @@ -63,7 +63,7 @@ func Updateboltcard(w http.ResponseWriter, r *http.Request) { // log the request log.WithFields(log.Fields{ - "card_name": card_name, "tx_max": tx_max, + "card_name": card_name, "tx_max": tx_max, "day_max": day_max, "enable": enable_flag}).Info("updateboltcard API request") // update the card record diff --git a/main.go b/main.go index 3456d93..4390985 100644 --- a/main.go +++ b/main.go @@ -55,6 +55,7 @@ func main() { internal_router.Path("/createboltcard").Methods("GET").HandlerFunc(internalapi.Createboltcard) internal_router.Path("/updateboltcard").Methods("GET").HandlerFunc(internalapi.Updateboltcard) internal_router.Path("/wipeboltcard").Methods("GET").HandlerFunc(internalapi.Wipeboltcard) + internal_router.Path("/getboltcard").Methods("GET").HandlerFunc(internalapi.Getboltcard) port := db.Get_setting("HOST_PORT") if port == "" {