mirror of
https://github.com/Eggbertx/gochan.git
synced 2025-08-17 10:56:24 -07:00
parent
9d9a978e68
commit
adb032d2ed
4 changed files with 129 additions and 19 deletions
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue