Start of the db integration
This commit is contained in:
62
db.go
Normal file
62
db.go
Normal 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)
|
||||
}
|
||||
Reference in New Issue
Block a user