Start of the db integration

This commit is contained in:
2024-02-21 18:30:09 -08:00
parent 6dfe0e80b4
commit 1026e4ab73

62
db.go Normal file
View File

@@ -0,0 +1,62 @@
package main
import (
"crypto/rand"
"database/sql"
"fmt"
"log"
"math/big"
)
const createPinTableSql = `CREATE TABLE IF NOT EXISTS pin (
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
"pin" STRING NOT NULL,
"active" BOOLEAN DEFAULT TRUE,
"createdAt" DATETIME NOT NULL DEFAULT (datetime('now','localtime')),
)`
const createPeerTableSql = `CREATE TABLE IF NOT EXISTS peer (
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
"publicKey" STRING NOT NULL,
"createdAt" DATETIME NOT NULL DEFAULT (datetime('now','localtime')),
)`
func InitDb() *sql.DB {
db, err := sql.Open("sqlite3", "./sqlite-database.db")
_, err = db.Exec(createPinTableSql)
if err != nil {
log.Fatal(err.Error())
}
_, err = db.Exec(createPeerTableSql)
if err != nil {
log.Fatal(err.Error())
}
return db
}
func NewPin(db *sql.DB) (string, error) {
pin := randomPin()
_, err := db.Exec(`INSERT INTO PIN pin = ?`, pin)
if err != nil {
return "", err
}
return pin, nil
}
func VerifyPin(db *sql.DB, pin string) bool {
row := db.QueryRow(`SELECT EXISTS (SELECT 1 FROM pin WHERE pin = ? AND active = True)`, pin)
var exists bool
row.Scan(&exists)
return exists
}
func randomPin() string {
num, _ := rand.Int(rand.Reader, big.NewInt(999999+1))
return fmt.Sprintf("%06d", num)
}