1
0
Fork 0
mirror of https://github.com/Eggbertx/gochan.git synced 2025-08-19 08:26:23 -07:00

Move flag attaching to separate function

This commit is contained in:
Eggbertx 2024-03-13 13:58:36 -07:00
parent 4b5ea350eb
commit be3cd50c08
2 changed files with 51 additions and 41 deletions

View file

@ -22,6 +22,7 @@ import (
"github.com/gochan-org/gochan/pkg/posting/uploads"
"github.com/gochan-org/gochan/pkg/server"
"github.com/gochan-org/gochan/pkg/server/serverutil"
"github.com/rs/zerolog"
)
const (
@ -34,6 +35,51 @@ var (
ErrInvalidFlag = errors.New("invalid selected flag")
)
func attachFlag(request *http.Request, post *gcsql.Post, board string, errEv *zerolog.Event) error {
boardConfig := config.GetBoardConfig(board)
flag := request.PostFormValue("post-flag")
if flag != "" {
errEv.Str("flag", flag)
}
var err error
switch flag {
case "geoip":
if boardConfig.EnableGeoIP {
geoipInfo, err := geoip.GetCountry(request, board, errEv)
if err != nil {
// GetCountry logs the error
return err
}
post.Country = geoipInfo.Name
post.Flag = strings.ToLower(geoipInfo.Flag)
} else {
err = ErrInvalidFlag
errEv.Err(err).Caller().
Msg("User selected 'geoip' on a non-geoip board")
return err
}
case "":
// "No flag"
if !boardConfig.EnableNoFlag {
err = ErrInvalidFlag
errEv.Err(err).Caller().
Msg("User submitted 'No flag' on a board without it enabled")
return err
}
default:
// custom flag
var validFlag bool
post.Country, validFlag = boardConfig.CheckCustomFlag(flag)
if !validFlag {
err = ErrInvalidFlag
errEv.Caller().Msg("User submitted invalid custom flag")
return err
}
post.Flag = flag
}
return nil
}
// MakePost is called when a user accesses /post. Parse form data, then insert and build
func MakePost(writer http.ResponseWriter, request *http.Request) {
request.ParseMultipartForm(maxFormBytes)
@ -257,47 +303,11 @@ func MakePost(writer http.ResponseWriter, request *http.Request) {
return
}
flag := request.PostFormValue("post-flag")
if flag != "" {
errEv.Str("flag", flag)
}
switch flag {
case "geoip":
if boardConfig.EnableGeoIP {
geoipInfo, err := geoip.GetCountry(request, postBoard.Dir, errEv)
if err != nil {
// GetCountry logs the error
break
}
post.Country = geoipInfo.Name
post.Flag = strings.ToLower(geoipInfo.Flag)
} else {
err = ErrInvalidFlag
errEv.Caller().
Msg("User selected 'geoip' on a non-geoip board")
if boardConfig.EnableGeoIP || len(boardConfig.CustomFlags) > 0 {
if err = attachFlag(request, post, postBoard.Dir, errEv); err != nil {
server.ServeError(writer, err.Error(), wantsJSON, nil)
return
}
case "":
// "No flag"
if !boardConfig.EnableNoFlag {
err = ErrInvalidFlag
errEv.Caller().
Msg("User submitted 'No flag' on a board without it enabled")
}
default:
// custom flag
var validFlag bool
post.Country, validFlag = boardConfig.CheckCustomFlag(flag)
if !validFlag {
err = ErrInvalidFlag
errEv.Caller().Msg("User submitted invalid custom flag")
}
post.Flag = flag
}
if err != nil {
server.ServeError(writer, err.Error(), wantsJSON, map[string]any{
"flag": flag,
})
return
}
if !captchaSuccess {

View file

@ -1,7 +1,7 @@
{{define "topbar" -}}
<div id="topbar">
<div class="topbar-section"><a href="{{webPathDir "/"}}" class="topbar-item">home</a></div>
{{- range $s, $section := .sections -}}
{{- range $s, $section := $.sections -}}
<div class="topbar-section">
{{- with $sectionBoards := sectionBoards $section.ID -}}
{{range $b, $board := $sectionBoards -}}