diff --git a/core/config.go b/core/config.go index aa9a84e..63e13a8 100644 --- a/core/config.go +++ b/core/config.go @@ -1,12 +1,48 @@ package core import ( - "errors" + "encoding/json" + "io/ioutil" + "log" + "path/filepath" ) type Config struct { } -func LoadConfig(configPath string) (*Config, error) { - return nil, errors.New("Not implemented") +type ConfigRoot struct { + Contacts map[string]ConfigContact + Identity ConfigIdentity +} + +type ConfigContact struct { + Hostname string + LastConnected string + Nickname string + WhenCreated string +} + +type ConfigIdentity struct { + DataDirectory string + HostnameBlacklist []string + ServiceKey string +} + +func LoadConfig(configPath string) (*Config, error) { + configFile := filepath.Join(configPath, "ricochet.json") + configData, err := ioutil.ReadFile(configFile) + if err != nil { + log.Printf("Config read error from %s: %v", configFile, err) + return nil, err + } + + var root ConfigRoot + if err := json.Unmarshal(configData, &root); err != nil { + log.Printf("Config parse error: %v", err) + return nil, err + } + + log.Printf("Config: %v", root) + + return &Config{}, nil }