From f22adf24e886cf4382a26b4777c5b481b21c26f5 Mon Sep 17 00:00:00 2001 From: Andinus Date: Fri, 27 Mar 2020 14:38:31 +0530 Subject: Change database schema --- auth/register.go | 28 +++++----------------------- storage/sqlite3/init.go | 37 +++++++++++++------------------------ 2 files changed, 18 insertions(+), 47 deletions(-) diff --git a/auth/register.go b/auth/register.go index b253f69..086d3ce 100644 --- a/auth/register.go +++ b/auth/register.go @@ -11,7 +11,7 @@ import ( // Register takes in registration details and returns an error. If // error doesn't equal nil then the registration was unsuccessful. -// regInfo should have username, password & ip. +// regInfo should have username & password. func Register(db *sqlite3.DB, regInfo map[string]string) error { u := user.User{} u.SetID(genID(64)) @@ -29,11 +29,11 @@ func Register(db *sqlite3.DB, regInfo map[string]string) error { db.Mu.Lock() defer db.Mu.Unlock() - err = insertRecords(db, u, regInfo) + err = insertRegRecords(db, u) return err } -func insertRecords(db *sqlite3.DB, u user.User, regInfo map[string]string) error { +func insertRegRecords(db *sqlite3.DB, u user.User) error { // Start the transaction tx, err := db.Conn.Begin() if err != nil { @@ -42,26 +42,8 @@ func insertRecords(db *sqlite3.DB, u user.User, regInfo map[string]string) error return err } - // Insert the record into registration table - regStmt, err := db.Conn.Prepare(` -INSERT INTO registration(id, username, reg_time, reg_ip) values(?, ?, ?, ?)`) - if err != nil { - log.Printf("auth/register.go: %s\n", - "Failed to prepare statement") - return err - } - defer regStmt.Close() - - _, err = regStmt.Exec(u.ID(), u.Username(), time.Now().UTC(), regInfo["ip"]) - if err != nil { - log.Printf("auth/register.go: %s\n", - "Failed to execute statement") - return err - } - - // Insert the record into users table usrStmt, err := db.Conn.Prepare(` -INSERT INTO users(id, username, password) values(?, ?, ?)`) +INSERT INTO users(id, username, password, regTime) values(?, ?, ?, ?)`) if err != nil { log.Printf("auth/register.go: %s\n", "Failed to prepare statement") @@ -69,7 +51,7 @@ INSERT INTO users(id, username, password) values(?, ?, ?)`) } defer usrStmt.Close() - _, err = usrStmt.Exec(u.ID(), u.Username(), u.Password()) + _, err = usrStmt.Exec(u.ID(), u.Username(), u.Password(), time.Now().UTC()) if err != nil { log.Printf("auth/register.go: %s\n", "Failed to execute statement") diff --git a/storage/sqlite3/init.go b/storage/sqlite3/init.go index ffdc6b9..e79d3ff 100644 --- a/storage/sqlite3/init.go +++ b/storage/sqlite3/init.go @@ -41,32 +41,21 @@ func Init(db *DB) { } sqlstmt := []string{ - // Create users table, this will hold information on - // account like id, type & other user specific - // information. We are using id because later we may - // want to add username change or account delete - // functionality. username here is not unique because - // if user deletes account then we'll change it to - // "ghost" or something. This doesn't mean usernames - // shouldn't be unique, registration table requires - // them to be unique so it'll fail if they aren't - // unique. - `CREATE TABLE IF NOT EXISTS users ( - id TEXT PRIMARY KEY, - type TEXT NOT NULL DEFAULT notadmin, - username TEXT NOT NULL, - password TEXT NOT NULL);`, + // Users can login with multiple devices and so + // multiple tokens will be created. This shouldn't be + // used for login, logins should be verified with + // users table only. + `CREATE TABLE IF NOT EXISTS access ( + id TEXT NOT NULL, + token TEXT NOT NULL, + genTime TEXT NOT NULL);`, - // Create registration table, this will hold user - // account details like registration time, ip & - // similar details. This is the only place that will - // relate the username to id even after deletion. - // usernames must be unique in this table. - `CREATE TABLE IF NOT EXISTS registration ( + `CREATE TABLE IF NOT EXISTS users ( id TEXT PRIMARY KEY, - username TEXT NOT NULL UNIQUE, - reg_time TEXT NOT NULL, - reg_ip TEXT NOT NULL);`, + type TEXT NOT NULL DEFAULT user, + username VARCHAR(128) NOT NULL UNIQUE, + password TEXT NOT NULL, + regTime TEXT NOT NULL);`, } // We range over statements and execute them one by one, this -- cgit 1.4.1-2-gfad0