From db5dcfbd4053d5d64159636abe9a73b9a1f541c5 Mon Sep 17 00:00:00 2001 From: knoxfighter Date: Mon, 13 May 2019 00:16:32 +0200 Subject: [PATCH 1/4] fixed hardcoded SettingsPath --- src/factorio_server.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/factorio_server.go b/src/factorio_server.go index 646ae7a5..1387dfdd 100644 --- a/src/factorio_server.go +++ b/src/factorio_server.go @@ -143,7 +143,7 @@ func (f *FactorioServer) Run() error { args := []string{ "--bind", (f.BindIP), "--port", strconv.Itoa(f.Port), - "--server-settings", filepath.Join(config.FactorioConfigDir, "server-settings.json"), + "--server-settings", filepath.Join(config.FactorioConfigDir, config.SettingsFile), "--rcon-port", strconv.Itoa(config.FactorioRconPort), "--rcon-password", config.FactorioRconPass, } From 0ab8ae4329b7cbb4edc22a197738894d69293824 Mon Sep 17 00:00:00 2001 From: knoxfighter Date: Mon, 13 May 2019 02:31:29 +0200 Subject: [PATCH 2/4] added support for new server-adminlist --- src/factorio_server.go | 23 +++++++++++++++++++++++ src/handlers.go | 14 ++++++++++++++ src/main.go | 2 ++ 3 files changed, 39 insertions(+) diff --git a/src/factorio_server.go b/src/factorio_server.go index 1387dfdd..8cf36fac 100644 --- a/src/factorio_server.go +++ b/src/factorio_server.go @@ -127,6 +127,29 @@ func initFactorio() (f *FactorioServer, err error) { f.BaseModVersion = modInfo.Version + // load admins from additional file + if(f.Version.Greater(Version{0,17,0})) { + if _, err := os.Stat(config.FactorioAdminFile); os.IsNotExist(err) { + //save empty admins-file + ioutil.WriteFile(config.FactorioAdminFile, []byte("[]"), 0664) + } else { + data, err := ioutil.ReadFile(config.FactorioAdminFile) + if err != nil { + log.Printf("Error loading FactorioAdminFile: %s", err) + return f, err + } + + var jsonData interface{} + err = json.Unmarshal(data, &jsonData) + if err != nil { + log.Printf("Error unmarshalling FactorioAdminFile: %s", err) + return f, err + } + + f.Settings["admins"] = jsonData + } + } + return } diff --git a/src/handlers.go b/src/handlers.go index 47fabcca..0e572703 100644 --- a/src/handlers.go +++ b/src/handlers.go @@ -764,6 +764,20 @@ func UpdateServerSettings(w http.ResponseWriter, r *http.Request) { log.Printf("Saved Factorio server settings in server-settings.json") } + if(FactorioServ.Version.Greater(Version{0,17,0})) { + // save admins to adminJson + admins, err := json.MarshalIndent(FactorioServ.Settings["admins"], "", " ") + if err != nil { + log.Printf("Failed to marshal admins-Setting: %s", err) + return + } + err = ioutil.WriteFile(config.FactorioAdminFile, admins, 0664) + if err != nil { + log.Printf("Failed to save admins: %s", err) + return + } + } + resp.Success = true resp.Data = fmt.Sprintf("Settings successfully saved") if err := json.NewEncoder(w).Encode(resp); err != nil { diff --git a/src/main.go b/src/main.go index b9a9aa9f..aff991c2 100644 --- a/src/main.go +++ b/src/main.go @@ -24,6 +24,7 @@ type Config struct { FactorioRconPass string `json:"rcon_pass"` FactorioCredentialsFile string `json:"factorio_credentials_file"` FactorioIP string `json:"factorio_ip"` + FactorioAdminFile string `json:"-"` ServerIP string `json:"server_ip"` ServerPort string `json:"server_port"` MaxUploadSize int64 `json:"max_upload_size"` @@ -87,6 +88,7 @@ func parseFlags() { config.FactorioConfigFile = filepath.Join(config.FactorioDir, *factorioConfigFile) config.FactorioBinary = filepath.Join(config.FactorioDir, *factorioBinary) config.FactorioCredentialsFile = "./factorio.auth" + config.FactorioAdminFile = filepath.Join(config.FactorioDir, "server-adminlist.json") config.MaxUploadSize = *factorioMaxUpload if runtime.GOOS == "windows" { From 3abe2540baaef397bc086a5e47ea6ab741e2bb0f Mon Sep 17 00:00:00 2001 From: knoxfighter Date: Mon, 13 May 2019 16:01:27 +0200 Subject: [PATCH 3/4] moved file to config-dir & set it to factorio per parameter --- src/factorio_server.go | 7 ++++--- src/handlers.go | 2 +- src/main.go | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/factorio_server.go b/src/factorio_server.go index 8cf36fac..3d27372b 100644 --- a/src/factorio_server.go +++ b/src/factorio_server.go @@ -129,11 +129,11 @@ func initFactorio() (f *FactorioServer, err error) { // load admins from additional file if(f.Version.Greater(Version{0,17,0})) { - if _, err := os.Stat(config.FactorioAdminFile); os.IsNotExist(err) { + if _, err := os.Stat(filepath.Join(config.FactorioConfigDir, config.FactorioAdminFile)); os.IsNotExist(err) { //save empty admins-file - ioutil.WriteFile(config.FactorioAdminFile, []byte("[]"), 0664) + ioutil.WriteFile(filepath.Join(config.FactorioConfigDir, config.FactorioAdminFile), []byte("[]"), 0664) } else { - data, err := ioutil.ReadFile(config.FactorioAdminFile) + data, err := ioutil.ReadFile(filepath.Join(config.FactorioConfigDir, config.FactorioAdminFile)) if err != nil { log.Printf("Error loading FactorioAdminFile: %s", err) return f, err @@ -167,6 +167,7 @@ func (f *FactorioServer) Run() error { "--bind", (f.BindIP), "--port", strconv.Itoa(f.Port), "--server-settings", filepath.Join(config.FactorioConfigDir, config.SettingsFile), + "--server-adminlist", filepath.Join(config.FactorioConfigDir, config.FactorioAdminFile), "--rcon-port", strconv.Itoa(config.FactorioRconPort), "--rcon-password", config.FactorioRconPass, } diff --git a/src/handlers.go b/src/handlers.go index 0e572703..e6c3ead5 100644 --- a/src/handlers.go +++ b/src/handlers.go @@ -771,7 +771,7 @@ func UpdateServerSettings(w http.ResponseWriter, r *http.Request) { log.Printf("Failed to marshal admins-Setting: %s", err) return } - err = ioutil.WriteFile(config.FactorioAdminFile, admins, 0664) + err = ioutil.WriteFile(filepath.Join(config.FactorioConfigDir, config.FactorioAdminFile), admins, 0664) if err != nil { log.Printf("Failed to save admins: %s", err) return diff --git a/src/main.go b/src/main.go index aff991c2..79833667 100644 --- a/src/main.go +++ b/src/main.go @@ -88,7 +88,7 @@ func parseFlags() { config.FactorioConfigFile = filepath.Join(config.FactorioDir, *factorioConfigFile) config.FactorioBinary = filepath.Join(config.FactorioDir, *factorioBinary) config.FactorioCredentialsFile = "./factorio.auth" - config.FactorioAdminFile = filepath.Join(config.FactorioDir, "server-adminlist.json") + config.FactorioAdminFile = "server-adminlist.json" config.MaxUploadSize = *factorioMaxUpload if runtime.GOOS == "windows" { From a6bc4510fa9cf1e8e6b62d5193e17de0f8139b63 Mon Sep 17 00:00:00 2001 From: knoxfighter Date: Mon, 13 May 2019 16:11:49 +0200 Subject: [PATCH 4/4] only append server-adminlist, when 0.17 or newer --- src/factorio_server.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/factorio_server.go b/src/factorio_server.go index 3d27372b..94ad6b66 100644 --- a/src/factorio_server.go +++ b/src/factorio_server.go @@ -167,11 +167,14 @@ func (f *FactorioServer) Run() error { "--bind", (f.BindIP), "--port", strconv.Itoa(f.Port), "--server-settings", filepath.Join(config.FactorioConfigDir, config.SettingsFile), - "--server-adminlist", filepath.Join(config.FactorioConfigDir, config.FactorioAdminFile), "--rcon-port", strconv.Itoa(config.FactorioRconPort), "--rcon-password", config.FactorioRconPass, } + if(f.Version.Greater(Version{0,17,0})) { + args = append(args, "--server-adminlist", filepath.Join(config.FactorioConfigDir, config.FactorioAdminFile)) + } + if f.Savefile == "Load Latest" { args = append(args, "--start-server-load-latest") } else {