| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- package svc
- import (
- "context"
- "fmt"
- "net/http"
- "net/url"
- "slow_wild_api/apps/internal/config"
- "slow_wild_api/apps/internal/middleware"
- "google.golang.org/grpc"
- "google.golang.org/grpc/metadata"
- "git.banshen.xyz/huangguangrong/slow_wild_protobuff/slowwild/slowwildserverclient"
- "github.com/tencentyun/cos-go-sdk-v5"
- "github.com/zeromicro/go-zero/rest"
- "github.com/zeromicro/go-zero/zrpc"
- )
- type ServiceContext struct {
- Config config.Config
- SlowWildPb slowwildserverclient.SlowWildServer
- OptionalJwtMiddleware rest.Middleware
- TencentCos *cos.Client
- }
- // 创建 gRPC 拦截器
- func userAuthInterceptor() grpc.UnaryClientInterceptor {
- return func(ctx context.Context, method string, req, reply interface{}, cc *grpc.ClientConn, invoker grpc.UnaryInvoker, opts ...grpc.CallOption) error {
- // 从context中获取user_id
- if userId := ctx.Value("user_id"); userId != nil {
- // 创建metadata
- md := metadata.New(map[string]string{
- "user_id": fmt.Sprint(userId),
- })
- // 将metadata添加到context
- ctx = metadata.NewOutgoingContext(ctx, md)
- }
- return invoker(ctx, method, req, reply, cc, opts...)
- }
- }
- func getTencentCosClient(bucketUrl string, secretId, secretKey string) *cos.Client {
- u, _ := url.Parse(bucketUrl)
- b := &cos.BaseURL{BucketURL: u}
- client := cos.NewClient(b, &http.Client{
- Transport: &cos.AuthorizationTransport{
- SecretID: secretId,
- SecretKey: secretKey,
- },
- })
- return client
- }
- func NewServiceContext(c config.Config) *ServiceContext {
- // 创建带有拦截器的 gRPC 客户端
- client := zrpc.MustNewClient(c.SlowwildRpc,
- zrpc.WithUnaryClientInterceptor(userAuthInterceptor()))
- return &ServiceContext{
- Config: c,
- SlowWildPb: slowwildserverclient.NewSlowWildServer(client),
- OptionalJwtMiddleware: middleware.NewOptionalJwtMiddleware(c.Auth.AccessSecret).Handle,
- TencentCos: getTencentCosClient(c.TencentCos.BucketUrl, c.TencentCos.SecretId, c.TencentCos.SecretKey),
- }
- }
|