Implemented configuration
parent
a064e2fae0
commit
52db205407
@ -0,0 +1,126 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"github.com/BurntSushi/toml"
|
||||
)
|
||||
|
||||
type ConfigProfile struct {
|
||||
From string
|
||||
Organization string
|
||||
}
|
||||
|
||||
type Config struct {
|
||||
ConfigFile string `toml:"-"`
|
||||
|
||||
ConnectionString string
|
||||
CachePath string
|
||||
Logfile string
|
||||
|
||||
Profile ConfigProfile
|
||||
}
|
||||
|
||||
func LoadConfig() (*Config, error) {
|
||||
configDir, exist := os.LookupEnv("XDG_CONFIG_HOME")
|
||||
if exist == false {
|
||||
configDir, exist = os.LookupEnv("HOME")
|
||||
if exist == false {
|
||||
return nil, errors.New("No XDG_CONFIG_HOME or HOME set!")
|
||||
}
|
||||
configDir = fmt.Sprintf("%s/.config", configDir)
|
||||
}
|
||||
|
||||
configFile := fmt.Sprintf("%s/superhighway84.toml", configDir)
|
||||
|
||||
f, err := os.OpenFile(configFile, os.O_CREATE|os.O_RDWR, 0644)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer f.Close()
|
||||
|
||||
configFileContent, err := ioutil.ReadAll(f)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
cfg := new(Config)
|
||||
_, err = toml.Decode(string(configFileContent), &cfg)
|
||||
|
||||
cfg.ConfigFile = configFile
|
||||
return cfg, nil
|
||||
}
|
||||
|
||||
func (cfg *Config) Persist() (error) {
|
||||
buf := new(bytes.Buffer)
|
||||
if err := toml.NewEncoder(buf).Encode(cfg); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := ioutil.WriteFile(cfg.ConfigFile, buf.Bytes(), 0644); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (cfg *Config) WasSetup() (bool) {
|
||||
if cfg.CachePath == "" ||
|
||||
cfg.ConnectionString == "" ||
|
||||
cfg.Logfile == "" {
|
||||
return false
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
func (cfg *Config) Setup() (error) {
|
||||
fmt.Printf("\nSUPERHIGHWAY84\n\nInitial Setup\n-------------\n\n")
|
||||
|
||||
defaultConnectionString := "/orbitdb/bafyreifdpagppa7ve45odxuvudz5snbzcybwyfer777huckl4li4zbc5k4/superhighway84"
|
||||
fmt.Printf("Database connection string [%s]: ", defaultConnectionString)
|
||||
fmt.Scanln(&cfg.ConnectionString)
|
||||
if strings.TrimSpace(cfg.ConnectionString) == "" {
|
||||
cfg.ConnectionString = defaultConnectionString
|
||||
}
|
||||
|
||||
cacheDir, exist := os.LookupEnv("XDG_CACHE_HOME")
|
||||
if exist == false {
|
||||
cacheDir = fmt.Sprintf("%s/.cache", os.Getenv("HOME"))
|
||||
}
|
||||
|
||||
defaultCachePath := fmt.Sprintf("%s/superhighway84", cacheDir)
|
||||
fmt.Printf("Database cache path [%s]: ", defaultCachePath)
|
||||
fmt.Scanln(&cfg.CachePath)
|
||||
if strings.TrimSpace(cfg.CachePath) == "" {
|
||||
cfg.CachePath = defaultCachePath
|
||||
}
|
||||
|
||||
defaultLogfile := fmt.Sprintf("%s/superhighway84.log", cacheDir)
|
||||
fmt.Printf("Logfile path [%s]: ", defaultLogfile)
|
||||
fmt.Scanln(&cfg.Logfile)
|
||||
if strings.TrimSpace(cfg.Logfile) == "" {
|
||||
cfg.Logfile = defaultLogfile
|
||||
}
|
||||
|
||||
|
||||
fmt.Printf("\nProfile information\n-------------------\n\n")
|
||||
|
||||
defaultProfileFrom := fmt.Sprintf("%s@localhost", os.Getenv("USER"))
|
||||
fmt.Printf("From [%s]: ", defaultProfileFrom)
|
||||
fmt.Scanln(&cfg.Profile.From)
|
||||
if strings.TrimSpace(cfg.Profile.From) == "" {
|
||||
cfg.Profile.From = defaultProfileFrom
|
||||
}
|
||||
|
||||
fmt.Printf("Organization []: ")
|
||||
fmt.Scanln(&cfg.Profile.Organization)
|
||||
|
||||
return cfg.Persist()
|
||||
}
|
||||
|
Loading…
Reference in New Issue