diff --git a/chain/clientchain.go b/chain/clientchain.go index 897065b..ce65f4d 100644 --- a/chain/clientchain.go +++ b/chain/clientchain.go @@ -52,14 +52,18 @@ func ClientMetadataUnaryChain(ctx context.Context, req interface{}, info *grpc.U if strings.HasPrefix(k, "x-cfg-") && len(v) > 0 { c := strings.Join(v, "") if len(c) > 0 { - adapter, err := gcfg.NewAdapterContent(gbase64.MustDecodeToString(v[0])) + a, err := gcfg.NewAdapterContent(gbase64.MustDecodeToString(v[0])) if err != nil { g.Log("unary").Error(ctx, err) + continue } - g.Cfg(strings.TrimPrefix(k, "x-cfg-")).SetAdapter(adapter) + g.Cfg(strings.TrimPrefix(k, "x-cfg-")).SetAdapter(a) } + } } + } else { + g.Log("unary").Error(ctx, "No Metadata from incoming cfg context") } return handler(ctx, req) } diff --git a/config/config.go b/config/config.go new file mode 100644 index 0000000..72b65db --- /dev/null +++ b/config/config.go @@ -0,0 +1,29 @@ +package config + +import ( + "context" + + "github.com/gogf/gf/v2/encoding/gbase64" + "github.com/gogf/gf/v2/frame/g" + "github.com/gogf/gf/v2/os/gcfg" + "google.golang.org/grpc/metadata" +) + +func All(ctx context.Context) *gcfg.Config { + return g.Cfg() +} + +func Api(ctx context.Context) *gcfg.Config { + md, ok := metadata.FromIncomingContext(ctx) + c := md.Get("x-cfg-api") + if ok && len(c) > 0 { + b, _ := gbase64.DecodeToString(c[0]) + a, err := gcfg.NewAdapterContent(b) + if err != nil { + g.Log("config with api").Error(ctx, err) + } + return gcfg.NewWithAdapter(a) + } + + return g.Cfg("api") +}