118 lines
2.6 KiB
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()
|
|
}
|