8ec0534299
Refactored more prebuilder queries to use the OO methods. Refactored the router generator. Added more query generator OO methods. More work on Cosora.
105 lines
2.3 KiB
Go
105 lines
2.3 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 UploadAction(fname string, path string, args ...string) *RouteImpl {
|
|
route := route(fname, path, args...)
|
|
if !route.hasBefore("SuperModOnly", "AdminOnly") {
|
|
route.Before("MemberOnly")
|
|
}
|
|
return route
|
|
}
|