mirror of
https://github.com/Eggbertx/gochan.git
synced 2025-08-03 03:36:22 -07:00
Clean up /manage handler, refer to manage functions as actions
This commit is contained in:
parent
556a0e92f7
commit
cba60dc06b
5 changed files with 103 additions and 143 deletions
5
go.mod
5
go.mod
|
@ -9,9 +9,10 @@ require (
|
|||
github.com/go-sql-driver/mysql v1.5.0
|
||||
github.com/lib/pq v1.8.0
|
||||
github.com/mojocn/base64Captcha v1.3.1
|
||||
github.com/nranchev/go-libGeoIP v0.0.0-20170629073846-d6d4a9a4c7e8 // indirect
|
||||
// github.com/nranchev/go-libGeoIP v0.0.0-20170629073846-d6d4a9a4c7e8 // indirect
|
||||
github.com/tdewolff/minify v2.3.6+incompatible
|
||||
github.com/tdewolff/parse v2.3.4+incompatible // indirect
|
||||
github.com/tdewolff/test v1.0.6 // indirect
|
||||
golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0
|
||||
golang.org/x/net v0.0.0-20201008222804-59f7323070c5
|
||||
golang.org/x/net v0.0.0-20201009032441-dbdefad45b89
|
||||
)
|
||||
|
|
42
go.sum
42
go.sum
|
@ -8,66 +8,34 @@ github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gG
|
|||
github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
|
||||
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g=
|
||||
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
|
||||
github.com/lib/pq v1.4.0 h1:TmtCFbH+Aw0AixwyttznSMQDgbR5Yed/Gg6S8Funrhc=
|
||||
github.com/lib/pq v1.4.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
|
||||
github.com/lib/pq v1.5.2 h1:yTSXVswvWUOQ3k1sd7vJfDrbSl8lKuscqFJRqjC0ifw=
|
||||
github.com/lib/pq v1.5.2/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
|
||||
github.com/lib/pq v1.7.0 h1:h93mCPfUSkaul3Ka/VG8uZdmW1uMHDGxzu0NWHuJmHY=
|
||||
github.com/lib/pq v1.7.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
|
||||
github.com/lib/pq v1.8.0 h1:9xohqzkUwzR4Ga4ivdTcawVS89YSDVxXMa3xJX3cGzg=
|
||||
github.com/lib/pq v1.8.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
|
||||
github.com/mojocn/base64Captcha v1.2.2 h1:NTFnThPVrb3tR66JO/N8/ZHsyFrNc7ho+xRpxBUEIlo=
|
||||
github.com/mojocn/base64Captcha v1.2.2/go.mod h1:wAQCKEc5bDujxKRmbT6/vTnTt5CjStQ8bRfPWUuz/iY=
|
||||
github.com/mojocn/base64Captcha v1.3.1 h1:2Wbkt8Oc8qjmNJ5GyOfSo4tgVQPsbKMftqASnq8GlT0=
|
||||
github.com/mojocn/base64Captcha v1.3.1/go.mod h1:wAQCKEc5bDujxKRmbT6/vTnTt5CjStQ8bRfPWUuz/iY=
|
||||
github.com/nranchev/go-libGeoIP v0.0.0-20170629073846-d6d4a9a4c7e8 h1:IeI4GVfCGrGx4tZROZ/ju+nO9rKpgKJ7o4XmQgAM/2g=
|
||||
github.com/nranchev/go-libGeoIP v0.0.0-20170629073846-d6d4a9a4c7e8/go.mod h1:CSS25pAr1pT+qxFdpFZIJFHraF4zZfZYeFirlVvLXb4=
|
||||
github.com/tdewolff/minify v2.3.6+incompatible h1:2hw5/9ZvxhWLvBUnHE06gElGYz+Jv9R4Eys0XUzItYo=
|
||||
github.com/tdewolff/minify v2.3.6+incompatible/go.mod h1:9Ov578KJUmAWpS6NeZwRZyT56Uf6o3Mcz9CEsg8USYs=
|
||||
github.com/tdewolff/parse v2.3.4+incompatible h1:x05/cnGwIMf4ceLuDMBOdQ1qGniMoxpP46ghf0Qzh38=
|
||||
github.com/tdewolff/parse v2.3.4+incompatible/go.mod h1:8oBwCsVmUkgHO8M5iCzSIDtpzXOT0WXX9cWhz+bIzJQ=
|
||||
github.com/tdewolff/test v1.0.6 h1:76mzYJQ83Op284kMT+63iCNCI7NEERsIN8dLM+RiKr4=
|
||||
github.com/tdewolff/test v1.0.6/go.mod h1:6DAvZliBAAnD7rhVgwaM7DE5/d9NMOAJ09SqYqeK4QE=
|
||||
gitlab.com/nyarla/go-crypt v0.0.0-20160106005555-d9a5dc2b789b h1:7gd+rd8P3bqcn/96gOZa3F5dpJr/vEiDQYlNb/y2uNs=
|
||||
gitlab.com/nyarla/go-crypt v0.0.0-20160106005555-d9a5dc2b789b/go.mod h1:T3BPAOm2cqquPa0MKWeNkmOM5RQsRhkrwMWonFMN7fE=
|
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||
golang.org/x/crypto v0.0.0-20200427165652-729f1e841bcc h1:ZGI/fILM2+ueot/UixBSoj9188jCAxVHEZEGhqq67I4=
|
||||
golang.org/x/crypto v0.0.0-20200427165652-729f1e841bcc/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20200429183012-4b2356b1ed79 h1:IaQbIIB2X/Mp/DKctl6ROxz1KyMlKp4uyvL6+kQ7C88=
|
||||
golang.org/x/crypto v0.0.0-20200429183012-4b2356b1ed79/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9 h1:vEg9joUBmeBcK9iSJftGNf3coIG4HqZElCPehJsfAYM=
|
||||
golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
|
||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20200707235045-ab33eee955e0 h1:eIYIE7EC5/Wv5Kbz8bJPaq+TN3kq3W8S+LSm62vM0DY=
|
||||
golang.org/x/crypto v0.0.0-20200707235045-ab33eee955e0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899 h1:DZhuSZLsGlFL4CmhA8BcRA0mnthyA/nZ00AqCUo7vHg=
|
||||
golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20201001193750-eb9a90e9f9cb h1:+i8XQ/zMhKyWrZ8ZrEx4+Eli5lXoBdSdFzKDjxPAC2I=
|
||||
golang.org/x/crypto v0.0.0-20201001193750-eb9a90e9f9cb/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0 h1:hb9wdF1z5waM+dSIICn1l0DkLVDT3hqhhQsDNUmHPRE=
|
||||
golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/image v0.0.0-20190501045829-6d32002ffd75/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
|
||||
golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8 h1:hVwzHzIUGRjiF7EcUjqNxk3NCfkPxbDKRdnNE1Rpg0U=
|
||||
golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
|
||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||
golang.org/x/net v0.0.0-20200425230154-ff2c4b7c35a0 h1:Jcxah/M+oLZ/R4/z5RzfPzGbPXnVDPkEDtf2JnuxN+U=
|
||||
golang.org/x/net v0.0.0-20200425230154-ff2c4b7c35a0/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
||||
golang.org/x/net v0.0.0-20200506145744-7e3656a0809f h1:QBjCr1Fz5kw158VqdE9JfI9cJnl/ymnJWAdMuinqL7Y=
|
||||
golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
||||
golang.org/x/net v0.0.0-20200602114024-627f9648deb9 h1:pNX+40auqi2JqRfOP1akLGtYcn15TUbkhwuCO3foqqM=
|
||||
golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
||||
golang.org/x/net v0.0.0-20200625001655-4c5254603344 h1:vGXIOMxbNfDTk/aXCmfdLgkrSV+Z2tcbze+pEc3v5W4=
|
||||
golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
|
||||
golang.org/x/net v0.0.0-20200707034311-ab3426394381 h1:VXak5I6aEWmAXeQjA+QSZzlgNrpq9mjcfDemuexIKsU=
|
||||
golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
|
||||
golang.org/x/net v0.0.0-20200930145003-4acb6c075d10 h1:YfxMZzv3PjGonQYNUaeU2+DhAdqOxerQ30JFB6WgAXo=
|
||||
golang.org/x/net v0.0.0-20200930145003-4acb6c075d10/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
|
||||
golang.org/x/net v0.0.0-20201008222804-59f7323070c5 h1:QlAbOwB6fYmEOgMjWW+WGWk9wX5FGoKw15QBvlor/n4=
|
||||
golang.org/x/net v0.0.0-20201008222804-59f7323070c5/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||
golang.org/x/net v0.0.0-20201009032441-dbdefad45b89 h1:1GKfLldebiSdhTlt3nalwrb7L40Tixr/0IH+kSbRgmk=
|
||||
golang.org/x/net v0.0.0-20201009032441-dbdefad45b89/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=
|
||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
|
|
|
@ -25,21 +25,34 @@ import (
|
|||
"github.com/gochan-org/gochan/pkg/serverutil"
|
||||
)
|
||||
|
||||
const (
|
||||
// NoPerms allows anyone to access this Action
|
||||
NoPerms = iota
|
||||
// JanitorPerms allows anyone with at least a janitor-level account to access this Action
|
||||
JanitorPerms
|
||||
// ModPerms allows anyone with at least a moderator-level account to access this Action
|
||||
ModPerms
|
||||
// AdminPerms allows only the site administrator to view this Action
|
||||
AdminPerms
|
||||
)
|
||||
|
||||
var (
|
||||
chopPortNumRegex = regexp.MustCompile(`(.+|\w+):(\d+)$`)
|
||||
)
|
||||
|
||||
// ManageFunction represents the functions accessed by staff members at /manage?action=<functionname>.
|
||||
type ManageFunction struct {
|
||||
Title string
|
||||
Permissions int // 0 -> non-staff, 1 => janitor, 2 => moderator, 3 => administrator
|
||||
// Action represents the functions accessed by staff members at /manage?action=<functionname>.
|
||||
type Action struct {
|
||||
Title string `json:"title"`
|
||||
Permissions int `json:"perms"` // 0 = non-staff, 1 => janitor, 2 => moderator, 3 => administrator
|
||||
isJSON bool `json:"-"` // if it can sometimes return JSON, this should still be false
|
||||
|
||||
Callback func(writer http.ResponseWriter, request *http.Request) (string, error) `json:"-"` //return string of html output
|
||||
}
|
||||
|
||||
var manageFunctions = map[string]ManageFunction{
|
||||
var actions = map[string]Action{
|
||||
"cleanup": {
|
||||
Title: "Cleanup",
|
||||
Permissions: 3,
|
||||
Permissions: AdminPerms,
|
||||
Callback: func(writer http.ResponseWriter, request *http.Request) (htmlOut string, err error) {
|
||||
htmlOut = `<h2 class="manage-header">Cleanup</h2><br />`
|
||||
|
||||
|
@ -70,7 +83,7 @@ var manageFunctions = map[string]ManageFunction{
|
|||
}},
|
||||
"config": {
|
||||
Title: "Configuration",
|
||||
Permissions: 3,
|
||||
Permissions: AdminPerms,
|
||||
Callback: func(writer http.ResponseWriter, request *http.Request) (htmlOut string, err error) {
|
||||
do := request.FormValue("do")
|
||||
var status string
|
||||
|
@ -285,7 +298,7 @@ var manageFunctions = map[string]ManageFunction{
|
|||
}},
|
||||
"login": {
|
||||
Title: "Login",
|
||||
Permissions: 0,
|
||||
Permissions: NoPerms,
|
||||
Callback: func(writer http.ResponseWriter, request *http.Request) (htmlOut string, err error) {
|
||||
if GetStaffRank(request) > 0 {
|
||||
http.Redirect(writer, request, path.Join(config.Config.SiteWebfolder, "manage"), http.StatusFound)
|
||||
|
@ -313,7 +326,7 @@ var manageFunctions = map[string]ManageFunction{
|
|||
}},
|
||||
"logout": {
|
||||
Title: "Logout",
|
||||
Permissions: 1,
|
||||
Permissions: JanitorPerms,
|
||||
Callback: func(writer http.ResponseWriter, request *http.Request) (htmlOut string, err error) {
|
||||
cookie, _ := request.Cookie("sessiondata")
|
||||
cookie.MaxAge = 0
|
||||
|
@ -323,7 +336,7 @@ var manageFunctions = map[string]ManageFunction{
|
|||
}},
|
||||
"announcements": {
|
||||
Title: "Announcements",
|
||||
Permissions: 1,
|
||||
Permissions: JanitorPerms,
|
||||
Callback: func(writer http.ResponseWriter, request *http.Request) (htmlOut string, err error) {
|
||||
htmlOut = `<h1 class="manage-header">Announcements</h1><br />`
|
||||
|
||||
|
@ -346,7 +359,7 @@ var manageFunctions = map[string]ManageFunction{
|
|||
}},
|
||||
"bans": {
|
||||
Title: "Bans",
|
||||
Permissions: 1,
|
||||
Permissions: ModPerms,
|
||||
Callback: func(writer http.ResponseWriter, request *http.Request) (htmlOut string, err error) { //TODO whatever this does idk man
|
||||
var post gcsql.Post
|
||||
if request.FormValue("do") == "add" {
|
||||
|
@ -427,8 +440,9 @@ var manageFunctions = map[string]ManageFunction{
|
|||
htmlOut += manageBansBuffer.String()
|
||||
return
|
||||
}},
|
||||
"getstaffjquery": {
|
||||
Permissions: 0,
|
||||
"staffinfo": {
|
||||
Permissions: NoPerms,
|
||||
isJSON: true,
|
||||
Callback: func(writer http.ResponseWriter, request *http.Request) (htmlOut string, err error) {
|
||||
staff, err := getCurrentFullStaff(request)
|
||||
if err != nil {
|
||||
|
@ -439,7 +453,7 @@ var manageFunctions = map[string]ManageFunction{
|
|||
}},
|
||||
"boards": {
|
||||
Title: "Boards",
|
||||
Permissions: 3,
|
||||
Permissions: AdminPerms,
|
||||
Callback: func(writer http.ResponseWriter, request *http.Request) (htmlOut string, err error) {
|
||||
do := request.FormValue("do")
|
||||
var done bool
|
||||
|
@ -615,38 +629,11 @@ var manageFunctions = map[string]ManageFunction{
|
|||
}},
|
||||
"staffmenu": {
|
||||
Title: "Staff menu",
|
||||
Permissions: 1,
|
||||
Callback: func(writer http.ResponseWriter, request *http.Request) (htmlOut string, err error) {
|
||||
rank := GetStaffRank(request)
|
||||
|
||||
htmlOut = `<a href="javascript:void(0)" id="logout" class="staffmenu-item">Log out</a><br />` +
|
||||
`<a href="javascript:void(0)" id="announcements" class="staffmenu-item">Announcements</a><br />`
|
||||
if rank == 3 {
|
||||
htmlOut += `<b>Admin stuff</b><br /><a href="javascript:void(0)" id="staff" class="staffmenu-item">Manage staff</a><br />` +
|
||||
//`<a href="javascript:void(0)" id="purgeeverything" class="staffmenu-item">Purge everything!</a><br />` +
|
||||
`<a href="javascript:void(0)" id="executesql" class="staffmenu-item">Execute SQL statement(s)</a><br />` +
|
||||
`<a href="javascript:void(0)" id="cleanup" class="staffmenu-item">Run cleanup</a><br />` +
|
||||
`<a href="javascript:void(0)" id="rebuildall" class="staffmenu-item">Rebuild all</a><br />` +
|
||||
`<a href="javascript:void(0)" id="rebuildfront" class="staffmenu-item">Rebuild front page</a><br />` +
|
||||
`<a href="javascript:void(0)" id="rebuildboards" class="staffmenu-item">Rebuild board pages</a><br />` +
|
||||
`<a href="javascript:void(0)" id="reparsehtml" class="staffmenu-item">Reparse all posts</a><br />` +
|
||||
`<a href="javascript:void(0)" id="boards" class="staffmenu-item">Add/edit/delete boards</a><br />`
|
||||
}
|
||||
if rank >= 2 {
|
||||
htmlOut += `<b>Mod stuff</b><br />` +
|
||||
`<a href="javascript:void(0)" id="bans" class="staffmenu-item">Ban User(s)</a><br />`
|
||||
}
|
||||
|
||||
if rank >= 1 {
|
||||
htmlOut += `<a href="javascript:void(0)" id="recentimages" class="staffmenu-item">Recently uploaded images</a><br />` +
|
||||
`<a href="javascript:void(0)" id="recentposts" class="staffmenu-item">Recent posts</a><br />` +
|
||||
`<a href="javascript:void(0)" id="searchip" class="staffmenu-item">Search posts by IP</a><br />`
|
||||
}
|
||||
return
|
||||
}},
|
||||
Permissions: JanitorPerms,
|
||||
},
|
||||
"rebuildfront": {
|
||||
Title: "Rebuild front page",
|
||||
Permissions: 3,
|
||||
Permissions: AdminPerms,
|
||||
Callback: func(writer http.ResponseWriter, request *http.Request) (htmlOut string, err error) {
|
||||
if err = gctemplates.InitTemplates(); err != nil {
|
||||
return "", err
|
||||
|
@ -655,7 +642,7 @@ var manageFunctions = map[string]ManageFunction{
|
|||
}},
|
||||
"rebuildall": {
|
||||
Title: "Rebuild everything",
|
||||
Permissions: 3,
|
||||
Permissions: AdminPerms,
|
||||
Callback: func(writer http.ResponseWriter, request *http.Request) (htmlOut string, err error) {
|
||||
gctemplates.InitTemplates()
|
||||
gcsql.ResetBoardSectionArrays()
|
||||
|
@ -679,7 +666,7 @@ var manageFunctions = map[string]ManageFunction{
|
|||
}},
|
||||
"rebuildboards": {
|
||||
Title: "Rebuild boards",
|
||||
Permissions: 3,
|
||||
Permissions: AdminPerms,
|
||||
Callback: func(writer http.ResponseWriter, request *http.Request) (htmlOut string, err error) {
|
||||
if err = gctemplates.InitTemplates(); err != nil {
|
||||
return "", err
|
||||
|
@ -688,7 +675,7 @@ var manageFunctions = map[string]ManageFunction{
|
|||
}},
|
||||
"reparsehtml": {
|
||||
Title: "Reparse HTML",
|
||||
Permissions: 3,
|
||||
Permissions: AdminPerms,
|
||||
Callback: func(writer http.ResponseWriter, request *http.Request) (htmlOut string, err error) {
|
||||
messages, err := gcsql.GetAllNondeletedMessageRaw()
|
||||
if err != nil {
|
||||
|
@ -721,7 +708,7 @@ var manageFunctions = map[string]ManageFunction{
|
|||
}},
|
||||
"recentposts": {
|
||||
Title: "Recent posts",
|
||||
Permissions: 1,
|
||||
Permissions: JanitorPerms,
|
||||
Callback: func(writer http.ResponseWriter, request *http.Request) (htmlOut string, err error) {
|
||||
limit := request.FormValue("limit")
|
||||
if limit == "" {
|
||||
|
@ -753,7 +740,8 @@ var manageFunctions = map[string]ManageFunction{
|
|||
}},
|
||||
"postinfo": {
|
||||
Title: "Post info",
|
||||
Permissions: 2,
|
||||
Permissions: ModPerms,
|
||||
isJSON: true,
|
||||
Callback: func(writer http.ResponseWriter, request *http.Request) (htmlOut string, err error) {
|
||||
var post gcsql.Post
|
||||
post, err = gcsql.GetSpecificPost(gcutil.HackyStringToInt(request.FormValue("postid")), false)
|
||||
|
@ -766,7 +754,7 @@ var manageFunctions = map[string]ManageFunction{
|
|||
}},
|
||||
"staff": {
|
||||
Title: "Staff",
|
||||
Permissions: 3,
|
||||
Permissions: AdminPerms,
|
||||
Callback: func(writer http.ResponseWriter, request *http.Request) (htmlOut string, err error) {
|
||||
var allStaff []gcsql.Staff
|
||||
do := request.FormValue("do")
|
||||
|
@ -828,7 +816,7 @@ var manageFunctions = map[string]ManageFunction{
|
|||
}},
|
||||
"tempposts": {
|
||||
Title: "Temporary posts lists",
|
||||
Permissions: 3,
|
||||
Permissions: AdminPerms,
|
||||
Callback: func(writer http.ResponseWriter, request *http.Request) (htmlOut string, err error) {
|
||||
htmlOut += `<h1 class="manage-header">Temporary posts</h1>`
|
||||
if len(gcsql.TempPosts) == 0 {
|
|
@ -17,35 +17,33 @@ func CallManageFunction(writer http.ResponseWriter, request *http.Request) {
|
|||
if err = request.ParseForm(); err != nil {
|
||||
serverutil.ServeErrorPage(writer, gclog.Print(gclog.LErrorLog,
|
||||
"Error parsing form data: ", err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
action := request.FormValue("action")
|
||||
staffRank := GetStaffRank(request)
|
||||
var managePageBuffer bytes.Buffer
|
||||
if action == "postinfo" || action == "getstaffjquery" {
|
||||
writer.Header().Add("Content-Type", "application/json")
|
||||
writer.Header().Add("Cache-Control", "max-age=5, must-revalidate")
|
||||
|
||||
if action == "" {
|
||||
if staffRank == NoPerms {
|
||||
action = "login"
|
||||
} else {
|
||||
managePageBuffer.WriteString("<!DOCTYPE html><html><head>")
|
||||
if err = gctemplates.ManageHeader.Execute(&managePageBuffer, config.Config); err != nil {
|
||||
serverutil.ServeErrorPage(writer, gclog.Print(gclog.LErrorLog|gclog.LStaffLog,
|
||||
"Error executing manage page header template: ", err.Error()))
|
||||
return
|
||||
action = "staffmenu"
|
||||
}
|
||||
}
|
||||
|
||||
if action == "" {
|
||||
managePageBuffer.WriteString(actionHTMLLinker(manageFunctions))
|
||||
} else {
|
||||
handler, ok := manageFunctions[action]
|
||||
handler, ok := actions[action]
|
||||
var htmlOut string
|
||||
|
||||
if !ok {
|
||||
serverutil.ServeNotFound(writer, request)
|
||||
return
|
||||
}
|
||||
if staffRank == 0 && handler.Permissions > 0 {
|
||||
handler = manageFunctions["login"]
|
||||
if action == "staffmenu" {
|
||||
handler.Callback = getStaffMenu
|
||||
}
|
||||
if staffRank == NoPerms && handler.Permissions > NoPerms {
|
||||
handler = actions["login"]
|
||||
} else if staffRank < handler.Permissions {
|
||||
writer.WriteHeader(403)
|
||||
serverutil.ServeErrorPage(writer, "You don't have permission to access this page.")
|
||||
|
@ -63,11 +61,20 @@ func CallManageFunction(writer http.ResponseWriter, request *http.Request) {
|
|||
"Error accessing manage page %s by %s: %s", action, staffName, err.Error())
|
||||
return
|
||||
}
|
||||
managePageBuffer.WriteString(htmlOut)
|
||||
}
|
||||
if action != "getstaffjquery" && action != "postinfo" {
|
||||
managePageBuffer.WriteString("</body></html>")
|
||||
}
|
||||
var footer string
|
||||
|
||||
if !handler.isJSON {
|
||||
managePageBuffer.WriteString("<!DOCTYPE html><html><head>")
|
||||
if err = gctemplates.ManageHeader.Execute(&managePageBuffer, config.Config); err != nil {
|
||||
serverutil.ServeErrorPage(writer, gclog.Print(gclog.LErrorLog|gclog.LStaffLog,
|
||||
"Error executing manage page header template: ", err.Error()))
|
||||
return
|
||||
}
|
||||
footer = "</body></html>"
|
||||
} else {
|
||||
writer.Header().Add("Content-Type", "application/json")
|
||||
writer.Header().Add("Cache-Control", "max-age=5, must-revalidate")
|
||||
}
|
||||
managePageBuffer.WriteString(htmlOut + footer)
|
||||
writer.Write(managePageBuffer.Bytes())
|
||||
}
|
||||
|
|
|
@ -2,7 +2,6 @@ package manage
|
|||
|
||||
import (
|
||||
"net/http"
|
||||
"sort"
|
||||
"time"
|
||||
|
||||
"github.com/gochan-org/gochan/pkg/gclog"
|
||||
|
@ -81,22 +80,19 @@ func getCurrentFullStaff(request *http.Request) (*gcsql.Staff, error) {
|
|||
func GetStaffRank(request *http.Request) int {
|
||||
staff, err := getCurrentFullStaff(request)
|
||||
if err != nil {
|
||||
return 0
|
||||
return NoPerms
|
||||
}
|
||||
return staff.Rank
|
||||
}
|
||||
|
||||
func actionHTMLLinker(funcMap map[string]ManageFunction) string {
|
||||
var links = ""
|
||||
var keys []string
|
||||
for key := range funcMap {
|
||||
if funcMap[key].Title != "" {
|
||||
keys = append(keys, key)
|
||||
func getStaffMenu(writer http.ResponseWriter, request *http.Request) (string, error) {
|
||||
var links string
|
||||
rank := GetStaffRank(request)
|
||||
for f, mf := range actions {
|
||||
if rank < mf.Permissions || mf.Permissions == NoPerms {
|
||||
continue
|
||||
}
|
||||
links += `<a href="manage?action=` + f + `" id="` + f + `">` + mf.Title + `</a></br />`
|
||||
}
|
||||
sort.Strings(keys)
|
||||
for _, key := range keys {
|
||||
links += `<a href="manage?action=` + key + `">` + funcMap[key].Title + "</a></br>"
|
||||
}
|
||||
return links
|
||||
return links, nil
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue