diff --git a/go.mod b/go.mod index 4a67e11..202ca9c 100644 --- a/go.mod +++ b/go.mod @@ -8,6 +8,7 @@ retract v0.3.2 // Published accidentally. require ( github.com/InfluxCommunity/influxdb3-go v0.1.0 + github.com/gabriel-vasile/mimetype v1.4.3 github.com/gofrs/uuid v4.3.1+incompatible github.com/golang-migrate/migrate/v4 v4.15.2 github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 @@ -34,6 +35,7 @@ require ( go.temporal.io/sdk v1.21.0 go.uber.org/zap v1.24.0 golang.org/x/crypto v0.14.0 + golang.org/x/image v0.14.0 golang.org/x/net v0.17.0 google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc @@ -110,7 +112,7 @@ require ( golang.org/x/mod v0.8.0 // indirect golang.org/x/sync v0.4.0 // indirect golang.org/x/sys v0.13.0 // indirect - golang.org/x/text v0.13.0 // indirect + golang.org/x/text v0.14.0 // indirect golang.org/x/time v0.1.0 // indirect golang.org/x/tools v0.6.0 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect diff --git a/go.sum b/go.sum index c7e348d..60f30e4 100644 --- a/go.sum +++ b/go.sum @@ -778,6 +778,8 @@ github.com/fsouza/fake-gcs-server v1.17.0/go.mod h1:D1rTE4YCyHFNa99oyJJ5HyclvN/0 github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa/go.mod h1:KnogPXtdwXqoenmZCw6S+25EAm2MkxbG0deNDu4cbSA= github.com/gabriel-vasile/mimetype v1.3.1/go.mod h1:fA8fi6KUiG7MgQQ+mEWotXoEOvmxRtOJlERCzSmRvr8= github.com/gabriel-vasile/mimetype v1.4.0/go.mod h1:fA8fi6KUiG7MgQQ+mEWotXoEOvmxRtOJlERCzSmRvr8= +github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0= +github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk= github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= github.com/getkin/kin-openapi v0.61.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ= @@ -1782,6 +1784,8 @@ golang.org/x/image v0.0.0-20200430140353-33d19683fad8/go.mod h1:FeLwcggjj3mMvU+o golang.org/x/image v0.0.0-20200618115811-c13761719519/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/image v0.0.0-20201208152932-35266b937fa6/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/image v0.0.0-20210216034530-4410531fe030/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.14.0 h1:tNgSxAFe3jC4uYqvZdTr84SZoM1KfwdC9SKIFrLjFn4= +golang.org/x/image v0.14.0/go.mod h1:HUYqC05R2ZcZ3ejNQsIHQDQiwWM4JBqmm6MKANTp4LE= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -2108,8 +2112,8 @@ golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= -golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= diff --git a/pkg/handler/publichandler.go b/pkg/handler/publichandler.go index 343cd24..58aadcf 100644 --- a/pkg/handler/publichandler.go +++ b/pkg/handler/publichandler.go @@ -219,7 +219,6 @@ func (h *PublicHandler) GetUser(ctx context.Context, req *mgmtPB.GetUserRequest) logUUID.String(), ctxUserUID, eventName, - custom_otel.SetEventResource(pbUser), ))) resp := mgmtPB.GetUserResponse{ @@ -484,7 +483,6 @@ func (h *PublicHandler) GetOrganization(ctx context.Context, req *mgmtPB.GetOrga logUUID.String(), ctxUserUID, eventName, - custom_otel.SetEventResource(pbOrg), ))) return resp, nil diff --git a/pkg/service/convertor.go b/pkg/service/convertor.go index 45fd662..d1a651f 100644 --- a/pkg/service/convertor.go +++ b/pkg/service/convertor.go @@ -1,14 +1,21 @@ package service import ( + "bufio" + "bytes" "context" "database/sql" "encoding/base64" "fmt" + "image" + "image/jpeg" + "image/png" "strings" "time" + "github.com/gabriel-vasile/mimetype" "github.com/gofrs/uuid" + "golang.org/x/image/draw" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" "google.golang.org/protobuf/types/known/structpb" @@ -95,8 +102,32 @@ func (s *service) PBUser2DBUser(pbUser *mgmtPB.User) (*datamodel.Owner, error) { if err != nil { return nil, err } - if len(b) > 1*1024*1024 { - return nil, status.Errorf(codes.InvalidArgument, "Avatar image size should less than 1MB") + if len(b) > 200*1024 { + mimeType := strings.Split(mimetype.Detect(b).String(), ";")[0] + + var src image.Image + switch mimeType { + case "image/png": + src, _ = png.Decode(bytes.NewReader(b)) + case "image/jpeg": + src, _ = jpeg.Decode(bytes.NewReader(b)) + default: + return nil, status.Errorf(codes.InvalidArgument, "only support avatar image in jpeg and png formats") + } + + // Set the expected size that you want: + dst := image.NewRGBA(image.Rect(0, 0, 256, 256*src.Bounds().Max.Y/src.Bounds().Max.X)) + + // Resize: + draw.NearestNeighbor.Scale(dst, dst.Rect, src, src.Bounds(), draw.Over, nil) + + var buf bytes.Buffer + encoder := png.Encoder{CompressionLevel: png.BestCompression} + err = encoder.Encode(bufio.NewWriter(&buf), dst) + if err != nil { + return nil, status.Errorf(codes.InvalidArgument, "avatar image error") + } + profileAvatar = fmt.Sprintf("data:%s;base64,%s", "image/png", base64.StdEncoding.EncodeToString(buf.Bytes())) } }