56 lines
1.4 KiB
Go
56 lines
1.4 KiB
Go
package logic
|
|
|
|
import (
|
|
"context"
|
|
|
|
"spark-server/internal/module/moment/entity"
|
|
"spark-server/internal/pkg/errs"
|
|
"spark-server/internal/pkg/i18n"
|
|
"spark-server/internal/pkg/media"
|
|
"spark-server/internal/pkg/reqctx"
|
|
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
// checkMediaMeta validates client-declared w/h/size on user publish.
|
|
func (s *Service) checkMediaMeta(ctx context.Context, images []*entity.Image, video *entity.Video) error {
|
|
if s == nil || !s.media.Enabled {
|
|
return nil
|
|
}
|
|
var v *media.Violation
|
|
if video != nil {
|
|
v = s.media.CheckPublishVideo(&media.VideoMeta{
|
|
Width: video.Width, Height: video.Height, Size: video.Size, DurationMS: video.DurationMS,
|
|
})
|
|
} else {
|
|
metas := make([]media.ImageMeta, 0, len(images))
|
|
for _, img := range images {
|
|
if img == nil {
|
|
continue
|
|
}
|
|
metas = append(metas, media.ImageMeta{Width: img.Width, Height: img.Height, Size: img.Size})
|
|
}
|
|
v = s.media.CheckPublishImages(metas)
|
|
}
|
|
if v == nil {
|
|
return nil
|
|
}
|
|
log := s.log
|
|
if log == nil {
|
|
log = zap.NewNop()
|
|
}
|
|
log.Warn("moment media oversize",
|
|
zap.String("kind", string(v.Kind)),
|
|
zap.String("reason", v.Reason),
|
|
zap.Int("w", v.Width),
|
|
zap.Int("h", v.Height),
|
|
zap.Int("max_edge", v.MaxEdge),
|
|
zap.Int64("size", v.Size),
|
|
zap.Int64("max_size", v.MaxSize),
|
|
)
|
|
if !s.media.UserReject {
|
|
return nil
|
|
}
|
|
return errs.ErrMediaOversized.WithMsg(i18n.T(reqctx.Lang(ctx), i18n.KeyMediaOversized, nil))
|
|
}
|