123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210 |
- package service
- import (
- "context"
- "encoding/json"
- "go-common/app/interface/main/dm2/model"
- account "go-common/app/service/main/account/api"
- archive "go-common/app/service/main/archive/model/archive"
- memberMdl "go-common/app/service/main/member/model/block"
- "go-common/library/ecode"
- "go-common/library/log"
- )
- const (
- _subtitleMaxLength = 50 * 10000
- )
- func (s *Service) checkAidOid(c context.Context, aid, oid int64) (err error) {
- if _, err = s.arcRPC.Video3(c, &archive.ArgVideo2{
- Aid: aid,
- Cid: oid,
- }); err != nil {
- log.Error("Video3(aid:%v,oid:%v),error(%v)", aid, oid, err)
- err = ecode.RequestErr
- return
- }
- return
- }
- func (s *Service) checkSubtitleLan(c context.Context, lan string) (err error) {
- if s.subtitleLans.GetByLan(lan) <= 0 {
- err = ecode.SubtitleIllegalLanguage
- return
- }
- return
- }
- func (s *Service) checkSubtitlePermission(c context.Context, aid, oid int64, tp int32, mid int64, subject *model.Subject) (err error) {
- if err = s.checkAudienceDraftAdd(c, aid, oid, tp, mid, subject); err != nil {
- log.Error("params(oid:%v, tp:%v, mid:%v,subject:%+v).err(%v)", oid, tp, mid, subject, err)
- return
- }
- return
- }
- func (s *Service) checkSubtitleData(c context.Context, aid, oid int64, data []byte) (detectErrs []*model.SubtitleDetectError, err error) {
- var (
- subtitleBody *model.SubtitleBody
- duration int64
- )
- if len(data) > _subtitleMaxLength {
- err = ecode.SubtitleSizeLimit
- return
- }
- if err = json.Unmarshal(data, &subtitleBody); err != nil {
- err = ecode.SubtitleUnValid
- return
- }
- if duration, err = s.videoDuration(c, aid, oid); err != nil {
- return
- }
- if duration <= 0 {
- err = ecode.SubtitleTimeUnValid
- return
- }
- if detectErrs, err = subtitleBody.CheckItem(duration); err != nil {
- return
- }
- return
- }
- func (s *Service) checkSubtitleLocked(c context.Context, submit bool, oid int64, tp int32, lan string, mid int64) (err error) {
- var (
- lockSubtitle *model.Subtitle
- )
- if !submit {
- return
- }
- if lockSubtitle, err = s.isSubtitleLanLock(c, oid, tp, lan); err != nil {
- log.Error("params(oid:%v, tp:%v) error(%v)", oid, tp, err)
- return
- }
- if lockSubtitle != nil && lockSubtitle.IsLock && lockSubtitle.UpMid != mid && lockSubtitle.Mid != mid {
- err = ecode.SubtileLanLocked
- return
- }
- return
- }
- func (s *Service) checkSubtitleAuthor(c context.Context, oid, subtitleID int64, lan string, mid int64) (authorID int64, err error) {
- var (
- originSubtitle *model.Subtitle
- originLan int64
- )
- if subtitleID <= 0 {
- authorID = mid
- return
- }
- if originSubtitle, err = s.getSubtitle(c, oid, subtitleID); err != nil {
- return
- }
- if originSubtitle == nil {
- err = ecode.NothingFound
- return
- }
- if originSubtitle.Status != model.SubtitleStatusAuditBack &&
- originSubtitle.Status != model.SubtitleStatusPublish &&
- originSubtitle.Status != model.SubtitleStatusCheckPublish &&
- originSubtitle.Status != model.SubtitleStatusManagerBack {
- err = ecode.SubtitleOriginUnValid
- return
- }
- if originLan = s.subtitleLans.GetByLan(lan); originLan <= 0 || originLan != int64(originSubtitle.Lan) {
- err = ecode.SubtitleIllegalLanguage
- return
- }
- authorID = originSubtitle.AuthorID
- return
- }
- func (s *Service) checkAudienceDraftAdd(c context.Context, aid, oid int64, tp int32, mid int64, subject *model.Subject) (err error) {
- var (
- profileReply *account.ProfileReply
- blackReply *account.BlacksReply
- blockInfo *memberMdl.RPCResInfo
- resDm []*model.UpFilter
- allow bool
- closed bool
- subtitleSubject *model.SubtitleSubject
- )
- if subtitleSubject, err = s.subtitleSubject(c, aid); err != nil {
- log.Error("subtitleSubject(aid:%v) error(%v)", aid, err)
- err = nil
- }
- if subtitleSubject != nil {
- allow = subtitleSubject.Allow
- closed = subtitleSubject.AttrVal(model.AttrSubtitleClose) == model.AttrYes
- }
- if closed {
- err = ecode.SubtitleDenied
- return
- }
- if subject.Mid == mid {
- return
- }
- if !allow {
- err = ecode.SubtitleDenied
- return
- }
- // 视频观众可以投稿
- // 账号绑定手机号
- if profileReply, err = s.accountRPC.Profile3(c, &account.MidReq{
- Mid: mid,
- }); err != nil {
- log.Error("accRPC.UserInfo(%v) error(%v)", mid, err)
- return
- }
- if profileReply.GetProfile().GetIdentification() == 0 && profileReply.GetProfile().GetTelStatus() == 0 {
- err = ecode.UserCheckNoPhone
- return
- }
- if profileReply.GetProfile().GetIdentification() == 0 && profileReply.GetProfile().GetTelStatus() == 2 {
- err = ecode.UserCheckInvalidPhone
- return
- }
- if profileReply.GetProfile().GetTelStatus() == 0 {
- err = ecode.UserCheckInvalidPhone
- return
- }
- // 用户等级大于2
- if profileReply.GetProfile().GetLevel() < 2 {
- err = ecode.UserLevelLow
- return
- }
- // 账号被拉黑
- if blackReply, err = s.accountRPC.Blacks3(c, &account.MidReq{
- Mid: subject.Mid,
- }); err != nil {
- log.Error("params(arg:%+v).err(%v)", subject.Mid, err)
- return
- }
- if _, ok := blackReply.GetBlackList()[mid]; ok {
- err = ecode.SubtitleUserBalcked
- return
- }
- if resDm, err = s.UpFilters(c, subject.Mid); err != nil {
- log.Error("params(mid:%+v).err(%v)", subject.Mid, err)
- return
- }
- hash := model.Hash(mid, 0)
- for _, uf := range resDm {
- if uf.Filter == hash {
- err = ecode.SubtitleUserBalcked
- return
- }
- }
- // 账号被封禁
- if blockInfo, err = s.memberRPC.BlockInfo(c, &memberMdl.RPCArgInfo{
- MID: mid,
- }); err != nil {
- log.Error("params(arg:%+v).err(%v)", mid, err)
- return
- }
- if blockInfo.BlockStatus != memberMdl.BlockStatusFalse {
- err = ecode.UserDisabled
- return
- }
- return
- }
|