...
1 package server
2
3 import (
4 "bytes"
5 "html/template"
6 "net/http"
7 "strings"
8 "time"
9
10 "codeberg.org/tslocum/sriracha/internal/database"
11 . "codeberg.org/tslocum/sriracha/model"
12 . "codeberg.org/tslocum/sriracha/util"
13 )
14
15 func (s *Server) serveStatus(data *templateData, db *database.DB, w http.ResponseWriter, r *http.Request) {
16 if r.Method == http.MethodPost {
17 approve := FormInt(r, "approve")
18 if approve > 0 {
19 boardID := FormInt(r, "board")
20 if boardID > 0 {
21 b := db.BoardByID(boardID)
22 if b != nil {
23 post := db.PostByID(approve)
24 if post != nil {
25 rebuild := post.Moderated == ModeratedHidden
26
27 db.ModeratePost(post.ID, ModeratedApproved)
28 db.DeleteReports(post)
29
30 if rebuild {
31 db.BumpThread(post.Thread(), time.Now().Unix())
32 s.rebuildThread(db, post)
33 s.queueNotifications(db, post)
34 }
35 }
36 }
37 }
38 }
39
40 http.Redirect(w, r, "/sriracha/", http.StatusFound)
41 return
42 }
43
44 buf := &bytes.Buffer{}
45 data.Template = "manage_status"
46
47
48 if r.URL.Query().Has("remoteAddress") {
49 if data.forbidden(w, RoleSuperAdmin) {
50 return
51 }
52 data.Info = "Remote address: " + s.requestIP(r)
53 }
54
55
56 if r.URL.Query().Has("rebuildNameblocks") {
57 if data.forbidden(w, RoleSuperAdmin) {
58 return
59 }
60 for _, b := range db.AllBoards() {
61 for _, threadInfo := range db.AllThreads(b, false) {
62 for _, p := range db.AllPostsInThread(threadInfo[0], false) {
63 var capcode string
64 if strings.Contains(p.NameBlock, `<span style="color: red`) {
65 capcode = "Mod"
66 } else if strings.Contains(p.NameBlock, `<span style="color: purple`) {
67 capcode = "Admin"
68 }
69 p.SetNameBlock(p.Board.DefaultName, capcode, s.opt.Identifiers)
70
71 db.UpdatePostNameblock(p.ID, p.NameBlock)
72 }
73 }
74 s.rebuildBoard(db, b)
75 }
76 data.Info = "Rebuilt nameblocks"
77 }
78
79 reports := db.AllReports()
80 for i, report := range reports {
81 if i > 0 {
82 buf.WriteString("<hr>\n")
83 }
84
85 d := s.buildData(db, w, r)
86 d.Template = "manage_status_item"
87 d.Board = report.Post.Board
88 d.Post = report.Post
89 d.Threads = [][]*Post{{report.Post}}
90 d.Manage.Report = report
91 d.execute(buf)
92 }
93 data.Message = template.HTML(buf.String())
94
95 buf.Reset()
96 pending := db.PendingPosts()
97 for i, post := range pending {
98 if i > 0 {
99 buf.WriteString("<hr>\n")
100 }
101
102 d := s.buildData(db, w, r)
103 d.Template = "manage_status_item"
104 d.Board = post.Board
105 d.Post = post
106 d.Threads = [][]*Post{{post}}
107 d.execute(buf)
108 }
109 data.Message2 = template.HTML(buf.String())
110 }
111
View as plain text