mirror of
https://github.com/rls-moe/nyx
synced 2024-11-14 22:12:24 +00:00
73 lines
1.6 KiB
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
|
|
}
|