diff --git a/cmd/rove/main.go b/cmd/rove/main.go index 37fef86..d396e6b 100644 --- a/cmd/rove/main.go +++ b/cmd/rove/main.go @@ -33,13 +33,13 @@ func printUsage() { } var home = os.Getenv("HOME") -var defaultData = path.Join(home, ".local/share/rove.json") +var defaultDataPath = path.Join(home, ".local/share/") const gRPCport = 9090 // General usage var host = flag.String("host", "", "path to game host server") -var data = flag.String("data", defaultData, "data file for storage") +var data = flag.String("data", defaultDataPath, "data location for storage (or $USER_DATA if set)") // For register command var name = flag.String("name", "", "used with status command for the account name") @@ -70,23 +70,31 @@ func InnerMain(command string) error { Accounts: make(map[string]string), } + // Allow overriding the data path + var datapath = *data + var override = os.Getenv("USER_DATA") + if len(override) > 0 { + datapath = override + } + datapath = path.Join(datapath, "rove.json") + // Create the path if needed - path := filepath.Dir(*data) + path := filepath.Dir(datapath) _, err := os.Stat(path) if os.IsNotExist(err) { os.MkdirAll(path, os.ModePerm) } else { // Read the file - _, err = os.Stat(*data) + _, err = os.Stat(datapath) if !os.IsNotExist(err) { - if b, err := ioutil.ReadFile(*data); err != nil { - return fmt.Errorf("failed to read file %s error: %s", *data, err) + if b, err := ioutil.ReadFile(datapath); err != nil { + return fmt.Errorf("failed to read file %s error: %s", datapath, err) } else if len(b) == 0 { - return fmt.Errorf("file %s was empty, assumin fresh data", *data) + return fmt.Errorf("file %s was empty, assumin fresh data", datapath) } else if err := json.Unmarshal(b, &config); err != nil { - return fmt.Errorf("failed to unmarshal file %s error: %s", *data, err) + return fmt.Errorf("failed to unmarshal file %s error: %s", datapath, err) } } @@ -219,8 +227,8 @@ func InnerMain(command string) error { // Save out the persistent file if b, err := json.MarshalIndent(config, "", "\t"); err != nil { return fmt.Errorf("failed to marshal data error: %s", err) - } else if err := ioutil.WriteFile(*data, b, os.ModePerm); err != nil { - return fmt.Errorf("failed to save file %s error: %s", *data, err) + } else if err := ioutil.WriteFile(datapath, b, os.ModePerm); err != nil { + return fmt.Errorf("failed to save file %s error: %s", datapath, err) } return nil diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml index 41692a3..a73434e 100644 --- a/snap/snapcraft.yaml +++ b/snap/snapcraft.yaml @@ -16,6 +16,8 @@ apps: command: bin/rove plugs: - network + environment: + USER_DATA: $SNAP_USER_DATA rove-server: command: bin/rove-server plugs: @@ -23,16 +25,21 @@ apps: - network-bind environment: WORDS_FILE : "$SNAP/data/words_alpha.txt" + DATA_PATH : $SNAP_USER_DATA rove-accountant: command: bin/rove-accountant plugs: - network - network-bind + environment: + DATA_PATH : $SNAP_USER_DATA rove-rest-server: command: bin/rove-reverse-proxy plugs: - network - network-bind + environment: + DATA_PATH : $SNAP_USER_DATA parts: go-rove: