Implement config singleton (#1268)
* Implement config singleton * Pass token in grpc request headers * Refactor BearerScheme * Fix typo
This commit is contained in:
		| @@ -9,39 +9,20 @@ import ( | ||||
|  | ||||
| 	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(key string) (string, error) { | ||||
| 	// get the filepath | ||||
| 	fp, err := filePath() | ||||
| 	if err != nil { | ||||
| 		return "", err | ||||
| 	} | ||||
|  | ||||
| 	// create a new config | ||||
| 	c, err := conf.NewConfig( | ||||
| 		conf.WithSource( | ||||
| 			file.NewSource( | ||||
| 				file.WithPath(fp), | ||||
| 			), | ||||
| 		), | ||||
| 	) | ||||
| 	if err != nil { | ||||
| 		return "", err | ||||
| 	} | ||||
|  | ||||
| 	// load the config | ||||
| 	if err := c.Load(); err != nil { | ||||
| 		return "", err | ||||
| 	} | ||||
|  | ||||
| 	// set a value | ||||
| 	tk := c.Get(key).String("") | ||||
|  | ||||
| 	tk := config.Get(key).String("") | ||||
| 	return strings.TrimSpace(tk), nil | ||||
| } | ||||
|  | ||||
| @@ -53,11 +34,36 @@ func Set(key, value string) error { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	// set the value | ||||
| 	config.Set(value, key) | ||||
|  | ||||
| 	// 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 { | ||||
| 		return err | ||||
| 		log.Error(err) | ||||
| 		return conf.DefaultConfig | ||||
| 	} | ||||
|  | ||||
| 	// create a new config | ||||
| @@ -69,25 +75,16 @@ func Set(key, value string) error { | ||||
| 		), | ||||
| 	) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 		log.Error(err) | ||||
| 		return conf.DefaultConfig | ||||
| 	} | ||||
|  | ||||
| 	// load the config | ||||
| 	if err := c.Load(); err != nil { | ||||
| 		return err | ||||
| 		log.Error(err) | ||||
| 		return conf.DefaultConfig | ||||
| 	} | ||||
|  | ||||
| 	// set a value | ||||
| 	c.Set(value, key) | ||||
|  | ||||
| 	// write the file | ||||
| 	return ioutil.WriteFile(fp, c.Bytes(), 0644) | ||||
| } | ||||
|  | ||||
| func filePath() (string, error) { | ||||
| 	usr, err := user.Current() | ||||
| 	if err != nil { | ||||
| 		return "", err | ||||
| 	} | ||||
| 	return filepath.Join(usr.HomeDir, FileName), nil | ||||
| 	// return the conf | ||||
| 	return c | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user