1
0
Fork 0
mirror of https://github.com/Eggbertx/gochan.git synced 2025-08-17 10:56:24 -07:00

readd filename banning page

Related to issue #28
This commit is contained in:
Eggbertx 2022-11-18 16:47:25 -08:00
parent 9d9a978e68
commit adb032d2ed
4 changed files with 129 additions and 19 deletions

View file

@ -192,6 +192,64 @@ func CheckNameBan(name string, boardID int) (*UsernameBan, error) {
}, nil
}
func GetFileBans(boardID int, limit int) ([]FileBan, error) {
query := `SELECT id, board_id, staff_id, staff_note, issued_at, checksum FROM DBPREFIXfile_ban`
limitStr := ""
if limit > 0 {
limitStr = " LIMIT " + strconv.Itoa(limit)
}
var rows *sql.Rows
var err error
if boardID > 0 {
query += " WHERE board_id = ?"
rows, err = QuerySQL(query+limitStr, boardID)
} else {
rows, err = QuerySQL(query + limitStr)
}
if err != nil {
return nil, err
}
defer rows.Close()
var bans []FileBan
for rows.Next() {
var ban FileBan
if err = rows.Scan(&ban.ID, &ban.BoardID, &ban.StaffID, &ban.StaffNote, &ban.IssuedAt, &ban.Checksum); err != nil {
return nil, err
}
bans = append(bans, ban)
}
return bans, nil
}
func GetFilenameBans(boardID int, limit int) ([]FilenameBan, error) {
query := `SELECT id, board_id, staff_id, staff_note, issued_at, filename FROM DBPREFIXfilename_ban`
limitStr := ""
if limit > 0 {
limitStr = " LIMIT " + strconv.Itoa(limit)
}
var rows *sql.Rows
var err error
if boardID > 0 {
query += " WHERE board_id = ?"
rows, err = QuerySQL(query+limitStr, boardID)
} else {
rows, err = QuerySQL(query + limitStr)
}
if err != nil {
return nil, err
}
defer rows.Close()
var bans []FilenameBan
for rows.Next() {
var ban FilenameBan
if err = rows.Scan(&ban.ID, &ban.BoardID, &ban.StaffID, &ban.StaffNote, &ban.IssuedAt, &ban.Filename); err != nil {
return nil, err
}
bans = append(bans, ban)
}
return bans, nil
}
func (ub filenameOrUsernameBanBase) IsGlobalBan() bool {
return ub.BoardID == nil
}

View file

