diff --git a/db/db.go b/db/db.go index 3ff623a..4894203 100644 --- a/db/db.go +++ b/db/db.go @@ -886,7 +886,45 @@ func Wipe_card(card_name string) (*Card_wipe_info, error) { return &card_wipe_info, nil } -func Update_card(card_name string, lnurlw_enable bool, tx_limit_sats int, day_limit_sats int, +func Update_card(card_name string, lnurlw_enable bool, tx_limit_sats int, + day_limit_sats int) error { + + lnurlw_enable_yn := "N" + if lnurlw_enable { + lnurlw_enable_yn = "Y" + } + + db, err := open() + + if err != nil { + return err + } + + defer db.Close() + + sqlStatement := `UPDATE cards SET lnurlw_enable = $2, tx_limit_sats = $3, day_limit_sats = $4 ` + + `WHERE card_name = $1 AND wiped = 'N';` + + res, err := db.Exec(sqlStatement, card_name, lnurlw_enable_yn, tx_limit_sats, day_limit_sats) + + if err != nil { + return err + } + + count, err := res.RowsAffected() + + if err != nil { + return err + } + + if count != 1 { + return errors.New("not one card record updated") + } + + return nil +} + +func Update_card_with_pin(card_name string, lnurlw_enable bool, tx_limit_sats int, day_limit_sats int, pin_enable bool, pin_number string, pin_limit_sats int) error { lnurlw_enable_yn := "N" diff --git a/internalapi/updateboltcard.go b/internalapi/updateboltcard.go index ecc4f2b..ae6ea20 100644 --- a/internalapi/updateboltcard.go +++ b/internalapi/updateboltcard.go @@ -43,26 +43,6 @@ func Updateboltcard(w http.ResponseWriter, r *http.Request) { return } - pin_enable_flag_str := r.URL.Query().Get("enable_pin") - pin_enable_flag, err := strconv.ParseBool(pin_enable_flag_str) - if err != nil { - msg := "updateboltcard: enable_pin is not a valid boolean" - log.Warn(msg) - resp_err.Write_message(w, msg) - return - } - - pin_number := r.URL.Query().Get("pin_number") - - pin_limit_sats_str := r.URL.Query().Get("pin_limit_sats") - pin_limit_sats, err := strconv.Atoi(pin_limit_sats_str) - if err != nil { - msg := "updateboltcard: pin_limit_sats is not a valid integer" - log.Warn(msg) - resp_err.Write_message(w, msg) - return - } - card_name := r.URL.Query().Get("card_name") // check if card_name exists @@ -84,12 +64,11 @@ func Updateboltcard(w http.ResponseWriter, r *http.Request) { log.WithFields(log.Fields{ "card_name": card_name, "tx_max": tx_max, "day_max": day_max, - "enable": enable_flag, "enable_pin": pin_enable_flag, - "pin_number": pin_number, "pin_limit_sats": pin_limit_sats}).Info("updateboltcard API request") + "enable": enable_flag}).Info("updateboltcard API request") // update the card record - err = db.Update_card(card_name, enable_flag, tx_max, day_max, pin_enable_flag, pin_number, pin_limit_sats) + err = db.Update_card(card_name, enable_flag, tx_max, day_max) if err != nil { log.Warn(err.Error()) return diff --git a/internalapi/updateboltcardwithpin.go b/internalapi/updateboltcardwithpin.go new file mode 100644 index 0000000..e53462e --- /dev/null +++ b/internalapi/updateboltcardwithpin.go @@ -0,0 +1,105 @@ +package internalapi + +import ( + "github.com/boltcard/boltcard/db" + "github.com/boltcard/boltcard/resp_err" + log "github.com/sirupsen/logrus" + "net/http" + "strconv" +) + +func Updateboltcardwithpin(w http.ResponseWriter, r *http.Request) { + if db.Get_setting("FUNCTION_INTERNAL_API") != "ENABLE" { + msg := "updateboltcardwithpin: internal API function is not enabled" + log.Debug(msg) + resp_err.Write_message(w, msg) + return + } + + enable_flag_str := r.URL.Query().Get("enable") + enable_flag, err := strconv.ParseBool(enable_flag_str) + if err != nil { + msg := "updateboltcardwithpin: enable is not a valid boolean" + log.Warn(msg) + resp_err.Write_message(w, msg) + return + } + + tx_max_str := r.URL.Query().Get("tx_max") + tx_max, err := strconv.Atoi(tx_max_str) + if err != nil { + msg := "updateboltcardwithpin: tx_max is not a valid integer" + log.Warn(msg) + resp_err.Write_message(w, msg) + return + } + + day_max_str := r.URL.Query().Get("day_max") + day_max, err := strconv.Atoi(day_max_str) + if err != nil { + msg := "updateboltcardwithpin: day_max is not a valid integer" + log.Warn(msg) + resp_err.Write_message(w, msg) + return + } + + pin_enable_flag_str := r.URL.Query().Get("enable_pin") + pin_enable_flag, err := strconv.ParseBool(pin_enable_flag_str) + if err != nil { + msg := "updateboltcardwithpin: enable_pin is not a valid boolean" + log.Warn(msg) + resp_err.Write_message(w, msg) + return + } + + pin_number := r.URL.Query().Get("pin_number") + + pin_limit_sats_str := r.URL.Query().Get("pin_limit_sats") + pin_limit_sats, err := strconv.Atoi(pin_limit_sats_str) + if err != nil { + msg := "updateboltcardwithpin: pin_limit_sats is not a valid integer" + log.Warn(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 := "updateboltcardwithpin: 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, "tx_max": tx_max, "day_max": day_max, + "enable": enable_flag, "enable_pin": pin_enable_flag, + "pin_number": pin_number, "pin_limit_sats": pin_limit_sats}).Info("updateboltcardwithpin API request") + + // update the card record + + err = db.Update_card_with_pin(card_name, enable_flag, tx_max, day_max, + pin_enable_flag, pin_number, pin_limit_sats) + if err != nil { + log.Warn(err.Error()) + return + } + + // send a response + + jsonData := []byte(`{"status":"OK"}`) + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(http.StatusOK) + w.Write(jsonData) +} diff --git a/main.go b/main.go index 4390985..d665ba7 100644 --- a/main.go +++ b/main.go @@ -54,6 +54,7 @@ func main() { internal_router.Path("/ping").Methods("GET").HandlerFunc(internalapi.Internal_ping) internal_router.Path("/createboltcard").Methods("GET").HandlerFunc(internalapi.Createboltcard) internal_router.Path("/updateboltcard").Methods("GET").HandlerFunc(internalapi.Updateboltcard) + internal_router.Path("/updateboltcardwithpin").Methods("GET").HandlerFunc(internalapi.Updateboltcardwithpin) internal_router.Path("/wipeboltcard").Methods("GET").HandlerFunc(internalapi.Wipeboltcard) internal_router.Path("/getboltcard").Methods("GET").HandlerFunc(internalapi.Getboltcard)