MapyWeb/db/setup.go

118 lines
2.6 KiB
Go

package db
import (
"fmt"
"os"
pgsql "github.com/fergusstrange/embedded-postgres"
"github.com/jmoiron/sqlx"
"github.com/rs/zerolog/log"
"mapyweb/config"
)
var accountsSchema = `create table accounts
(
id serial
constraint accounts_pkey
primary key,
username varchar(13) not null,
password varchar not null,
creation date not null,
last_login date not null,
last_ip varchar not null,
ban integer not null,
admin integer not null,
gender smallint default 0 not null
);`
var authlog *secLog
func install(db *sqlx.DB) {
if _, err := db.Exec(accountsSchema); err != nil {
panic(err)
}
println("accounts table installed!")
}
func loginTest() {
var kayos *User
var err error
println("logging in as kayos...")
if kayos, err = AttemptWebLogin(
"kayos",
"yeet",
"192.168.69.5",
"yeetBrowser 420"); err != nil {
println("FAIL: " + err.Error())
return
}
println("logged in as kayos!")
println(kayos.Password)
}
func registerTest() {
println("registering kayos...")
if err := RegisterNewUser("kayos", "yeet", "127.0.0.1", 0, true); err != nil {
println("REG_TEST_FAIL: " + err.Error())
return
}
println("kayos registered!")
return
}
func argParse() {
for _, arg := range os.Args {
if arg == "--install" {
println("installing...")
install(db)
}
if arg == "--regtest" {
registerTest()
}
if arg == "--logintest" {
loginTest()
}
}
}
// StartDatabases initializes our embeded postgresql database and our embeded bitcask database.
func StartDatabases() {
var err error
// embedded postgres -
if config.UseEmbeddedPostgres {
postgres = pgsql.NewDatabase(pgsql.DefaultConfig().
DataPath("./data/pgsql").
BinariesPath("./postgresql").
Logger(os.Stdout))
if err := postgres.Start(); err != nil {
log.Error().Err(err).Msg("postgres_fail")
return
}
defer postgres.Stop()
db, err = sqlx.Connect("postgres",
"host=localhost port=5432 user=postgres password=postgres dbname=postgres sslmode=disable")
} else {
connstr := fmt.Sprintf("host=%s port=%s user=%s password=%s dbname=%s sslmode=disable", config.SQLHost, config.SQLPort, config.SQLUsername, config.SQLPassword)
db, err = sqlx.Connect("postgres", connstr)
}
if err != nil {
log.Error().Caller().Err(err).Msg("postgres_fail")
return
}
// -------------------
// embedded bitcask for authlog
if authlog, err = GetUserAuths("./data/authlog"); err != nil {
log.Error().Caller().Err(err).Msg("!!! GetUserAuths failed !!!")
}
// -------------------
argParse()
}