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