From 7db81a88e45c704650ab2636759fad9edab0a8f6 Mon Sep 17 00:00:00 2001 From: "dc.To" Date: Wed, 6 Aug 2025 17:51:00 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=85=8D=E7=BD=AE=E8=B0=83?= =?UTF-8?q?=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- chain/clientchain.go | 8 ++++++-- config/config.go | 29 +++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 config/config.go 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") +}