- `STORAGE_FILEPATH=` disables storing to and reading from a local servers.json file - `STORAGE_FILEPATH` defaults to `/gluetun/servers.json` - Fix #2074
60 lines
1.3 KiB
Go
60 lines
1.3 KiB
Go
package settings
|
|
|
|
import (
|
|
"fmt"
|
|
"path/filepath"
|
|
|
|
"github.com/qdm12/gosettings"
|
|
"github.com/qdm12/gosettings/reader"
|
|
"github.com/qdm12/gotree"
|
|
)
|
|
|
|
// Storage contains settings to configure the storage.
|
|
type Storage struct {
|
|
// Filepath is the path to the servers.json file. An empty string disables on-disk storage.
|
|
Filepath *string
|
|
}
|
|
|
|
func (s Storage) validate() (err error) {
|
|
if *s.Filepath != "" { // optional
|
|
_, err := filepath.Abs(*s.Filepath)
|
|
if err != nil {
|
|
return fmt.Errorf("filepath is not valid: %w", err)
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (s *Storage) copy() (copied Storage) {
|
|
return Storage{
|
|
Filepath: gosettings.CopyPointer(s.Filepath),
|
|
}
|
|
}
|
|
|
|
func (s *Storage) overrideWith(other Storage) {
|
|
s.Filepath = gosettings.OverrideWithPointer(s.Filepath, other.Filepath)
|
|
}
|
|
|
|
func (s *Storage) setDefaults() {
|
|
const defaultFilepath = "/gluetun/servers.json"
|
|
s.Filepath = gosettings.DefaultPointer(s.Filepath, defaultFilepath)
|
|
}
|
|
|
|
func (s Storage) String() string {
|
|
return s.toLinesNode().String()
|
|
}
|
|
|
|
func (s Storage) toLinesNode() (node *gotree.Node) {
|
|
if *s.Filepath == "" {
|
|
return gotree.New("Storage settings: disabled")
|
|
}
|
|
node = gotree.New("Storage settings:")
|
|
node.Appendf("Filepath: %s", *s.Filepath)
|
|
return node
|
|
}
|
|
|
|
func (s *Storage) read(r *reader.Reader) (err error) {
|
|
s.Filepath = r.Get("STORAGE_FILEPATH", reader.AcceptEmpty(true))
|
|
return nil
|
|
}
|