// config deals with the klex.json file in the root of the client Git repo.
package config
import (
"fmt"
"io/ioutil"
"os"
"path"
"strings"
"oscarkilo.com/klex-git/util"
)
type Config struct {
ProjectName string `json:"project_name"`
OwnerUsername string `json:"owner_username"`
ReaderUsername string `json:"reader_username"`
DatasetsDir string `json:"datasets_dir"`
FunctionsDir string `json:"functions_dir"`
PipelinesDir string `json:"pipelines_dir"`
KlexUrl string `json:"klex_url"`
ApiKeyFile string `json:"api_key_file"`
// GitRoot is the parent directory of klex.json.
GitRoot string `json:"-"`
// ApiKey is read from the location specified above.
ApiKey string `json:"-"`
}
// ReadConfig reads the klex.json file from this Git repo's root.
func ReadConfig() (*Config, error) {
root, err := util.FindRoot()
if err != nil {
return nil, err
}
file := path.Join(root, "klex.json")
var config Config
err = util.ReadJsonFile(file, &config)
config.GitRoot = root
if config.ApiKeyFile != "" {
apiFile := path.Join(root, config.ApiKeyFile)
buf, err := ioutil.ReadFile(apiFile)
if err != nil {
return nil, err
}
config.ApiKey = strings.TrimSpace(string(buf))
}
if os.Getenv("KLEX_API_KEY") != "" {
if config.ApiKey != "" {
fmt.Printf("KLEX_API_KEY env var overrides api_key_file in klex.json\n")
}
config.ApiKey = os.Getenv("KLEX_API_KEY")
}
if config.ApiKey == "" {
return nil, fmt.Errorf("Failed to read api_key_file='%s' and KLEX_API_KEY env var", config.ApiKeyFile)
}
return &config, err
}