diff --git a/src/factorio_server.go b/src/factorio_server.go index 646ae7a5..94ad6b66 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(filepath.Join(config.FactorioConfigDir, config.FactorioAdminFile)); os.IsNotExist(err) { + //save empty admins-file + ioutil.WriteFile(filepath.Join(config.FactorioConfigDir, config.FactorioAdminFile), []byte("[]"), 0664) + } else { + data, err := ioutil.ReadFile(filepath.Join(config.FactorioConfigDir, 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 } @@ -143,11 +166,15 @@ 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, } + 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 { diff --git a/src/handlers.go b/src/handlers.go index 47fabcca..e6c3ead5 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(filepath.Join(config.FactorioConfigDir, 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..79833667 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 = "server-adminlist.json" config.MaxUploadSize = *factorioMaxUpload if runtime.GOOS == "windows" {