working registration
This commit is contained in:
@@ -1,8 +1,10 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"os"
|
||||
"reflect"
|
||||
|
||||
"ccsecrets/utils"
|
||||
|
||||
@@ -30,7 +32,7 @@ const createUsers string = `
|
||||
UserId INTEGER PRIMARY KEY ASC,
|
||||
RoleId INTEGER,
|
||||
UserName VARCHAR,
|
||||
UserPass VARCHAR,
|
||||
Password VARCHAR,
|
||||
AccessToken varchar,
|
||||
FOREIGN KEY (RoleId) REFERENCES roles(RoleId)
|
||||
);
|
||||
@@ -68,10 +70,12 @@ func ConnectDatabase() {
|
||||
fmt.Printf("Connected to sqlite database file '%s'\n", sqlPath)
|
||||
}
|
||||
|
||||
//sqlx.NameMapper = func(s string) string { return s }
|
||||
|
||||
// Make sure our tables exist
|
||||
CreateTables()
|
||||
|
||||
defer db.Close()
|
||||
//defer db.Close()
|
||||
}
|
||||
|
||||
func CreateTables() {
|
||||
@@ -82,11 +86,20 @@ func CreateTables() {
|
||||
fmt.Printf("Error checking roles table : '%s'", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
if _, err = db.Exec("INSERT INTO roles VALUES(1, 'Admin', false, true);"); err != nil {
|
||||
fmt.Printf("Error adding initial admin role : '%s'", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
// Users table
|
||||
if _, err = db.Exec(createUsers); err != nil {
|
||||
fmt.Printf("Error checking users table : '%s'", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
if _, err = db.Exec("INSERT INTO users VALUES(1, 1, 'Administrator', 'password', 'token');"); err != nil {
|
||||
fmt.Printf("Error adding initial admin role : '%s'", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
// Secrets table
|
||||
if _, err = db.Exec(createSecrets); err != nil {
|
||||
fmt.Printf("Error checking secrets table : '%s'", err)
|
||||
@@ -106,6 +119,52 @@ func CreateTables() {
|
||||
}
|
||||
}
|
||||
|
||||
// From https://stackoverflow.com/a/60100045
|
||||
func GenerateInsertMethod(q interface{}) (string, error) {
|
||||
if reflect.ValueOf(q).Kind() == reflect.Struct {
|
||||
query := fmt.Sprintf("INSERT INTO %s", reflect.TypeOf(q).Name())
|
||||
fieldNames := ""
|
||||
fieldValues := ""
|
||||
v := reflect.ValueOf(q)
|
||||
for i := 0; i < v.NumField(); i++ {
|
||||
if i == 0 {
|
||||
fieldNames = fmt.Sprintf("%s%s", fieldNames, v.Type().Field(i).Name)
|
||||
} else {
|
||||
fieldNames = fmt.Sprintf("%s, %s", fieldNames, v.Type().Field(i).Name)
|
||||
}
|
||||
switch v.Field(i).Kind() {
|
||||
case reflect.Int:
|
||||
if i == 0 {
|
||||
fieldValues = fmt.Sprintf("%s%d", fieldValues, v.Field(i).Int())
|
||||
} else {
|
||||
fieldValues = fmt.Sprintf("%s, %d", fieldValues, v.Field(i).Int())
|
||||
}
|
||||
case reflect.String:
|
||||
if i == 0 {
|
||||
fieldValues = fmt.Sprintf("%s\"%s\"", fieldValues, v.Field(i).String())
|
||||
} else {
|
||||
fieldValues = fmt.Sprintf("%s, \"%s\"", fieldValues, v.Field(i).String())
|
||||
}
|
||||
case reflect.Bool:
|
||||
var boolSet int8
|
||||
if v.Field(i).Bool() {
|
||||
boolSet = 1
|
||||
}
|
||||
if i == 0 {
|
||||
fieldValues = fmt.Sprintf("%s%d", fieldValues, boolSet)
|
||||
} else {
|
||||
fieldValues = fmt.Sprintf("%s, %d", fieldValues, boolSet)
|
||||
}
|
||||
default:
|
||||
fmt.Printf("Unsupported type '%s'\n", v.Field(i).Kind())
|
||||
}
|
||||
}
|
||||
query = fmt.Sprintf("%s(%s) VALUES (%s)", query, fieldNames, fieldValues)
|
||||
return query, nil
|
||||
}
|
||||
return "", errors.New("SqlGenerationError")
|
||||
}
|
||||
|
||||
func CheckColumnExists(table string, column string) (bool, error) {
|
||||
var count int64
|
||||
rows, err := db.Queryx("SELECT COUNT(*) AS CNTREC FROM pragma_table_info('" + table + "') WHERE name='" + column + "';")
|
||||
|
@@ -1,9 +1,47 @@
|
||||
package models
|
||||
|
||||
import "fmt"
|
||||
|
||||
type User struct {
|
||||
UserId int `db:UserId`
|
||||
RoleId int `db:RoleId`
|
||||
UserName string `db:UserName`
|
||||
UserPass string `db:UserPass`
|
||||
AccessToken string `db:AccessToken`
|
||||
UserId int `db:"UserId"`
|
||||
RoleId int `db:"RoleId"`
|
||||
UserName string `db:"UserName"`
|
||||
Password string `db:"Password"`
|
||||
AccessToken string `db:"AccessToken"`
|
||||
}
|
||||
|
||||
func (u *User) SaveUser() (*User, error) {
|
||||
|
||||
var err error
|
||||
|
||||
/*
|
||||
sql, err := GenerateInsertMethod(&u)
|
||||
if err != nil {
|
||||
fmt.Printf("SaveUser error generating sql record : '%s'\n", err)
|
||||
return &User{}, err
|
||||
} else {
|
||||
fmt.Println(sql)
|
||||
}
|
||||
result, err := db.Exec(sql)
|
||||
*/
|
||||
|
||||
fmt.Printf("SaveUser received object '%v'\n", u.RoleId)
|
||||
|
||||
result, err := db.NamedExec((`INSERT INTO users (RoleId, UserName, Password, AccessToken) VALUES (:RoleId, :UserName, :Password, :AccessToken)`), u)
|
||||
|
||||
if err != nil {
|
||||
fmt.Printf("SaveUser error executing sql record : '%s'\n", err)
|
||||
return &User{}, err
|
||||
} else {
|
||||
affected, _ := result.RowsAffected()
|
||||
id, _ := result.LastInsertId()
|
||||
fmt.Printf("SaveUser insert returned result id '%d' affecting %d row(s).\n", id, affected)
|
||||
}
|
||||
/*
|
||||
err = CreateUser(&u).Error
|
||||
if err != nil {
|
||||
return &User{}, err
|
||||
}
|
||||
*/
|
||||
return u, nil
|
||||
}
|
||||
|
Reference in New Issue
Block a user