Add DB interface

master
HimbeerserverDE 2021-04-22 10:39:24 +02:00
parent e887277415
commit 6f6908573e
No known key found for this signature in database
GPG Key ID: 1A651504791E6A8B
4 changed files with 58 additions and 1 deletions

View File

@ -16,7 +16,7 @@ Go 1.16 or higher is required
`go get -u github.com/HimbeerserverDE/multiserver`
## How to use
**Note: The authentication databases of the minetest servers need to be deleted before multiserver can connect to them. You can convert minetest auth databases to the multiserver auth database scheme with [multiserver_converter](https://github.com/HimbeerserverDE/multiserver_converter).**
**Note: The authentication databases of the minetest servers need to be deleted before multiserver can connect to them. You can convert minetest auth databases to the multiserver auth database schema with [multiserver_converter](https://github.com/HimbeerserverDE/multiserver_converter).**
### Running
The `go get` command will create an executable file in `~/go/bin/multiserver`.

54
db.go Normal file
View File

@ -0,0 +1,54 @@
package main
import (
"database/sql"
"fmt"
"os"
_ "github.com/lib/pq"
_ "github.com/mattn/go-sqlite3"
)
type DB struct {
*sql.DB
}
// OpenSQLite3 opens and returns a SQLite3 database
func OpenSQLite3(name, initSQL string) (*DB, error) {
os.Mkdir("storage", 0777)
db, err := sql.Open("sqlite3", "storage/"+name)
if err != nil {
return nil, err
}
if _, err := db.Exec(initSQL); err != nil {
db.Close()
return nil, err
}
return &DB{DB: db}, nil
}
// OpenPSQL opens and returns a PostgreSQL database
func OpenPSQL(host, name, user, password string, port uint16) (*DB, error) {
psqlconn := fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=disable", host, port, user, password, name)
db, err := sql.Open("postgres", psqlconn)
if err != nil {
return nil, err
}
err = db.Ping()
if err != nil {
db.Close()
return nil, err
}
return &DB{DB: db}, nil
}
// Query executes a SQL statement and stores the results
func (db *DB) QueryRow(sql string, values []interface{}, results ...interface{}) error {
return db.DB.QueryRow(sql, values...).Scan(results...)
}

1
go.mod
View File

@ -5,6 +5,7 @@ go 1.16
require (
github.com/HimbeerserverDE/srp v0.0.0-20210331172529-2b5dbec6b82b
github.com/anon55555/mt v0.0.0-20210401173148-4c2536cce54b
github.com/lib/pq v1.10.1
github.com/mattn/go-sqlite3 v1.14.6
github.com/tncardoso/gocurses v0.0.0-20170428215319-6c1f6d2854e2
gopkg.in/yaml.v2 v2.4.0

2
go.sum
View File

@ -2,6 +2,8 @@ github.com/HimbeerserverDE/srp v0.0.0-20210331172529-2b5dbec6b82b h1:xqNC1S76U5U
github.com/HimbeerserverDE/srp v0.0.0-20210331172529-2b5dbec6b82b/go.mod h1:pxNH8S2nh4n2DWE0ToX5GnnDr/uEAuaAhJsCpkDLIWw=
github.com/anon55555/mt v0.0.0-20210401173148-4c2536cce54b h1:gyTxjlQCBIC7rVN2n6fAvz4sRXpOFMSIaw57r9ccJnA=
github.com/anon55555/mt v0.0.0-20210401173148-4c2536cce54b/go.mod h1:jH4ER+ahjl7H6TczzK+q4V9sXY++U2Geh6/vt3r4Xvs=
github.com/lib/pq v1.10.1 h1:6VXZrLU0jHBYyAqrSPa+MgPfnSvTPuMgK+k0o5kVFWo=
github.com/lib/pq v1.10.1/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
github.com/mattn/go-sqlite3 v1.14.6 h1:dNPt6NO46WmLVt2DLNpwczCmdV5boIZ6g/tlDrlRUbg=
github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
github.com/tncardoso/gocurses v0.0.0-20170428215319-6c1f6d2854e2 h1:wAHqYwDeXe0nIJnz9dqSmBGiaoqBDCRBhV/ebefJe30=