...
1 package server
2
3 import (
4 "log"
5 "net/http"
6 "time"
7
8 "codeberg.org/tslocum/sriracha/internal/database"
9 . "codeberg.org/tslocum/sriracha/model"
10 . "codeberg.org/tslocum/sriracha/util"
11 )
12
13 func (s *Server) serveReport(db *database.DB, w http.ResponseWriter, r *http.Request) {
14 data := s.buildData(db, w, r)
15
16 postID := FormInt(r, "post")
17 if postID <= 0 {
18 data.BoardError(w, Get(nil, data.Account, "No post selected."))
19 return
20 }
21
22 post := db.PostByID(postID)
23 if post == nil {
24 data.BoardError(w, Get(nil, data.Account, "No post selected."))
25 return
26 } else if post.Moderated == ModeratedVisible {
27 numReports := db.NumReports(post)
28 if numReports == 0 {
29 postCopy := post.Copy()
30 for _, info := range allPluginReportHandlers {
31 db.Plugin = info.Name
32 err := info.Handler(db, postCopy)
33 if err != nil {
34 log.Fatalf("plugin %s failed to process report event: %s", info.Name, err)
35 }
36 }
37 db.Plugin = ""
38 }
39
40 report := &Report{
41 Board: post.Board,
42 Post: post,
43 Timestamp: time.Now().Unix(),
44 IP: s.hashIP(r),
45 }
46 db.AddReport(report)
47 }
48
49 data.Template = "board_info"
50 data.Info = Get(post.Board, data.Account, "Reported No.%d", post.ID)
51 data.execute(w)
52 }
53
View as plain text