...

Source file src/codeberg.org/tslocum/sriracha/internal/server/server_report.go

Documentation: codeberg.org/tslocum/sriracha/internal/server

     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