91 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package config
 | |
| 
 | |
| import (
 | |
| 	"io/ioutil"
 | |
| 	"os"
 | |
| 	"os/user"
 | |
| 	"path/filepath"
 | |
| 	"strings"
 | |
| 
 | |
| 	conf "github.com/micro/go-micro/v2/config"
 | |
| 	"github.com/micro/go-micro/v2/config/source/file"
 | |
| 	"github.com/micro/go-micro/v2/util/log"
 | |
| )
 | |
| 
 | |
| // FileName for global micro config
 | |
| const FileName = ".micro"
 | |
| 
 | |
| // config is a singleton which is required to ensure
 | |
| // each function call doesn't load the .micro file
 | |
| // from disk
 | |
| var config = newConfig()
 | |
| 
 | |
| // Get a value from the .micro file
 | |
| func Get(path ...string) (string, error) {
 | |
| 	tk := config.Get(path...).String("")
 | |
| 	return strings.TrimSpace(tk), nil
 | |
| }
 | |
| 
 | |
| // Set a value in the .micro file
 | |
| func Set(value string, path ...string) error {
 | |
| 	// get the filepath
 | |
| 	fp, err := filePath()
 | |
| 	if err != nil {
 | |
| 		return err
 | |
| 	}
 | |
| 
 | |
| 	// set the value
 | |
| 	config.Set(value, path...)
 | |
| 
 | |
| 	// write to the file
 | |
| 	return ioutil.WriteFile(fp, config.Bytes(), 0644)
 | |
| }
 | |
| 
 | |
| func filePath() (string, error) {
 | |
| 	usr, err := user.Current()
 | |
| 	if err != nil {
 | |
| 		return "", err
 | |
| 	}
 | |
| 	return filepath.Join(usr.HomeDir, FileName), nil
 | |
| }
 | |
| 
 | |
| // newConfig returns a loaded config
 | |
| func newConfig() conf.Config {
 | |
| 	// get the filepath
 | |
| 	fp, err := filePath()
 | |
| 	if err != nil {
 | |
| 		log.Error(err)
 | |
| 		return conf.DefaultConfig
 | |
| 	}
 | |
| 
 | |
| 	// write the file if it does not exist
 | |
| 	if _, err := os.Stat(fp); os.IsNotExist(err) {
 | |
| 		ioutil.WriteFile(fp, []byte{}, 0644)
 | |
| 	} else if err != nil {
 | |
| 		log.Error(err)
 | |
| 		return conf.DefaultConfig
 | |
| 	}
 | |
| 
 | |
| 	// create a new config
 | |
| 	c, err := conf.NewConfig(
 | |
| 		conf.WithSource(
 | |
| 			file.NewSource(
 | |
| 				file.WithPath(fp),
 | |
| 			),
 | |
| 		),
 | |
| 	)
 | |
| 	if err != nil {
 | |
| 		log.Error(err)
 | |
| 		return conf.DefaultConfig
 | |
| 	}
 | |
| 
 | |
| 	// load the config
 | |
| 	if err := c.Load(); err != nil {
 | |
| 		log.Error(err)
 | |
| 		return conf.DefaultConfig
 | |
| 	}
 | |
| 
 | |
| 	// return the conf
 | |
| 	return c
 | |
| }
 |