Add PostgreSQL conversion
parent
7ab774c8f9
commit
02f04a6e8b
|
@ -1,2 +1,2 @@
|
|||
# multiserver_converter
|
||||
MT to multiserver SQLite3 auth database converter
|
||||
MT to multiserver auth database converter
|
||||
|
|
144
converter.go
144
converter.go
|
@ -3,9 +3,7 @@ multiserver_converter is a utility designed to convert MT authentication
|
|||
databases to the multiserver authentication database scheme
|
||||
|
||||
Usage:
|
||||
multiserver_converter <in> <out>
|
||||
where in is the path to the MT auth database
|
||||
and out is the desired path to the newly created database
|
||||
multiserver_converter <sqlite3 <in> <out> | psql <in_db> <in_user> <in_password> <in_host> <in_port> <out_db> <out_user> <out_password> <out_host> <out_port>>
|
||||
*/
|
||||
package main
|
||||
|
||||
|
@ -14,11 +12,13 @@ import (
|
|||
"errors"
|
||||
"fmt"
|
||||
"os"
|
||||
"strconv"
|
||||
|
||||
_ "github.com/lib/pq"
|
||||
_ "github.com/mattn/go-sqlite3"
|
||||
)
|
||||
|
||||
func convertDB(in, out string) error {
|
||||
func convertSQLite3(in, out string) error {
|
||||
db, err := sql.Open("sqlite3", in)
|
||||
if err != nil {
|
||||
return err
|
||||
|
@ -31,19 +31,18 @@ func convertDB(in, out string) error {
|
|||
}
|
||||
defer db2.Close()
|
||||
|
||||
if _, err := db2.Exec(`
|
||||
CREATE TABLE auth (
|
||||
name VARCHAR(32) NOT NULL,
|
||||
password VARCHAR(512) NOT NULL
|
||||
);
|
||||
CREATE TABLE privileges (
|
||||
name VARCHAR(32) NOT NULL,
|
||||
privileges VARCHAR(1024)
|
||||
);
|
||||
CREATE TABLE ban (
|
||||
addr VARCHAR(39) NOT NULL,
|
||||
name VARCHAR(32) NOT NULL
|
||||
);`); err != nil {
|
||||
if _, err := db2.Exec(`CREATE TABLE auth (
|
||||
name VARCHAR(32) PRIMARY KEY NOT NULL,
|
||||
password VARCHAR(512) NOT NULL
|
||||
);
|
||||
CREATE TABLE privileges (
|
||||
name VARCHAR(32) PRIMARY KEY NOT NULL,
|
||||
privileges VARCHAR(1024)
|
||||
);
|
||||
CREATE TABLE ban (
|
||||
addr VARCHAR(39) PRIMARY KEY NOT NULL,
|
||||
name VARCHAR(32) NOT NULL
|
||||
);`); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
|
@ -52,8 +51,7 @@ func convertDB(in, out string) error {
|
|||
for {
|
||||
var name, password string
|
||||
|
||||
err := result.Scan(&name, &password)
|
||||
if err != nil {
|
||||
if err := result.Scan(&name, &password); err != nil {
|
||||
if errors.Is(err, sql.ErrNoRows) {
|
||||
break
|
||||
}
|
||||
|
@ -62,11 +60,69 @@ func convertDB(in, out string) error {
|
|||
}
|
||||
|
||||
_, err = db2.Exec(`INSERT INTO auth (
|
||||
name, password
|
||||
) VALUES (
|
||||
?,
|
||||
?
|
||||
);`, name, password)
|
||||
name, password
|
||||
) VALUES (
|
||||
?,
|
||||
?
|
||||
);`, name, password)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func convertPSQL(inDB, inUser, inPassword, inHost string, inPort int, outDB, outUser, outPassword, outHost string, outPort int) error {
|
||||
inConn := fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=disable", inHost, inPort, inUser, inPassword, inDB)
|
||||
outConn := fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=disable", outHost, outPort, outUser, outPassword, outDB)
|
||||
|
||||
db, err := sql.Open("postgres", inConn)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer db.Close()
|
||||
|
||||
db2, err := sql.Open("postgres", outConn)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer db2.Close()
|
||||
|
||||
if _, err := db2.Exec(`CREATE TABLE auth (
|
||||
name VARCHAR(32) PRIMARY KEY NOT NULL,
|
||||
password VARCHAR(512) NOT NULL
|
||||
);
|
||||
CREATE TABLE privileges (
|
||||
name VARCHAR(32) PRIMARY KEY NOT NULL,
|
||||
privileges VARCHAR(1024)
|
||||
);
|
||||
CREATE TABLE ban (
|
||||
addr VARCHAR(39) PRIMARY KEY NOT NULL,
|
||||
name VARCHAR(32) NOT NULL
|
||||
);`); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
result := db.QueryRow("SELECT name, password FROM auth;")
|
||||
|
||||
for {
|
||||
var name, password string
|
||||
|
||||
if err := result.Scan(&name, &password); err != nil {
|
||||
if errors.Is(err, sql.ErrNoRows) {
|
||||
break
|
||||
}
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
_, err = db2.Exec(`INSERT INTO auth (
|
||||
name, password
|
||||
) VALUES (
|
||||
$1,
|
||||
$2
|
||||
);`, name, password)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -76,14 +132,44 @@ func convertDB(in, out string) error {
|
|||
}
|
||||
|
||||
func main() {
|
||||
if len(os.Args) != 3 {
|
||||
fmt.Println("Usage: multiserver_converter <in> <out>")
|
||||
if len(os.Args) < 4 {
|
||||
fmt.Println("Usage: multiserver_converter <sqlite3 <in> <out> | psql <in_db> <in_user> <in_password> <in_host> <in_port> <out_db> <out_user> <out_password> <out_host> <out_port>>")
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
if err := convertDB(os.Args[1], os.Args[2]); err != nil {
|
||||
fmt.Println(err)
|
||||
os.Exit(1)
|
||||
switch os.Args[1] {
|
||||
case "sqlite3":
|
||||
if len(os.Args) != 4 {
|
||||
fmt.Println("Usage: multiserver_converter <sqlite3 <in> <out> | psql <in_db> <in_user> <in_password> <in_host> <in_port> <out_db> <out_user> <out_password> <out_host> <out_port>>")
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
if err := convertSQLite3(os.Args[2], os.Args[3]); err != nil {
|
||||
fmt.Println(err)
|
||||
os.Exit(1)
|
||||
}
|
||||
case "psql":
|
||||
if len(os.Args) != 12 {
|
||||
fmt.Println("Usage: multiserver_converter <sqlite3 <in> <out> | psql <in_db> <in_user> <in_password> <in_host> <in_port> <out_db> <out_user> <out_password> <out_host> <out_port>>")
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
inPort, err := strconv.Atoi(os.Args[6])
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
outPort, err := strconv.Atoi(os.Args[11])
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
if err := convertPSQL(os.Args[2], os.Args[3], os.Args[4], os.Args[5], inPort, os.Args[7], os.Args[8], os.Args[9], os.Args[10], outPort); err != nil {
|
||||
fmt.Println(err)
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
fmt.Println("Database converted successfully")
|
||||
|
|
5
go.mod
5
go.mod
|
@ -2,4 +2,7 @@ module github.com/HimbeerserverDE/multiserver/multiserver_converter
|
|||
|
||||
go 1.16
|
||||
|
||||
require github.com/mattn/go-sqlite3 v1.14.7
|
||||
require (
|
||||
github.com/lib/pq v1.10.1
|
||||
github.com/mattn/go-sqlite3 v1.14.7
|
||||
)
|
||||
|
|
2
go.sum
2
go.sum
|
@ -1,2 +1,4 @@
|
|||
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.7 h1:fxWBnXkxfM6sRiuH3bqJ4CfzZojMOLVc0UTsTglEghA=
|
||||
github.com/mattn/go-sqlite3 v1.14.7/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
|
||||
|
|
Loading…
Reference in New Issue