package grpc import ( "context" "google.golang.org/grpc/metadata" pb "sportfitness/base/api/grpc/base" "sportfitness/base/assembly/base/service" "strings" ) type Api struct { pb.UnimplementedApiServer } func (Api) getRemoteIp(ctx context.Context) string { if md, ok := metadata.FromIncomingContext(ctx); ok { ip := md.Get("x-forwarded-for") if len(ip) > 0 { return ip[0] } } return "" } func (Api) getUserAgent(ctx context.Context) string { if md, ok := metadata.FromIncomingContext(ctx); ok { agents := md.Get("user-agent") return strings.Join(agents, "\n") } return "" } func (Api) getToken(ctx context.Context) (token string) { if md, ok := metadata.FromIncomingContext(ctx); ok { sl := md.Get("token") if len(sl) >= 1 { token = sl[0] } } return } func (a Api) SignIn(ctx context.Context, q *pb.SignInRequest) (*pb.SignInReply, error) { token := service.User{}.SignInUserCodePassword( q.Name, q.Password, a.getRemoteIp(ctx), a.getUserAgent(ctx)) return &pb.SignInReply{Token: token}, nil }