func NewConfigFromTomlFile(configpath string) (*Config, error) { buf, err := ioutil.ReadFile(configpath) if err != nil { return nil, fmt.Errorf("Failed to read config file: %v", err) } cfg := &Config{ PasswordFile: path.Join(os.Getenv("HOME"), ".otaru", "password.txt"), UseSeparateBucketForMetadata: false, CacheDir: "/var/cache/otaru", } if err := toml.Unmarshal(buf, &cfg); err != nil { return nil, fmt.Errorf("Failed to parse config file: %v", err) } if cfg.Password != "" { log.Printf("Storing password directly on config file is not recommended.") } else { fi, err := os.Stat(cfg.PasswordFile) if err != nil { return nil, fmt.Errorf("Failed to stat password file \"%s\": %v", cfg.PasswordFile, err) } if fi.Mode()&os.ModePerm != 0400 { log.Printf("Password file \"%s\" permission is not 0400", cfg.PasswordFile) } cfg.Password, err = util.StringFromFile(cfg.PasswordFile) if err != nil { return nil, fmt.Errorf("Failed to read password file \"%s\": %v", cfg.PasswordFile, err) } } if cfg.ProjectName == "" { return nil, fmt.Errorf("Config Error: ProjectName must be given.") } if cfg.BucketName == "" { return nil, fmt.Errorf("Config Error: BucketName must be given.") } return cfg, nil }
func NewConfig(configdir string) (*Config, error) { tomlpath := path.Join(configdir, "config.toml") buf, err := ioutil.ReadFile(tomlpath) if err != nil { return nil, fmt.Errorf("Failed to read config file: %v", err) } cfg := &Config{ PasswordFile: path.Join(configdir, "password.txt"), UseSeparateBucketForMetadata: false, CacheDir: "/var/cache/otaru", CredentialsFilePath: path.Join(configdir, "credentials.json"), TokenCacheFilePath: path.Join(configdir, "tokencache.json"), } if err := toml.Unmarshal(buf, &cfg); err != nil { return nil, fmt.Errorf("Failed to parse config file: %v", err) } if cfg.Password != "" { logger.Warningf(mylog, "Storing password directly on config file is not recommended.") } else { fi, err := os.Stat(cfg.PasswordFile) if err != nil { return nil, fmt.Errorf("Failed to stat password file \"%s\": %v", cfg.PasswordFile, err) } if fi.Mode()&os.ModePerm != 0400 { logger.Warningf(mylog, "Warning: Password file \"%s\" permission is not 0400", cfg.PasswordFile) } cfg.Password, err = util.StringFromFile(cfg.PasswordFile) if err != nil { return nil, fmt.Errorf("Failed to read password file \"%s\": %v", cfg.PasswordFile, err) } } if cfg.ProjectName == "" { return nil, fmt.Errorf("Config Error: ProjectName must be given.") } if cfg.BucketName == "" { return nil, fmt.Errorf("Config Error: BucketName must be given.") } if _, err := os.Stat(cfg.CredentialsFilePath); err != nil { if os.IsNotExist(err) { return nil, fmt.Errorf("Credentials not found at %s", cfg.CredentialsFilePath) } else { return nil, fmt.Errorf("Failed to stat credentials file \"%s\" from unknown err: %v", cfg.CredentialsFilePath, err) } } if _, err := os.Stat(cfg.TokenCacheFilePath); err != nil { if os.IsNotExist(err) { logger.Warningf(mylog, "Warning: Token cache file found not at %s", cfg.TokenCacheFilePath) } else { return nil, fmt.Errorf("Failed to stat token cache file \"%s\" from unknown err: %v", cfg.TokenCacheFilePath, err) } } if cfg.Fluent.TagPrefix == "" { cfg.Fluent.TagPrefix = "otaru" } return cfg, nil }