diff --git a/admin/main.go b/admin/main.go index 112d94de..f6a494e3 100644 --- a/admin/main.go +++ b/admin/main.go @@ -20,7 +20,7 @@ var StaticDir string func main() { var bind = flag.String("bind", "127.0.0.1:8081", "Bind port/socket") - var dsn = flag.String("dsn", "fic:fic@/fic", "DSN to connect to the MySQL server") + var dsn = flag.String("dsn", fic.DSNGenerator(), "DSN to connect to the MySQL server") var baseURL = flag.String("baseurl", "/", "URL prepended to each URL") flag.StringVar(&SubmissionDir, "submission", "./submissions/", "Base directory where save submissions") flag.StringVar(&PKIDir, "pki", "./pki/", "Base directory where found PKI scripts") @@ -70,7 +70,7 @@ func main() { } log.Println("Opening database...") - if err := fic.DBInit(fmt.Sprintf("%s?parseTime=true", *dsn)); err != nil { + if err := fic.DBInit(*dsn); err != nil { log.Fatal("Cannot open the database: ", err) } defer fic.DBClose() diff --git a/backend/main.go b/backend/main.go index 6febea19..a0cb785b 100644 --- a/backend/main.go +++ b/backend/main.go @@ -2,7 +2,6 @@ package main import ( "flag" - "fmt" "io/ioutil" "log" "math/rand" @@ -66,7 +65,7 @@ func reloadSettings(config settings.FICSettings) { } func main() { - var dsn = flag.String("dsn", "fic:fic@/fic", "DSN to connect to the MySQL server") + var dsn = flag.String("dsn", fic.DSNGenerator(), "DSN to connect to the MySQL server") flag.StringVar(&SubmissionDir, "submission", "./submissions", "Base directory where save submissions") flag.StringVar(&TeamsDir, "teams", "./TEAMS", "Base directory where save teams JSON files") flag.StringVar(&fic.FilesDir, "files", "/files", "Request path prefix to reach files") @@ -87,7 +86,7 @@ func main() { } log.Println("Opening DB...") - if err := fic.DBInit(fmt.Sprintf("%s?parseTime=true", *dsn)); err != nil { + if err := fic.DBInit(*dsn); err != nil { log.Fatal("Cannot open the database: ", err) } defer fic.DBClose() diff --git a/libfic/db.go b/libfic/db.go index a0ac11a8..a08dfc00 100644 --- a/libfic/db.go +++ b/libfic/db.go @@ -2,14 +2,40 @@ package fic import ( "database/sql" + "os" _ "github.com/go-sql-driver/mysql" ) var db *sql.DB +func DSNGenerator() string { + db_user := "fic" + db_password := "fic" + db_host := "" + db_db := "fic" + + if v, exists := os.LookupEnv("MYSQL_HOST"); exists { + db_host = v + } + if v, exists := os.LookupEnv("MYSQL_PASSWORD"); exists { + db_password = v + } else if v, exists := os.LookupEnv("MYSQL_ROOT_PASSWORD"); exists { + db_user = "root" + db_password = v + } + if v, exists := os.LookupEnv("MYSQL_USER"); exists { + db_user = v + } + if v, exists := os.LookupEnv("MYSQL_DATABASE"); exists { + db_db = v + } + + return db_user + ":" + db_password + "@" + db_host + "/" + db_db +} + func DBInit(dsn string) error { var err error - if db, err = sql.Open("mysql", dsn); err != nil { + if db, err = sql.Open("mysql", dsn + "?parseTime=true&foreign_key_checks=1"); err != nil { return err } return nil @@ -158,9 +184,6 @@ CREATE TABLE IF NOT EXISTS team_hints( `); err != nil { return err } - if _, err := db.Exec("SET FOREIGN_KEY_CHECKS = 1;"); err != nil { - return err - } return nil }