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

Make zerolog error Event usage more consistent (Caller on the same line as Err)

This commit is contained in:
Eggbertx 2024-03-18 12:41:03 -07:00
parent c2d834c712
commit bd6992cb87
13 changed files with 129 additions and 163 deletions

View file

@ -107,7 +107,7 @@ func editPost(checkedPosts []int, editBtn string, doEdit string, writer http.Res
}
post, err := gcsql.GetPostFromID(postid, true)
if err != nil {
errEv.Err(err).
errEv.Err(err).Caller().
Int("postid", postid).
Msg("Unable to find post")
server.ServeError(writer, "Unable to find post: "+err.Error(), wantsJSON, map[string]interface{}{

View file

@ -150,11 +150,10 @@ func parseCommandLine() {
fmt.Printf("Creating new staff: %q, with password: %q and rank: %d from command line", arr[0], arr[1], rank)
if _, err = gcsql.NewStaff(arr[0], arr[1], rank); err != nil {
fmt.Printf("Failed creating new staff account for %q: %s\n", arr[0], err.Error())
gcutil.LogFatal().
gcutil.LogFatal().Err(err).Caller().
Str("staff", "add").
Str("source", "commandLine").
Str("username", arr[0]).
Err(err).
Msg("Failed creating new staff account")
}
gcutil.LogInfo().

View file

@ -65,8 +65,8 @@ func BuildBoardPages(board *gcsql.Board) error {
threads, err := board.GetThreads(true, true, true)
if err != nil {
errEv.Err(err).
Caller().Msg("Failed getting board threads")
errEv.Err(err).Caller().
Msg("Failed getting board threads")
return fmt.Errorf("error getting threads for /%s/: %s", board.Dir, err.Error())
}
topPosts, err := getBoardTopPosts(board.ID)
@ -89,8 +89,8 @@ func BuildBoardPages(board *gcsql.Board) error {
}
errEv.Int("threadID", thread.ID)
if catalogThread.Images, err = thread.GetReplyFileCount(); err != nil {
errEv.Err(err).
Caller().Msg("Failed getting file count")
errEv.Err(err).Caller().
Msg("Failed getting file count")
return err
}
@ -105,15 +105,13 @@ func BuildBoardPages(board *gcsql.Board) error {
}
catalogThread.Replies, err = thread.GetReplyCount()
if err != nil {
errEv.Err(err).
Caller().Msg("Failed getting reply count")
errEv.Err(err).Caller().Msg("Failed getting reply count")
return errors.New("Error getting reply count: " + err.Error())
}
catalogThread.Posts, err = getThreadPosts(&thread)
if err != nil {
errEv.Err(err).
Caller().Msg("Failed getting replies")
errEv.Err(err).Caller().Msg("Failed getting replies")
return errors.New("Failed getting replies: " + err.Error())
}
if len(catalogThread.Posts) == 0 {
@ -127,8 +125,7 @@ func BuildBoardPages(board *gcsql.Board) error {
}
catalogThread.uploads, err = thread.GetUploads()
if err != nil {
errEv.Err(err).
Caller().Msg("Failed getting thread uploads")
errEv.Err(err).Caller().Msg("Failed getting thread uploads")
return errors.New("Failed getting thread uploads: " + err.Error())
}
@ -186,9 +183,9 @@ func BuildBoardPages(board *gcsql.Board) error {
"useCaptcha": captchaCfg.UseCaptcha(),
"captcha": captchaCfg,
}, boardPageFile, "text/html"); err != nil {
errEv.Err(err).
errEv.Err(err).Caller().
Str("page", "board.html").
Caller().Msg("Failed building board")
Msg("Failed building board")
return fmt.Errorf("failed building /%s/: %s", board.Dir, err.Error())
}
return boardPageFile.Close()
@ -272,16 +269,9 @@ func BuildBoardPages(board *gcsql.Board) error {
catalogPages.pages = append(catalogPages.pages, page)
}
var catalogJSON []byte
if catalogJSON, err = json.Marshal(catalog.pages); err != nil {
errEv.Err(err).
Caller().Send()
return errors.New("failed to marshal to JSON: " + err.Error())
}
if _, err = catalogJSONFile.Write(catalogJSON); err != nil {
errEv.Err(err).
Caller().Msg("Failed writing catalog.json")
return fmt.Errorf("failed writing /%s/catalog.json: %s", board.Dir, err.Error())
if err = json.NewEncoder(catalogJSONFile).Encode(catalog.pages); err != nil {
errEv.Err(err).Caller().Msg("Unable to write catalog JSON to file")
return errors.New("failed to marshal to catalog JSON")
}
return catalogJSONFile.Close()
}
@ -415,21 +405,18 @@ func buildBoard(board *gcsql.Board, force bool) error {
thumbInfo, _ := os.Stat(thumbPath)
if dirInfo != nil {
if !force {
errEv.Err(os.ErrExist).
Str("dirPath", dirPath).
Caller().Send()
errEv.Err(os.ErrExist).Caller().
Str("dirPath", dirPath).Send()
return fmt.Errorf(pathExistsStr, dirPath)
}
if !dirInfo.IsDir() {
errEv.Err(os.ErrExist).
Str("dirPath", dirPath).
Caller().Send()
errEv.Err(os.ErrExist).Caller().
Str("dirPath", dirPath).Send()
return fmt.Errorf(dirIsAFileStr, dirPath)
}
} else if err = os.Mkdir(dirPath, config.GC_DIR_MODE); err != nil {
errEv.Err(os.ErrExist).
Str("dirPath", dirPath).
Caller().Send()
errEv.Err(os.ErrExist).Caller().
Str("dirPath", dirPath).Send()
return fmt.Errorf(genericErrStr, dirPath, err.Error())
}
if err = config.TakeOwnership(dirPath); err != nil {
@ -441,23 +428,20 @@ func buildBoard(board *gcsql.Board, force bool) error {
if resInfo != nil {
if !force {
err = fmt.Errorf(pathExistsStr, resPath)
errEv.Err(err).
Str("resPath", resPath).
Caller().Send()
errEv.Err(err).Caller().
Str("resPath", resPath).Send()
return err
}
if !resInfo.IsDir() {
err = fmt.Errorf(dirIsAFileStr, resPath)
errEv.Err(err).
Str("resPath", resPath).
Caller().Send()
errEv.Err(err).Caller().
Str("resPath", resPath).Send()
return err
}
} else if err = os.Mkdir(resPath, config.GC_DIR_MODE); err != nil {
err = fmt.Errorf(genericErrStr, resPath, err.Error())
errEv.Err(err).
Str("resPath", resPath).
Caller().Send()
errEv.Err(err).Caller().
Str("resPath", resPath).Send()
return fmt.Errorf(genericErrStr, resPath, err.Error())
}
if err = config.TakeOwnership(resPath); err != nil {
@ -469,23 +453,20 @@ func buildBoard(board *gcsql.Board, force bool) error {
if srcInfo != nil {
if !force {
err = fmt.Errorf(pathExistsStr, srcPath)
errEv.Err(err).
Str("srcPath", srcPath).
Caller().Send()
errEv.Err(err).Caller().
Str("srcPath", srcPath).Send()
return err
}
if !srcInfo.IsDir() {
err = fmt.Errorf(dirIsAFileStr, srcPath)
errEv.Err(err).
Str("srcPath", srcPath).
Caller().Send()
errEv.Err(err).Caller().
Str("srcPath", srcPath).Send()
return err
}
} else if err = os.Mkdir(srcPath, config.GC_DIR_MODE); err != nil {
err = fmt.Errorf(genericErrStr, srcPath, err.Error())
errEv.Err(err).
Str("srcPath", srcPath).
Caller().Send()
errEv.Err(err).Caller().
Str("srcPath", srcPath).Send()
return err
}
if config.TakeOwnership(srcPath); err != nil {

View file

@ -86,8 +86,7 @@ func BuildCatalog(boardID int) error {
board, err := gcsql.GetBoardFromID(boardID)
if err != nil {
errEv.Err(err).
Caller().Msg("Unable to get board information")
errEv.Err(err).Caller().Msg("Unable to get board information")
return err
}
errEv.Str("boardDir", board.Dir)
@ -101,13 +100,13 @@ func BuildCatalog(boardID int) error {
if err = config.TakeOwnershipOfFile(catalogFile); err != nil {
errEv.Err(err).Caller().Send()
return fmt.Errorf("failed taking ownership of /%s/catalog.html: %s", board.Dir, err.Error())
return fmt.Errorf("failed taking ownership of /%s/catalog.html", board.Dir)
}
threadOPs, err := getBoardTopPosts(boardID)
if err != nil {
errEv.Err(err).Caller().Send()
return fmt.Errorf("failed building catalog for /%s/: %s", board.Dir, err.Error())
return fmt.Errorf("failed building catalog for /%s/", board.Dir)
}
boardConfig := config.GetBoardConfig(board.Dir)
@ -119,7 +118,7 @@ func BuildCatalog(boardID int) error {
"threads": threadOPs,
}, catalogFile, "text/html"); err != nil {
errEv.Err(err).Caller().Send()
return fmt.Errorf("failed building catalog for /%s/: %s", board.Dir, err.Error())
return fmt.Errorf("failed building catalog for /%s/", board.Dir)
}
return catalogFile.Close()
}

View file

@ -61,22 +61,20 @@ func BuildThreadPages(op *gcsql.Post) error {
board, err := op.GetBoard()
if err != nil {
errEv.Err(err).
Caller().Msg("failed building thread")
return errors.New("failed building thread: " + err.Error())
errEv.Err(err).Caller().Msg("failed building thread")
return errors.New("failed building thread")
}
errEv.Str("boardDir", board.Dir)
thread, err := gcsql.GetThread(op.ThreadID)
if err != nil {
errEv.Err(err).
Caller().Msg("Unable to get thread info")
return errors.New("unable to get thread info: " + err.Error())
errEv.Err(err).Caller().Msg("Unable to get thread info")
return errors.New("unable to get thread info")
}
posts, err := getThreadPosts(thread)
if err != nil {
errEv.Err(err).Caller().Send()
return errors.New("failed building thread: " + err.Error())
return errors.New("failed getting thread posts")
}
criticalCfg := config.GetSystemCriticalConfig()
os.Remove(path.Join(criticalCfg.DocumentRoot, board.Dir, "res", strconv.Itoa(op.ID)+".html"))
@ -122,26 +120,21 @@ func BuildThreadPages(op *gcsql.Post) error {
os.O_CREATE|os.O_RDWR|os.O_TRUNC, config.GC_FILE_MODE)
if err != nil {
errEv.Err(err).Caller().Send()
return fmt.Errorf("failed opening /%s/res/%d.json: %s", board.Dir, posts[0].ID, err.Error())
return fmt.Errorf("failed opening /%s/res/%d.json", board.Dir, posts[0].ID)
}
if err = config.TakeOwnershipOfFile(threadJSONFile); err != nil {
errEv.Err(err).Caller().Send()
return fmt.Errorf("failed setting file permissions for /%s/res/%d.json: %s", board.Dir, posts[0].ID, err.Error())
return fmt.Errorf("failed setting file permissions for /%s/res/%d.json", board.Dir, posts[0].ID)
}
threadMap := make(map[string][]Post)
threadMap["posts"] = posts
threadJSON, err := json.Marshal(threadMap)
if err != nil {
gcutil.LogError(err).Send()
return errors.New("failed to marshal to JSON: " + err.Error())
}
if _, err = threadJSONFile.Write(threadJSON); err != nil {
errEv.Err(err).
Caller().Send()
return fmt.Errorf("failed writing /%s/res/%d.json: %s", board.Dir, posts[0].ID, err.Error())
if err = json.NewEncoder(threadJSONFile).Encode(threadMap); err != nil {
errEv.Err(err).Caller().
Msg("Unable to write thread JSON file")
return fmt.Errorf("failed writing /%s/res/%d.json", board.Dir, posts[0].ID)
}
return threadJSONFile.Close()
}

View file

@ -178,9 +178,9 @@ func boardsCallback(_ http.ResponseWriter, request *http.Request, staff *gcsql.S
return "", err
}
if board, err = gcsql.GetBoardFromID(boardID); err != nil {
errEv.Err(err).
errEv.Err(err).Caller().
Int("boardID", boardID).
Caller().Msg("Unable to get board info")
Msg("Unable to get board info")
return "", err
}
case "modify":
@ -330,25 +330,24 @@ func cleanupCallback(_ http.ResponseWriter, request *http.Request, _ *gcsql.Staf
if request.FormValue("run") == "Run Cleanup" {
outputStr += "Removing deleted posts from the database.<hr />"
if err = gcsql.PermanentlyRemoveDeletedPosts(); err != nil {
errEv.Err(err).
Str("cleanup", "removeDeletedPosts").
Caller().Send()
err = errors.New("Error removing deleted posts from database: " + err.Error())
errEv.Err(err).Caller().
Str("cleanup", "removeDeletedPosts").Send()
err = errors.New("unable to remove deleted posts from database")
return outputStr + "<tr><td>" + err.Error() + "</td></tr></table>", err
}
outputStr += "Optimizing all tables in database.<hr />"
err = gcsql.OptimizeDatabase()
if err != nil {
errEv.Err(err).
Str("sql", "optimization").
Caller().Send()
errEv.Err(err).Caller().
Str("sql", "optimization").Send()
err = errors.New("Error optimizing SQL tables: " + err.Error())
return outputStr + "<tr><td>" + err.Error() + "</td></tr></table>", err
}
outputStr += "Cleanup finished"
} else {
outputStr += `<form action="` + config.GetSystemCriticalConfig().WebRoot + `manage/cleanup" method="post">` +
outputStr += `<form action="` + config.WebPath("manage/cleanup") + `" method="post">` +
`<input name="run" id="run" type="submit" value="Run Cleanup" />` +
`</form>`
}

View file

@ -141,13 +141,12 @@ func appealsCallback(_ http.ResponseWriter, request *http.Request, staff *gcsql.
// approving an appeal
approveID, err := strconv.Atoi(approveStr)
if err != nil {
errEv.Err(err).
Str("approveStr", approveStr).Caller().Send()
errEv.Err(err).Caller().
Str("approveStr", approveStr).Send()
}
if err = gcsql.ApproveAppeal(approveID, staff.ID); err != nil {
errEv.Err(err).
Int("approveAppeal", approveID).
Caller().Send()
errEv.Err(err).Caller().
Int("approveAppeal", approveID).Send()
return "", err
}
}
@ -182,9 +181,8 @@ func fileBansCallback(_ http.ResponseWriter, request *http.Request, staff *gcsql
if boardidStr != "" {
boardid, err = strconv.Atoi(boardidStr)
if err != nil {
errEv.Err(err).
Str("boardid", boardidStr).
Caller().Send()
errEv.Err(err).Caller().
Str("boardid", boardidStr).Send()
return "", err
}
}
@ -199,9 +197,8 @@ func fileBansCallback(_ http.ResponseWriter, request *http.Request, staff *gcsql
_, err = regexp.Compile(filename)
if err != nil {
// invalid regular expression
errEv.Err(err).
Str("regex", filename).
Caller().Send()
errEv.Err(err).Caller().
Str("regex", filename).Send()
return "", err
}
}
@ -273,15 +270,13 @@ func fileBansCallback(_ http.ResponseWriter, request *http.Request, staff *gcsql
// user requested a checksum ban ID to delete
delChecksumBanID, err := strconv.Atoi(delChecksumBanIDStr)
if err != nil {
errEv.Err(err).
Str("deleteChecksumBanIDStr", delChecksumBanIDStr).
Caller().Send()
errEv.Err(err).Caller().
Str("deleteChecksumBanIDStr", delChecksumBanIDStr).Send()
return "", err
}
if err = (gcsql.FileBan{ID: delChecksumBanID}).Deactivate(staff.ID); err != nil {
errEv.Err(err).
Int("deleteChecksumBanID", delChecksumBanID).
Caller().Send()
errEv.Err(err).Caller().
Int("deleteChecksumBanID", delChecksumBanID).Send()
return "", err
}
infoEv.Int("deleteChecksumBanID", delChecksumBanID).Msg("File checksum ban deleted")
@ -293,8 +288,8 @@ func fileBansCallback(_ http.ResponseWriter, request *http.Request, staff *gcsql
var filterBoardID int
if filterBoardIDstr != "" {
if filterBoardID, err = strconv.Atoi(filterBoardIDstr); err != nil {
errEv.Err(err).
Str("filterboardid", filterBoardIDstr).Caller().Send()
errEv.Err(err).Caller().
Str("filterboardid", filterBoardIDstr).Send()
return "", err
}
}
@ -337,15 +332,14 @@ func nameBansCallback(_ http.ResponseWriter, request *http.Request, staff *gcsql
if deleteIDstr != "" {
deleteID, err := strconv.Atoi(deleteIDstr)
if err != nil {
errEv.Err(err).
Str("delStr", deleteIDstr).
Caller().Send()
errEv.Err(err).Caller().
Str("delStr", deleteIDstr).Send()
return "", err
}
if err = gcsql.DeleteNameBan(deleteID); err != nil {
errEv.Err(err).
errEv.Err(err).Caller().
Int("deleteID", deleteID).
Caller().Msg("Unable to delete name ban")
Msg("Unable to delete name ban")
return "", errors.New("Unable to delete name ban: " + err.Error())
}
}
@ -367,9 +361,9 @@ func nameBansCallback(_ http.ResponseWriter, request *http.Request, staff *gcsql
}
isRegex := request.FormValue("isregex") == "on"
if _, err = gcsql.NewNameBan(name, isRegex, boardID, staff.ID, request.FormValue("staffnote")); err != nil {
errEv.Err(err).
errEv.Err(err).Caller().
Str("name", name).
Int("boardID", boardID)
Int("boardID", boardID).Send()
return "", err
}
}
@ -439,9 +433,8 @@ func reportsCallback(_ http.ResponseWriter, request *http.Request, staff *gcsql.
}
found, err := gcsql.ClearReport(dismissID, staff.ID, block != "" && staff.Rank == 3)
if err != nil {
errEv.Err(err).
Int("postID", dismissID).
Caller().Send()
errEv.Err(err).Caller().
Int("postID", dismissID).Send()
return nil, err
}
if !found {

View file

@ -49,9 +49,9 @@ func ipBanFromRequest(ban *gcsql.IPBan, request *http.Request, infoEv *zerolog.E
durationStr := request.FormValue("duration")
duration, err := durationutil.ParseLongerDuration(durationStr)
if err != nil {
errEv.Err(err).
errEv.Err(err).Caller().
Str("duration", durationStr).
Caller().Msg("Invalid duration")
Msg("Invalid duration")
return err
}
ban.ExpiresAt = now.Add(duration)

View file

@ -60,9 +60,8 @@ func CallManageFunction(writer http.ResponseWriter, request *http.Request) {
staff = &gcsql.Staff{}
err = nil
} else if err != nil && err != sql.ErrNoRows {
errEv.Err(err).
Str("request", "getCurrentFullStaff").
Caller().Send()
errEv.Err(err).Caller().
Str("request", "getCurrentFullStaff").Send()
server.ServeError(writer, "Error getting staff info from request: "+err.Error(), wantsJSON, nil)
return
}

View file

@ -46,9 +46,9 @@ func createSession(key, username, password string, request *http.Request, writer
staff, err := gcsql.GetStaffByUsername(username, true)
if err != nil {
if err != sql.ErrNoRows {
errEv.Err(err).
errEv.Err(err).Caller().
Str("remoteAddr", request.RemoteAddr).
Caller().Msg("Unrecognized username")
Msg("Unrecognized username")
}
return ErrBadCredentials
}
@ -56,8 +56,7 @@ func createSession(key, username, password string, request *http.Request, writer
err = bcrypt.CompareHashAndPassword([]byte(staff.PasswordChecksum), []byte(password))
if err == bcrypt.ErrMismatchedHashAndPassword {
// password mismatch
errEv.Caller().
Msg("Invalid password")
errEv.Caller().Msg("Invalid password")
return ErrBadCredentials
}

View file

@ -110,8 +110,8 @@ func handleAppeal(writer http.ResponseWriter, request *http.Request, infoEv *zer
}
banID, err := strconv.Atoi(banIDstr)
if err != nil {
errEv.Err(err).
Str("banIDstr", banIDstr).Caller().Send()
errEv.Err(err).Caller().
Str("banIDstr", banIDstr).Send()
server.ServeErrorPage(writer, fmt.Sprintf("Invalid banid value %q", banIDstr))
return
}
@ -158,9 +158,9 @@ func handleAppeal(writer http.ResponseWriter, request *http.Request, infoEv *zer
server.ServeErrorPage(writer, "You are not able to appeal this ban until "+ban.AppealAt.Format(config.GetBoardConfig("").DateTimeFormat))
}
if err = ban.Appeal(appealMsg); err != nil {
errEv.Err(err).
errEv.Err(err).Caller().
Str("appealMsg", appealMsg).
Caller().Msg("Unable to submit appeal")
Msg("Unable to submit appeal")
server.ServeErrorPage(writer, "Unable to submit appeal")
return
}

View file

@ -81,6 +81,22 @@ func attachFlag(request *http.Request, post *gcsql.Post, board string, errEv *ze
return nil
}
func handleRecover(writer http.ResponseWriter, wantsJSON bool, infoEv *zerolog.Event, errEv *zerolog.Event) {
if a := recover(); a != nil {
if writer != nil {
writer.WriteHeader(http.StatusInternalServerError)
server.ServeError(writer, "Internal server error", wantsJSON, nil)
}
errEv.Caller().
Str("recover", fmt.Sprintf("%v", a)).
Bytes("stack", debug.Stack()).
Msg("Recovered from panic")
debug.PrintStack()
}
errEv.Discard()
infoEv.Discard()
}
// 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)
@ -91,19 +107,7 @@ func MakePost(writer http.ResponseWriter, request *http.Request) {
Str("IP", ip)
infoEv := gcutil.LogInfo().
Str("IP", ip)
defer func() {
if a := recover(); a != nil {
writer.WriteHeader(http.StatusInternalServerError)
server.ServeError(writer, "Internal server error", wantsJSON, nil)
errEv.Caller().
Str("recover", fmt.Sprintf("%v", a)).
Bytes("stack", debug.Stack()).
Msg("Recovered from panic")
debug.PrintStack()
}
errEv.Discard()
infoEv.Discard()
}()
defer handleRecover(writer, wantsJSON, infoEv, errEv)
var formName string
var formEmail string
@ -132,20 +136,19 @@ func MakePost(writer http.ResponseWriter, request *http.Request) {
if threadidStr != "" {
// post is a reply
if opID, err = strconv.Atoi(threadidStr); err != nil {
errEv.Err(err).
errEv.Err(err).Caller().
Str("opIDstr", threadidStr).
Caller().Msg("Invalid threadid value")
server.ServeError(writer, "Invalid form data (invalid threadid)", wantsJSON, map[string]interface{}{
Msg("Invalid threadid value")
server.ServeError(writer, "Invalid form data (invalid threadid)", wantsJSON, map[string]any{
"threadid": threadidStr,
})
return
}
if opID > 0 {
if post.ThreadID, err = gcsql.GetTopPostThreadID(opID); err != nil {
errEv.Err(err).
Int("opID", opID).
Caller().Send()
server.ServeError(writer, err.Error(), wantsJSON, map[string]interface{}{
errEv.Err(err).Caller().
Int("opID", opID).Send()
server.ServeError(writer, err.Error(), wantsJSON, map[string]any{
"opID": opID,
})
}
@ -156,7 +159,7 @@ func MakePost(writer http.ResponseWriter, request *http.Request) {
boardID, err := strconv.Atoi(boardidStr)
if err != nil {
errEv.Str("boardid", boardidStr).Caller().Msg("Invalid boardid value")
server.ServeError(writer, "Invalid form data (invalid boardid)", wantsJSON, map[string]interface{}{
server.ServeError(writer, "Invalid form data (invalid boardid)", wantsJSON, map[string]any{
"boardid": boardidStr,
})
return
@ -166,7 +169,7 @@ func MakePost(writer http.ResponseWriter, request *http.Request) {
errEv.Err(err).Caller().
Int("boardid", boardID).
Msg("Unable to get board info")
server.ServeError(writer, "Unable to get board info", wantsJSON, map[string]interface{}{
server.ServeError(writer, "Unable to get board info", wantsJSON, map[string]any{
"boardid": boardID,
})
return
@ -202,7 +205,7 @@ func MakePost(writer http.ResponseWriter, request *http.Request) {
errEv.
Int("messageLength", len(post.MessageRaw)).
Int("maxMessageLength", postBoard.MaxMessageLength).Send()
server.ServeError(writer, "Message is too long", wantsJSON, map[string]interface{}{
server.ServeError(writer, "Message is too long", wantsJSON, map[string]any{
"messageLength": len(post.MessageRaw),
"boardid": boardID,
})
@ -211,7 +214,7 @@ func MakePost(writer http.ResponseWriter, request *http.Request) {
if post.MessageRaw, err = ApplyWordFilters(post.MessageRaw, postBoard.Dir); err != nil {
errEv.Err(err).Caller().Msg("Error formatting post")
server.ServeError(writer, "Error formatting post: "+err.Error(), wantsJSON, map[string]interface{}{
server.ServeError(writer, "Error formatting post: "+err.Error(), wantsJSON, map[string]any{
"boardDir": postBoard.Dir,
})
return
@ -278,7 +281,7 @@ func MakePost(writer http.ResponseWriter, request *http.Request) {
}
if err != nil {
errEv.Err(err).Caller().Str("boardDir", postBoard.Dir).Msg("Unable to check post cooldown")
server.ServeError(writer, "Error checking post cooldown: "+err.Error(), wantsJSON, map[string]interface{}{
server.ServeError(writer, "Error checking post cooldown: "+err.Error(), wantsJSON, map[string]any{
"boardDir": postBoard.Dir,
})
return
@ -298,8 +301,7 @@ func MakePost(writer http.ResponseWriter, request *http.Request) {
captchaSuccess, err := submitCaptchaResponse(request)
if err != nil {
errEv.Err(err).
Caller().Send()
errEv.Err(err).Caller().Send()
server.ServeError(writer, "Error submitting captcha response:"+err.Error(), wantsJSON, nil)
return
}
@ -379,7 +381,7 @@ func MakePost(writer http.ResponseWriter, request *http.Request) {
os.Remove(thumbPath)
os.Remove(catalogThumbPath)
post.Delete()
server.ServeError(writer, "Unable to attach upload", wantsJSON, map[string]interface{}{
server.ServeError(writer, "Unable to attach upload", wantsJSON, map[string]any{
"filename": upload.OriginalFilename,
})
return
@ -416,7 +418,7 @@ func MakePost(writer http.ResponseWriter, request *http.Request) {
topPost, _ = post.TopPostID()
}
writer.Header().Set("Content-Type", "application/json")
json.NewEncoder(writer).Encode(map[string]interface{}{
json.NewEncoder(writer).Encode(map[string]any{
"time": post.CreatedOn,
"id": post.ID,
"thread": config.WebPath(postBoard.Dir, "/res/", strconv.Itoa(topPost)+".html"),

View file

@ -7,19 +7,21 @@ import (
"github.com/gochan-org/gochan/pkg/config"
"github.com/gochan-org/gochan/pkg/gcutil"
"github.com/rs/zerolog"
)
// ValidReferer checks to make sure that the incoming request is from the same domain (or if debug mode is enabled)
func ValidReferer(request *http.Request) bool {
if config.VerboseMode() {
return true
}
func ValidReferer(request *http.Request, errEv ...*zerolog.Event) bool {
referer := request.Referer()
rURL, err := url.ParseRequestURI(referer)
if err != nil {
gcutil.Logger().Err(err).
Str("referer", referer).
Msg("Error parsing referer URL")
var ev *zerolog.Event
if len(errEv) == 1 {
ev = gcutil.LogError(err).Caller()
} else {
ev = errEv[0].Err(err).Caller()
}
ev.Str("referer", referer).Msg("Error parsing referer URL")
return false
}
return strings.Index(rURL.Path, config.GetSystemCriticalConfig().WebRoot) == 0