@ -172,6 +172,16 @@ var funcMap = template.FuncMap{
dir, _ := gcsql.GetBoardDir(id)
return dir
},
"intPtrToBoardDir": func(id *int, ifNil string, ifErr string) string {
if id == nil {
return ifNil
}
dir, err := gcsql.GetBoardDir(*id)
if err != nil {
return ifErr
}
return dir
},
"getStaffNameFromID": func(id int) string {
username, err := gcsql.GetStaffUsernameFromID(id)
if err != nil {

View file

@ -211,15 +211,6 @@ var actions = []Action{
return manageRecentsBuffer.String(), nil
},
},
{
ID: "checksumbans",
Title: "File checksum bans",
Permissions: ModPerms,
JSONoutput: OptionalJSON,
Callback: func(writer http.ResponseWriter, request *http.Request, staff *gcsql.Staff, wantsJSON bool, infoEv, errEv *zerolog.Event) (output interface{}, err error) {
return "", gcutil.ErrNotImplemented
},
},
{
ID: "bans",
Title: "Bans",
@ -296,6 +287,52 @@ var actions = []Action{
outputStr += manageBansBuffer.String()
return outputStr, nil
}},
{
ID: "filebans",
Title: "Filename and checksum bans",
Permissions: ModPerms,
Callback: func(writer http.ResponseWriter, request *http.Request, staff *gcsql.Staff, wantsJSON bool, infoEv, errEv *zerolog.Event) (output interface{}, err error) {
filterBoardIDstr := request.FormValue("filterboardid")
var filterBoardID int
if filterBoardIDstr != "" {
if filterBoardID, err = strconv.Atoi(filterBoardIDstr); err != nil {
errEv.Err(err).
Str("filterboardid", filterBoardIDstr).Caller().Send()
return "", err
}
}
limitStr := request.FormValue("limit")
limit := 200
if limitStr != "" {
if limit, err = strconv.Atoi(limitStr); err != nil {
errEv.Err(err).
Str("limit", limitStr).Caller().Send()
return "", err
}
}
checksumBans, err := gcsql.GetFileBans(filterBoardID, limit)
if err != nil {
return "", err
}
filenameBans, err := gcsql.GetFilenameBans(filterBoardID, limit)
if err != nil {
return "", err
}
manageBansBuffer := bytes.NewBufferString("")
if err = serverutil.MinifyTemplate(gctemplates.ManageFileBans, map[string]interface{}{
"allBoards": gcsql.AllBoards,
"checksumBans": checksumBans,
"filenameBans": filenameBans,
"filterboardid": filterBoardID,
}, manageBansBuffer, "text/html"); err != nil {
errEv.Err(err).Str("template", "manage_filebans.html").Caller().Send()
return "", errors.New("Error executing ban management page template: " + err.Error())
}
outputStr := manageBansBuffer.String()
return outputStr, nil
},
},
{
ID: "ipsearch",
Title: "IP Search",

View file

@ -10,9 +10,11 @@
<table>
<tr><td>Filename:</td><td><input type="text" name="filename" id="filename"></td></tr>
<tr><td>SQL wildcard:<sup><a href="https://www.w3schools.com/sql/sql_wildcards.asp" target="_blank">?</a></sup></td><td><input type="checkbox" name="iswildcard" id="iswildcard"/></td></tr>
<tr><td>Board:</td><td><select name="board">
<option value="">All boards (global ban)</option>
{{- range $b,$uri := .boardURIs -}}<option value="{{$uri}}">/{{$uri}}/</option>{{end -}}
<tr><td>Board:</td><td><select name="boardid" id="boardid">
<option value="0">All boards</option>
{{- range $b, $board := $.allBoards -}}
<option value="{{$board.ID}}" {{if eq (dereference $.ban.BoardID) $board.ID}}selected{{end}}>/{{$board.Dir}}/ - {{$board.Title}}</option>
{{- end -}}
</select></td></tr>
<tr><td>Staff:</td><td>{{.currentStaff}}</td></tr>
<tr><td>Staff note:</td><td><input type="text" name="staffnote"/></td></tr>
@ -28,8 +30,9 @@
<tr>
<td>{{$ban.Filename}}</td>
<td>{{$ban.IsRegex}}</td>
<td>{{$uri := $ban.BoardURI}}{{if eq $uri ""}}<i>All boards</i>{{else}}/{{$uri}}/{{end}}</td>
<td>{{$staff := $ban.StaffName}}{{if eq $staff ""}}<i>?</i>{{else}}{{$staff}}{{end}}</td>
<td>{{$uri := (intPtrToBoardDir $ban.BoardID "" "?")}}{{if eq $uri ""}}<i>All boards</i>{{else}}/{{$uri}}/{{end}}</td>
<td>{{$staff := (getStaffNameFromID $ban.StaffID)}}{{if eq $staff ""}}<i>?</i>{{else}}{{$staff}}{{end}}</td>
<td>{{$ban.StaffNote}}</td>
<td><a href="{{$.webroot}}manage?action=filebans&delfnb={{$ban.ID}}">Delete</a></td>
</tr>
@ -43,9 +46,11 @@
<input type="hidden" name="bantype" value="checksum">
<table>
<tr><td>Checksum</td><td><input type="text" name="checksum"></td></tr>
<tr><td>Board</td><td><select name="board">
<option value="">All boards (global ban)</option>
{{- range $b,$uri := .boardURIs -}}<option value="{{$uri}}">/{{$uri}}/</option>{{end -}}
<tr><td>Board</td><td><select name="boardid" id="boardid">
<option value="0">All boards</option>
{{- range $b, $board := $.allBoards -}}
<option value="{{$board.ID}}" {{if eq (dereference $.ban.BoardID) $board.ID}}selected{{end}}>/{{$board.Dir}}/ - {{$board.Title}}</option>
{{- end -}}
</select></td></tr>
<tr><td>Staff:</td><td>{{.currentStaff}}</td></tr>
<tr><td>Staff note:</td><td><input type="text" name="staffnote"/></td></tr>
@ -60,8 +65,8 @@
{{range $b,$ban := .checksumBans}}
<tr>
<td>{{$ban.Checksum}}</td>
<td>{{$uri := $ban.BoardURI}}{{if eq $uri ""}}<i>All boards</i>{{else}}/{{$uri}}/{{end}}</td>
<td>{{$staff := $ban.StaffName}}{{if eq $staff ""}}<i>?</i>{{else}}{{$staff}}{{end}}</td>
<td>{{$uri := (intPtrToBoardDir $ban.BoardID "" "?")}}{{if eq $uri ""}}<i>All boards</i>{{else}}/{{$uri}}/{{end}}</td>
<td>{{$staff := (getStaffNameFromID $ban.StaffID)}}{{if eq $staff ""}}<i>?</i>{{else}}{{$staff}}{{end}}</td>
<td>{{$ban.StaffNote}}</td>
<td><a href="{{$.webroot}}manage?action=filebans&delcsb={{$ban.ID}}#checksum-bans">Delete</a></td>
</tr>