0
0
mirror of https://github.com/rls-moe/nyx synced 2024-09-28 16:03:47 +02:00
nyx/http/board/replyparser.go

73 lines
1.6 KiB
Go

package board
import (
"errors"
"fmt"
"github.com/pressly/chi"
"go.rls.moe/nyx/http/errw"
"go.rls.moe/nyx/http/middle"
"go.rls.moe/nyx/resources"
"net/http"
"strconv"
)
var trollThrottle = errors.New("Troll throttle")
func parseReply(r *http.Request, reply *resources.Reply) error {
reply.Board = chi.URLParam(r, "board")
reply.Text = r.FormValue("text")
if tidStr := chi.URLParam(r, "thread"); tidStr != "" {
var err error
reply.Thread, err = strconv.Atoi(tidStr)
if err != nil {
return err
}
}
if len(reply.Text) > 10000 {
return errw.MakeErrorWithTitle(
"I'm sorry but I can't do that",
"There are too many characters")
}
if len(reply.Text) < 5 {
return errw.MakeErrorWithTitle(
"I'm sorry but I can't do that",
"There are not enough characters")
}
reply.Metadata = map[string]string{}
spamScore, err := resources.SpamScore(reply.Text)
if err != nil {
return err
}
reply.Metadata["spamscore"] = fmt.Sprintf("%.6f", spamScore)
reply.Metadata["captchaprob"] = fmt.Sprintf("%.2f", resources.CaptchaProb(spamScore)*100)
if !resources.CaptchaPass(spamScore) {
return trollThrottle
}
file, hdr, err := r.FormFile("image")
err = parseImage(reply, file, hdr, err)
if err != nil {
return err
}
if r.FormValue("tripcode") != "" {
reply.Metadata["trip"] = resources.CalcTripCode(r.FormValue("tripcode"))
}
if middle.IsModSession(middle.GetSession(r)) {
if r.FormValue("modpost") != "" {
reply.Metadata["modpost"] = "yes"
}
if middle.IsAdminSession(middle.GetSession(r)) {
if r.FormValue("adminpost") != "" {
reply.Metadata["adminpost"] = "yes"
}
}
}
return nil
}