76 lines
1.5 KiB
Go
76 lines
1.5 KiB
Go
package main
|
|
|
|
import (
|
|
"database/sql"
|
|
"errors"
|
|
"fmt"
|
|
_ "github.com/lib/pq"
|
|
"os"
|
|
)
|
|
|
|
func db_open() (*sql.DB, error) {
|
|
|
|
// get connection string from environment variables
|
|
|
|
conn := fmt.Sprintf("host=%s port=%s user=%s password=%s dbname=%s sslmode=disable",
|
|
os.Getenv("DB_HOST"),
|
|
os.Getenv("DB_PORT"),
|
|
os.Getenv("DB_USER"),
|
|
os.Getenv("DB_PASSWORD"),
|
|
os.Getenv("DB_NAME"))
|
|
|
|
db, err := sql.Open("postgres", conn)
|
|
if err != nil {
|
|
return db, err
|
|
}
|
|
|
|
return db, nil
|
|
}
|
|
|
|
func db_delete_expired() error {
|
|
|
|
db, err := db_open()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer db.Close()
|
|
|
|
// delete expired one time code records
|
|
|
|
sqlStatement := `DELETE FROM cards WHERE one_time_code_expiry < NOW() AND one_time_code_used = 'N';`
|
|
_, err = db.Exec(sqlStatement)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func db_insert_card(one_time_code string, lock_key string, aes_cmac string) error {
|
|
|
|
db, err := db_open()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer db.Close()
|
|
|
|
// insert a new record into cards
|
|
|
|
sqlStatement := `INSERT INTO cards` +
|
|
` (one_time_code, lock_key, aes_cmac, uid, last_counter_value,` +
|
|
` lnurlw_request_timeout_sec, tx_limit_sats, day_limit_sats, one_time_code_used)` +
|
|
` VALUES ($1, $2, $3, '', 0, 60, 1000, 10000, 'N');`
|
|
res, err := db.Exec(sqlStatement, one_time_code, lock_key, aes_cmac)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
count, err := res.RowsAffected()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if count != 1 {
|
|
return errors.New("not one card record inserted")
|
|
}
|
|
|
|
return nil
|
|
}
|