mirror of https://gitee.com/answerdev/answer.git
Merge branch 'feat/1.1.1/ai' into test
This commit is contained in:
commit
e3fbe983db
|
@ -136,8 +136,20 @@ func (ac *AnswerController) Add(ctx *gin.Context) {
|
||||||
}
|
}
|
||||||
req.QuestionID = uid.DeShortID(req.QuestionID)
|
req.QuestionID = uid.DeShortID(req.QuestionID)
|
||||||
req.UserID = middleware.GetLoginUserIDFromContext(ctx)
|
req.UserID = middleware.GetLoginUserIDFromContext(ctx)
|
||||||
|
|
||||||
|
canList, err := ac.rankService.CheckOperationPermissions(ctx, req.UserID, []string{
|
||||||
|
permission.AnswerEdit,
|
||||||
|
permission.AnswerDelete,
|
||||||
|
permission.LinkUrlLimit,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
handler.HandleResponse(ctx, err, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
linkUrlLimitUser := canList[2]
|
||||||
isAdmin := middleware.GetUserIsAdminModerator(ctx)
|
isAdmin := middleware.GetUserIsAdminModerator(ctx)
|
||||||
if !isAdmin {
|
if !isAdmin || !linkUrlLimitUser {
|
||||||
captchaPass := ac.actionService.ActionRecordVerifyCaptcha(ctx, entity.CaptchaActionAnswer, req.UserID, req.CaptchaID, req.CaptchaCode)
|
captchaPass := ac.actionService.ActionRecordVerifyCaptcha(ctx, entity.CaptchaActionAnswer, req.UserID, req.CaptchaID, req.CaptchaCode)
|
||||||
if !captchaPass {
|
if !captchaPass {
|
||||||
errFields := append([]*validator.FormErrorField{}, &validator.FormErrorField{
|
errFields := append([]*validator.FormErrorField{}, &validator.FormErrorField{
|
||||||
|
@ -164,7 +176,7 @@ func (ac *AnswerController) Add(ctx *gin.Context) {
|
||||||
handler.HandleResponse(ctx, err, nil)
|
handler.HandleResponse(ctx, err, nil)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if !isAdmin {
|
if !isAdmin || !linkUrlLimitUser {
|
||||||
ac.actionService.ActionRecordAdd(ctx, entity.CaptchaActionAnswer, req.UserID)
|
ac.actionService.ActionRecordAdd(ctx, entity.CaptchaActionAnswer, req.UserID)
|
||||||
}
|
}
|
||||||
info, questionInfo, has, err := ac.answerService.Get(ctx, answerID, req.UserID)
|
info, questionInfo, has, err := ac.answerService.Get(ctx, answerID, req.UserID)
|
||||||
|
@ -177,15 +189,6 @@ func (ac *AnswerController) Add(ctx *gin.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
canList, err := ac.rankService.CheckOperationPermissions(ctx, req.UserID, []string{
|
|
||||||
permission.AnswerEdit,
|
|
||||||
permission.AnswerDelete,
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
handler.HandleResponse(ctx, err, nil)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
objectOwner := ac.rankService.CheckOperationObjectOwner(ctx, req.UserID, info.ID)
|
objectOwner := ac.rankService.CheckOperationObjectOwner(ctx, req.UserID, info.ID)
|
||||||
req.CanEdit = canList[0] || objectOwner
|
req.CanEdit = canList[0] || objectOwner
|
||||||
req.CanDelete = canList[1] || objectOwner
|
req.CanDelete = canList[1] || objectOwner
|
||||||
|
@ -216,9 +219,20 @@ func (ac *AnswerController) Update(ctx *gin.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
req.UserID = middleware.GetLoginUserIDFromContext(ctx)
|
req.UserID = middleware.GetLoginUserIDFromContext(ctx)
|
||||||
|
|
||||||
|
canList, err := ac.rankService.CheckOperationPermissions(ctx, req.UserID, []string{
|
||||||
|
permission.AnswerEdit,
|
||||||
|
permission.AnswerEditWithoutReview,
|
||||||
|
permission.LinkUrlLimit,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
handler.HandleResponse(ctx, err, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
req.QuestionID = uid.DeShortID(req.QuestionID)
|
req.QuestionID = uid.DeShortID(req.QuestionID)
|
||||||
|
linkUrlLimitUser := canList[2]
|
||||||
isAdmin := middleware.GetUserIsAdminModerator(ctx)
|
isAdmin := middleware.GetUserIsAdminModerator(ctx)
|
||||||
if !isAdmin {
|
if !isAdmin || !linkUrlLimitUser {
|
||||||
captchaPass := ac.actionService.ActionRecordVerifyCaptcha(ctx, entity.CaptchaActionEdit, req.UserID, req.CaptchaID, req.CaptchaCode)
|
captchaPass := ac.actionService.ActionRecordVerifyCaptcha(ctx, entity.CaptchaActionEdit, req.UserID, req.CaptchaID, req.CaptchaCode)
|
||||||
if !captchaPass {
|
if !captchaPass {
|
||||||
errFields := append([]*validator.FormErrorField{}, &validator.FormErrorField{
|
errFields := append([]*validator.FormErrorField{}, &validator.FormErrorField{
|
||||||
|
@ -230,15 +244,6 @@ func (ac *AnswerController) Update(ctx *gin.Context) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
canList, err := ac.rankService.CheckOperationPermissions(ctx, req.UserID, []string{
|
|
||||||
permission.AnswerEdit,
|
|
||||||
permission.AnswerEditWithoutReview,
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
handler.HandleResponse(ctx, err, nil)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
objectOwner := ac.rankService.CheckOperationObjectOwner(ctx, req.UserID, req.ID)
|
objectOwner := ac.rankService.CheckOperationObjectOwner(ctx, req.UserID, req.ID)
|
||||||
req.CanEdit = canList[0] || objectOwner
|
req.CanEdit = canList[0] || objectOwner
|
||||||
req.NoNeedReview = canList[1] || objectOwner
|
req.NoNeedReview = canList[1] || objectOwner
|
||||||
|
@ -252,7 +257,7 @@ func (ac *AnswerController) Update(ctx *gin.Context) {
|
||||||
handler.HandleResponse(ctx, err, nil)
|
handler.HandleResponse(ctx, err, nil)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if !isAdmin {
|
if !isAdmin || !linkUrlLimitUser {
|
||||||
ac.actionService.ActionRecordAdd(ctx, entity.CaptchaActionEdit, req.UserID)
|
ac.actionService.ActionRecordAdd(ctx, entity.CaptchaActionEdit, req.UserID)
|
||||||
}
|
}
|
||||||
_, _, _, err = ac.answerService.Get(ctx, req.ID, req.UserID)
|
_, _, _, err = ac.answerService.Get(ctx, req.ID, req.UserID)
|
||||||
|
|
|
@ -54,8 +54,20 @@ func (cc *CommentController) AddComment(ctx *gin.Context) {
|
||||||
}
|
}
|
||||||
req.ObjectID = uid.DeShortID(req.ObjectID)
|
req.ObjectID = uid.DeShortID(req.ObjectID)
|
||||||
req.UserID = middleware.GetLoginUserIDFromContext(ctx)
|
req.UserID = middleware.GetLoginUserIDFromContext(ctx)
|
||||||
|
|
||||||
|
canList, err := cc.rankService.CheckOperationPermissions(ctx, req.UserID, []string{
|
||||||
|
permission.CommentAdd,
|
||||||
|
permission.CommentEdit,
|
||||||
|
permission.CommentDelete,
|
||||||
|
permission.LinkUrlLimit,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
handler.HandleResponse(ctx, err, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
linkUrlLimitUser := canList[3]
|
||||||
isAdmin := middleware.GetUserIsAdminModerator(ctx)
|
isAdmin := middleware.GetUserIsAdminModerator(ctx)
|
||||||
if !isAdmin {
|
if !isAdmin || !linkUrlLimitUser {
|
||||||
captchaPass := cc.actionService.ActionRecordVerifyCaptcha(ctx, entity.CaptchaActionComment, req.UserID, req.CaptchaID, req.CaptchaCode)
|
captchaPass := cc.actionService.ActionRecordVerifyCaptcha(ctx, entity.CaptchaActionComment, req.UserID, req.CaptchaID, req.CaptchaCode)
|
||||||
if !captchaPass {
|
if !captchaPass {
|
||||||
errFields := append([]*validator.FormErrorField{}, &validator.FormErrorField{
|
errFields := append([]*validator.FormErrorField{}, &validator.FormErrorField{
|
||||||
|
@ -67,15 +79,6 @@ func (cc *CommentController) AddComment(ctx *gin.Context) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
canList, err := cc.rankService.CheckOperationPermissions(ctx, req.UserID, []string{
|
|
||||||
permission.CommentAdd,
|
|
||||||
permission.CommentEdit,
|
|
||||||
permission.CommentDelete,
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
handler.HandleResponse(ctx, err, nil)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
req.CanAdd = canList[0]
|
req.CanAdd = canList[0]
|
||||||
req.CanEdit = canList[1]
|
req.CanEdit = canList[1]
|
||||||
req.CanDelete = canList[2]
|
req.CanDelete = canList[2]
|
||||||
|
@ -85,7 +88,7 @@ func (cc *CommentController) AddComment(ctx *gin.Context) {
|
||||||
}
|
}
|
||||||
|
|
||||||
resp, err := cc.commentService.AddComment(ctx, req)
|
resp, err := cc.commentService.AddComment(ctx, req)
|
||||||
if !isAdmin {
|
if !isAdmin || !linkUrlLimitUser {
|
||||||
cc.actionService.ActionRecordAdd(ctx, entity.CaptchaActionComment, req.UserID)
|
cc.actionService.ActionRecordAdd(ctx, entity.CaptchaActionComment, req.UserID)
|
||||||
}
|
}
|
||||||
handler.HandleResponse(ctx, err, resp)
|
handler.HandleResponse(ctx, err, resp)
|
||||||
|
@ -154,9 +157,20 @@ func (cc *CommentController) UpdateComment(ctx *gin.Context) {
|
||||||
}
|
}
|
||||||
|
|
||||||
req.UserID = middleware.GetLoginUserIDFromContext(ctx)
|
req.UserID = middleware.GetLoginUserIDFromContext(ctx)
|
||||||
|
canList, err := cc.rankService.CheckOperationPermissions(ctx, req.UserID, []string{
|
||||||
|
permission.CommentAdd,
|
||||||
|
permission.CommentEdit,
|
||||||
|
permission.CommentDelete,
|
||||||
|
permission.LinkUrlLimit,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
handler.HandleResponse(ctx, err, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
linkUrlLimitUser := canList[3]
|
||||||
req.IsAdmin = middleware.GetIsAdminFromContext(ctx)
|
req.IsAdmin = middleware.GetIsAdminFromContext(ctx)
|
||||||
isAdmin := middleware.GetUserIsAdminModerator(ctx)
|
isAdmin := middleware.GetUserIsAdminModerator(ctx)
|
||||||
if !isAdmin {
|
if !isAdmin || !linkUrlLimitUser {
|
||||||
captchaPass := cc.actionService.ActionRecordVerifyCaptcha(ctx, entity.CaptchaActionEdit, req.UserID, req.CaptchaID, req.CaptchaCode)
|
captchaPass := cc.actionService.ActionRecordVerifyCaptcha(ctx, entity.CaptchaActionEdit, req.UserID, req.CaptchaID, req.CaptchaCode)
|
||||||
if !captchaPass {
|
if !captchaPass {
|
||||||
errFields := append([]*validator.FormErrorField{}, &validator.FormErrorField{
|
errFields := append([]*validator.FormErrorField{}, &validator.FormErrorField{
|
||||||
|
@ -168,15 +182,6 @@ func (cc *CommentController) UpdateComment(ctx *gin.Context) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
canList, err := cc.rankService.CheckOperationPermissions(ctx, req.UserID, []string{
|
|
||||||
permission.CommentAdd,
|
|
||||||
permission.CommentEdit,
|
|
||||||
permission.CommentDelete,
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
handler.HandleResponse(ctx, err, nil)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
req.CanAdd = canList[0]
|
req.CanAdd = canList[0]
|
||||||
req.CanEdit = canList[1]
|
req.CanEdit = canList[1]
|
||||||
req.CanDelete = canList[2]
|
req.CanDelete = canList[2]
|
||||||
|
@ -191,7 +196,7 @@ func (cc *CommentController) UpdateComment(ctx *gin.Context) {
|
||||||
}
|
}
|
||||||
|
|
||||||
resp, err := cc.commentService.UpdateComment(ctx, req)
|
resp, err := cc.commentService.UpdateComment(ctx, req)
|
||||||
if !isAdmin {
|
if !isAdmin || !linkUrlLimitUser {
|
||||||
cc.actionService.ActionRecordAdd(ctx, entity.CaptchaActionEdit, req.UserID)
|
cc.actionService.ActionRecordAdd(ctx, entity.CaptchaActionEdit, req.UserID)
|
||||||
}
|
}
|
||||||
handler.HandleResponse(ctx, err, resp)
|
handler.HandleResponse(ctx, err, resp)
|
||||||
|
|
|
@ -330,10 +330,25 @@ func (qc *QuestionController) AddQuestion(ctx *gin.Context) {
|
||||||
if ctx.IsAborted() {
|
if ctx.IsAborted() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
req.UserID = middleware.GetLoginUserIDFromContext(ctx)
|
|
||||||
|
|
||||||
|
req.UserID = middleware.GetLoginUserIDFromContext(ctx)
|
||||||
|
canList, requireRanks, err := qc.rankService.CheckOperationPermissionsForRanks(ctx, req.UserID, []string{
|
||||||
|
permission.QuestionAdd,
|
||||||
|
permission.QuestionEdit,
|
||||||
|
permission.QuestionDelete,
|
||||||
|
permission.QuestionClose,
|
||||||
|
permission.QuestionReopen,
|
||||||
|
permission.TagUseReservedTag,
|
||||||
|
permission.TagAdd,
|
||||||
|
permission.LinkUrlLimit,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
handler.HandleResponse(ctx, err, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
linkUrlLimitUser := canList[7]
|
||||||
isAdmin := middleware.GetUserIsAdminModerator(ctx)
|
isAdmin := middleware.GetUserIsAdminModerator(ctx)
|
||||||
if !isAdmin {
|
if !isAdmin || !linkUrlLimitUser {
|
||||||
captchaPass := qc.actionService.ActionRecordVerifyCaptcha(ctx, entity.CaptchaActionQuestion, req.UserID, req.CaptchaID, req.CaptchaCode)
|
captchaPass := qc.actionService.ActionRecordVerifyCaptcha(ctx, entity.CaptchaActionQuestion, req.UserID, req.CaptchaID, req.CaptchaCode)
|
||||||
if !captchaPass {
|
if !captchaPass {
|
||||||
errFields := append([]*validator.FormErrorField{}, &validator.FormErrorField{
|
errFields := append([]*validator.FormErrorField{}, &validator.FormErrorField{
|
||||||
|
@ -345,19 +360,6 @@ func (qc *QuestionController) AddQuestion(ctx *gin.Context) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
canList, requireRanks, err := qc.rankService.CheckOperationPermissionsForRanks(ctx, req.UserID, []string{
|
|
||||||
permission.QuestionAdd,
|
|
||||||
permission.QuestionEdit,
|
|
||||||
permission.QuestionDelete,
|
|
||||||
permission.QuestionClose,
|
|
||||||
permission.QuestionReopen,
|
|
||||||
permission.TagUseReservedTag,
|
|
||||||
permission.TagAdd,
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
handler.HandleResponse(ctx, err, nil)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
req.CanAdd = canList[0]
|
req.CanAdd = canList[0]
|
||||||
req.CanEdit = canList[1]
|
req.CanEdit = canList[1]
|
||||||
req.CanDelete = canList[2]
|
req.CanDelete = canList[2]
|
||||||
|
@ -408,7 +410,7 @@ func (qc *QuestionController) AddQuestion(ctx *gin.Context) {
|
||||||
handler.HandleResponse(ctx, errors.BadRequest(reason.RequestFormatError), errFields)
|
handler.HandleResponse(ctx, errors.BadRequest(reason.RequestFormatError), errFields)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if !isAdmin {
|
if !isAdmin || !linkUrlLimitUser {
|
||||||
qc.actionService.ActionRecordAdd(ctx, entity.CaptchaActionQuestion, req.UserID)
|
qc.actionService.ActionRecordAdd(ctx, entity.CaptchaActionQuestion, req.UserID)
|
||||||
}
|
}
|
||||||
handler.HandleResponse(ctx, err, resp)
|
handler.HandleResponse(ctx, err, resp)
|
||||||
|
@ -439,11 +441,26 @@ func (qc *QuestionController) AddQuestionByAnswer(ctx *gin.Context) {
|
||||||
permission.QuestionClose,
|
permission.QuestionClose,
|
||||||
permission.QuestionReopen,
|
permission.QuestionReopen,
|
||||||
permission.TagUseReservedTag,
|
permission.TagUseReservedTag,
|
||||||
|
permission.LinkUrlLimit,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
handler.HandleResponse(ctx, err, nil)
|
handler.HandleResponse(ctx, err, nil)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
linkUrlLimitUser := canList[6]
|
||||||
|
isAdmin := middleware.GetUserIsAdminModerator(ctx)
|
||||||
|
if !isAdmin || !linkUrlLimitUser {
|
||||||
|
captchaPass := qc.actionService.ActionRecordVerifyCaptcha(ctx, entity.CaptchaActionQuestion, req.UserID, req.CaptchaID, req.CaptchaCode)
|
||||||
|
if !captchaPass {
|
||||||
|
errFields := append([]*validator.FormErrorField{}, &validator.FormErrorField{
|
||||||
|
ErrorField: "captcha_code",
|
||||||
|
ErrorMsg: translator.Tr(handler.GetLang(ctx), reason.CaptchaVerificationFailed),
|
||||||
|
})
|
||||||
|
handler.HandleResponse(ctx, errors.BadRequest(reason.CaptchaVerificationFailed), errFields)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
req.CanAdd = canList[0]
|
req.CanAdd = canList[0]
|
||||||
req.CanEdit = canList[1]
|
req.CanEdit = canList[1]
|
||||||
req.CanDelete = canList[2]
|
req.CanDelete = canList[2]
|
||||||
|
@ -481,6 +498,10 @@ func (qc *QuestionController) AddQuestionByAnswer(ctx *gin.Context) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !isAdmin || !linkUrlLimitUser {
|
||||||
|
qc.actionService.ActionRecordAdd(ctx, entity.CaptchaActionQuestion, req.UserID)
|
||||||
|
}
|
||||||
|
|
||||||
if len(errFields) > 0 {
|
if len(errFields) > 0 {
|
||||||
handler.HandleResponse(ctx, errors.BadRequest(reason.RequestFormatError), errFields)
|
handler.HandleResponse(ctx, errors.BadRequest(reason.RequestFormatError), errFields)
|
||||||
return
|
return
|
||||||
|
@ -535,8 +556,21 @@ func (qc *QuestionController) UpdateQuestion(ctx *gin.Context) {
|
||||||
}
|
}
|
||||||
req.ID = uid.DeShortID(req.ID)
|
req.ID = uid.DeShortID(req.ID)
|
||||||
req.UserID = middleware.GetLoginUserIDFromContext(ctx)
|
req.UserID = middleware.GetLoginUserIDFromContext(ctx)
|
||||||
|
canList, requireRanks, err := qc.rankService.CheckOperationPermissionsForRanks(ctx, req.UserID, []string{
|
||||||
|
permission.QuestionEdit,
|
||||||
|
permission.QuestionDelete,
|
||||||
|
permission.QuestionEditWithoutReview,
|
||||||
|
permission.TagUseReservedTag,
|
||||||
|
permission.TagAdd,
|
||||||
|
permission.LinkUrlLimit,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
handler.HandleResponse(ctx, err, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
linkUrlLimitUser := canList[5]
|
||||||
isAdmin := middleware.GetUserIsAdminModerator(ctx)
|
isAdmin := middleware.GetUserIsAdminModerator(ctx)
|
||||||
if !isAdmin {
|
if !isAdmin || !linkUrlLimitUser {
|
||||||
captchaPass := qc.actionService.ActionRecordVerifyCaptcha(ctx, entity.CaptchaActionEdit, req.UserID, req.CaptchaID, req.CaptchaCode)
|
captchaPass := qc.actionService.ActionRecordVerifyCaptcha(ctx, entity.CaptchaActionEdit, req.UserID, req.CaptchaID, req.CaptchaCode)
|
||||||
if !captchaPass {
|
if !captchaPass {
|
||||||
errFields := append([]*validator.FormErrorField{}, &validator.FormErrorField{
|
errFields := append([]*validator.FormErrorField{}, &validator.FormErrorField{
|
||||||
|
@ -548,18 +582,6 @@ func (qc *QuestionController) UpdateQuestion(ctx *gin.Context) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
canList, requireRanks, err := qc.rankService.CheckOperationPermissionsForRanks(ctx, req.UserID, []string{
|
|
||||||
permission.QuestionEdit,
|
|
||||||
permission.QuestionDelete,
|
|
||||||
permission.QuestionEditWithoutReview,
|
|
||||||
permission.TagUseReservedTag,
|
|
||||||
permission.TagAdd,
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
handler.HandleResponse(ctx, err, nil)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
objectOwner := qc.rankService.CheckOperationObjectOwner(ctx, req.UserID, req.ID)
|
objectOwner := qc.rankService.CheckOperationObjectOwner(ctx, req.UserID, req.ID)
|
||||||
req.CanEdit = canList[0] || objectOwner
|
req.CanEdit = canList[0] || objectOwner
|
||||||
req.CanDelete = canList[1]
|
req.CanDelete = canList[1]
|
||||||
|
@ -599,7 +621,7 @@ func (qc *QuestionController) UpdateQuestion(ctx *gin.Context) {
|
||||||
handler.HandleResponse(ctx, err, resp)
|
handler.HandleResponse(ctx, err, resp)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if !isAdmin {
|
if !isAdmin || !linkUrlLimitUser {
|
||||||
qc.actionService.ActionRecordAdd(ctx, entity.CaptchaActionEdit, req.UserID)
|
qc.actionService.ActionRecordAdd(ctx, entity.CaptchaActionEdit, req.UserID)
|
||||||
}
|
}
|
||||||
handler.HandleResponse(ctx, nil, &schema.UpdateQuestionResp{WaitForReview: !req.NoNeedReview})
|
handler.HandleResponse(ctx, nil, &schema.UpdateQuestionResp{WaitForReview: !req.NoNeedReview})
|
||||||
|
|
|
@ -53,6 +53,19 @@ func (vc *VoteController) VoteUp(ctx *gin.Context) {
|
||||||
}
|
}
|
||||||
req.ObjectID = uid.DeShortID(req.ObjectID)
|
req.ObjectID = uid.DeShortID(req.ObjectID)
|
||||||
req.UserID = middleware.GetLoginUserIDFromContext(ctx)
|
req.UserID = middleware.GetLoginUserIDFromContext(ctx)
|
||||||
|
|
||||||
|
can, needRank, err := vc.rankService.CheckVotePermission(ctx, req.UserID, req.ObjectID, true)
|
||||||
|
if err != nil {
|
||||||
|
handler.HandleResponse(ctx, err, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if !can {
|
||||||
|
lang := handler.GetLang(ctx)
|
||||||
|
msg := translator.TrWithData(lang, reason.NoEnoughRankToOperate, &schema.PermissionTrTplData{Rank: needRank})
|
||||||
|
handler.HandleResponse(ctx, errors.Forbidden(reason.NoEnoughRankToOperate).WithMsg(msg), nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
isAdmin := middleware.GetUserIsAdminModerator(ctx)
|
isAdmin := middleware.GetUserIsAdminModerator(ctx)
|
||||||
if !isAdmin {
|
if !isAdmin {
|
||||||
captchaPass := vc.actionService.ActionRecordVerifyCaptcha(ctx, entity.CaptchaActionVote, req.UserID, req.CaptchaID, req.CaptchaCode)
|
captchaPass := vc.actionService.ActionRecordVerifyCaptcha(ctx, entity.CaptchaActionVote, req.UserID, req.CaptchaID, req.CaptchaCode)
|
||||||
|
@ -66,17 +79,6 @@ func (vc *VoteController) VoteUp(ctx *gin.Context) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
can, needRank, err := vc.rankService.CheckVotePermission(ctx, req.UserID, req.ObjectID, true)
|
|
||||||
if err != nil {
|
|
||||||
handler.HandleResponse(ctx, err, nil)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if !can {
|
|
||||||
lang := handler.GetLang(ctx)
|
|
||||||
msg := translator.TrWithData(lang, reason.NoEnoughRankToOperate, &schema.PermissionTrTplData{Rank: needRank})
|
|
||||||
handler.HandleResponse(ctx, errors.Forbidden(reason.NoEnoughRankToOperate).WithMsg(msg), nil)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if !isAdmin {
|
if !isAdmin {
|
||||||
vc.actionService.ActionRecordAdd(ctx, entity.CaptchaActionVote, req.UserID)
|
vc.actionService.ActionRecordAdd(ctx, entity.CaptchaActionVote, req.UserID)
|
||||||
}
|
}
|
||||||
|
@ -106,17 +108,7 @@ func (vc *VoteController) VoteDown(ctx *gin.Context) {
|
||||||
req.ObjectID = uid.DeShortID(req.ObjectID)
|
req.ObjectID = uid.DeShortID(req.ObjectID)
|
||||||
req.UserID = middleware.GetLoginUserIDFromContext(ctx)
|
req.UserID = middleware.GetLoginUserIDFromContext(ctx)
|
||||||
isAdmin := middleware.GetUserIsAdminModerator(ctx)
|
isAdmin := middleware.GetUserIsAdminModerator(ctx)
|
||||||
if !isAdmin {
|
|
||||||
captchaPass := vc.actionService.ActionRecordVerifyCaptcha(ctx, entity.CaptchaActionVote, req.UserID, req.CaptchaID, req.CaptchaCode)
|
|
||||||
if !captchaPass {
|
|
||||||
errFields := append([]*validator.FormErrorField{}, &validator.FormErrorField{
|
|
||||||
ErrorField: "captcha_code",
|
|
||||||
ErrorMsg: translator.Tr(handler.GetLang(ctx), reason.CaptchaVerificationFailed),
|
|
||||||
})
|
|
||||||
handler.HandleResponse(ctx, errors.BadRequest(reason.CaptchaVerificationFailed), errFields)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
can, needRank, err := vc.rankService.CheckVotePermission(ctx, req.UserID, req.ObjectID, false)
|
can, needRank, err := vc.rankService.CheckVotePermission(ctx, req.UserID, req.ObjectID, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
handler.HandleResponse(ctx, err, nil)
|
handler.HandleResponse(ctx, err, nil)
|
||||||
|
@ -128,6 +120,18 @@ func (vc *VoteController) VoteDown(ctx *gin.Context) {
|
||||||
handler.HandleResponse(ctx, errors.Forbidden(reason.NoEnoughRankToOperate).WithMsg(msg), nil)
|
handler.HandleResponse(ctx, errors.Forbidden(reason.NoEnoughRankToOperate).WithMsg(msg), nil)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !isAdmin {
|
||||||
|
captchaPass := vc.actionService.ActionRecordVerifyCaptcha(ctx, entity.CaptchaActionVote, req.UserID, req.CaptchaID, req.CaptchaCode)
|
||||||
|
if !captchaPass {
|
||||||
|
errFields := append([]*validator.FormErrorField{}, &validator.FormErrorField{
|
||||||
|
ErrorField: "captcha_code",
|
||||||
|
ErrorMsg: translator.Tr(handler.GetLang(ctx), reason.CaptchaVerificationFailed),
|
||||||
|
})
|
||||||
|
handler.HandleResponse(ctx, errors.BadRequest(reason.CaptchaVerificationFailed), errFields)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
if !isAdmin {
|
if !isAdmin {
|
||||||
vc.actionService.ActionRecordAdd(ctx, entity.CaptchaActionVote, req.UserID)
|
vc.actionService.ActionRecordAdd(ctx, entity.CaptchaActionVote, req.UserID)
|
||||||
}
|
}
|
||||||
|
|
|
@ -94,6 +94,8 @@ type QuestionAddByAnswer struct {
|
||||||
UserID string `json:"-"`
|
UserID string `json:"-"`
|
||||||
MentionUsernameList []string `validate:"omitempty" json:"mention_username_list"`
|
MentionUsernameList []string `validate:"omitempty" json:"mention_username_list"`
|
||||||
QuestionPermission
|
QuestionPermission
|
||||||
|
CaptchaID string `json:"captcha_id"` // captcha_id
|
||||||
|
CaptchaCode string `json:"captcha_code"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (req *QuestionAddByAnswer) Check() (errFields []*validator.FormErrorField, err error) {
|
func (req *QuestionAddByAnswer) Check() (errFields []*validator.FormErrorField, err error) {
|
||||||
|
|
|
@ -85,7 +85,7 @@ func (cs *CaptchaService) CaptchaActionEditUserinfo(ctx context.Context, unit st
|
||||||
|
|
||||||
func (cs *CaptchaService) CaptchaActionQuestion(ctx context.Context, unit string, actioninfo *entity.ActionRecordInfo) bool {
|
func (cs *CaptchaService) CaptchaActionQuestion(ctx context.Context, unit string, actioninfo *entity.ActionRecordInfo) bool {
|
||||||
spew.Dump("[CaptchaActionQuestion]", actioninfo)
|
spew.Dump("[CaptchaActionQuestion]", actioninfo)
|
||||||
setNum := 3
|
setNum := 10
|
||||||
setTime := int64(5) //seconds
|
setTime := int64(5) //seconds
|
||||||
now := time.Now().Unix()
|
now := time.Now().Unix()
|
||||||
if now-actioninfo.LastTime <= setTime || actioninfo.Num >= setNum {
|
if now-actioninfo.LastTime <= setTime || actioninfo.Num >= setNum {
|
||||||
|
|
Loading…
Reference in New Issue