a66bab7c51
Wildcards should work properly in robots.txt now Fixed the padding on the registration and login pages for Cosora. Moved the Websockets route into the new router. We now log more suspicious requests. Started moving routes into /routes/ Added the topicchunks table.
124 lines
2.9 KiB
Go
124 lines
2.9 KiB
Go
package main
|
|
|
|
type RouteImpl struct {
|
|
Name string
|
|
Path string
|
|
Vars []string
|
|
RunBefore []Runnable
|
|
|
|
Parent *RouteGroup
|
|
}
|
|
|
|
type Runnable struct {
|
|
Contents string
|
|
Literal bool
|
|
}
|
|
|
|
func addRoute(route *RouteImpl) {
|
|
routeList = append(routeList, route)
|
|
}
|
|
|
|
func (route *RouteImpl) Before(items ...string) *RouteImpl {
|
|
for _, item := range items {
|
|
route.RunBefore = append(route.RunBefore, Runnable{item, false})
|
|
}
|
|
return route
|
|
}
|
|
|
|
func (route *RouteImpl) LitBefore(items ...string) *RouteImpl {
|
|
for _, item := range items {
|
|
route.RunBefore = append(route.RunBefore, Runnable{item, true})
|
|
}
|
|
return route
|
|
}
|
|
|
|
func (route *RouteImpl) hasBefore(items ...string) bool {
|
|
for _, item := range items {
|
|
if route.hasBeforeItem(item) {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
func (route *RouteImpl) hasBeforeItem(item string) bool {
|
|
for _, before := range route.RunBefore {
|
|
if before.Contents == item {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
func addRouteGroup(routeGroup *RouteGroup) {
|
|
routeGroups = append(routeGroups, routeGroup)
|
|
}
|
|
|
|
func blankRoute() *RouteImpl {
|
|
return &RouteImpl{"", "", []string{}, []Runnable{}, nil}
|
|
}
|
|
|
|
func route(fname string, path string, args ...string) *RouteImpl {
|
|
return &RouteImpl{fname, path, args, []Runnable{}, nil}
|
|
}
|
|
|
|
func View(fname string, path string, args ...string) *RouteImpl {
|
|
return route(fname, path, args...)
|
|
}
|
|
|
|
func MemberView(fname string, path string, args ...string) *RouteImpl {
|
|
route := route(fname, path, args...)
|
|
if !route.hasBefore("SuperModOnly", "AdminOnly") {
|
|
route.Before("MemberOnly")
|
|
}
|
|
return route
|
|
}
|
|
|
|
func ModView(fname string, path string, args ...string) *RouteImpl {
|
|
route := route(fname, path, args...)
|
|
if !route.hasBefore("AdminOnly") {
|
|
route.Before("SuperModOnly")
|
|
}
|
|
return route
|
|
}
|
|
|
|
func Action(fname string, path string, args ...string) *RouteImpl {
|
|
route := route(fname, path, args...)
|
|
route.Before("NoSessionMismatch")
|
|
if !route.hasBefore("SuperModOnly", "AdminOnly") {
|
|
route.Before("MemberOnly")
|
|
}
|
|
return route
|
|
}
|
|
|
|
func AnonAction(fname string, path string, args ...string) *RouteImpl {
|
|
return route(fname, path, args...).Before("ParseForm")
|
|
}
|
|
|
|
func Special(fname string, path string, args ...string) *RouteImpl {
|
|
return route(fname, path, args...).LitBefore("req.URL.Path += extraData")
|
|
}
|
|
|
|
// Make this it's own type to force the user to manipulate methods on it to set parameters
|
|
type uploadAction struct {
|
|
Route *RouteImpl
|
|
}
|
|
|
|
func UploadAction(fname string, path string, args ...string) *uploadAction {
|
|
route := route(fname, path, args...)
|
|
if !route.hasBefore("SuperModOnly", "AdminOnly") {
|
|
route.Before("MemberOnly")
|
|
}
|
|
return &uploadAction{route}
|
|
}
|
|
|
|
func (action *uploadAction) MaxSizeVar(varName string) *RouteImpl {
|
|
action.Route.LitBefore(`err = common.HandleUploadRoute(w,req,user,` + varName + `)
|
|
if err != nil {
|
|
router.handleError(err,w,req,user)
|
|
return
|
|
}`)
|
|
action.Route.Before("NoUploadSessionMismatch")
|
|
return action.Route
|
|
}
|