Shorten common. to c. in the router.

This commit is contained in:
Azareal 2019-04-19 17:16:09 +10:00
parent 20a6a22e78
commit 51e88ad1ee
4 changed files with 274 additions and 268 deletions

File diff suppressed because it is too large Load Diff

View File

@ -6,13 +6,14 @@ import (
"log" "log"
"os" "os"
"strconv" "strconv"
"strings"
"text/template" "text/template"
) )
type TmplVars struct { type TmplVars struct {
RouteList []*RouteImpl RouteList []*RouteImpl
RouteGroups []*RouteGroup RouteGroups []*RouteGroup
AllRouteNames []string AllRouteNames []RouteName
AllRouteMap map[string]int AllRouteMap map[string]int
AllAgentNames []string AllAgentNames []string
AllAgentMap map[string]int AllAgentMap map[string]int
@ -22,6 +23,11 @@ type TmplVars struct {
AllOSMap map[string]int AllOSMap map[string]int
} }
type RouteName struct {
Plain string
Short string
}
func main() { func main() {
log.Println("Generating the router...") log.Println("Generating the router...")
@ -33,12 +39,12 @@ func main() {
RouteList: r.routeList, RouteList: r.routeList,
RouteGroups: r.routeGroups, RouteGroups: r.routeGroups,
} }
var allRouteNames []string var allRouteNames []RouteName
var allRouteMap = make(map[string]int) var allRouteMap = make(map[string]int)
var out string var out string
var mapIt = func(name string) { var mapIt = func(name string) {
allRouteNames = append(allRouteNames, name) allRouteNames = append(allRouteNames, RouteName{name, strings.Replace(name, "common.", "c.", -1)})
allRouteMap[name] = len(allRouteNames) - 1 allRouteMap[name] = len(allRouteNames) - 1
} }
var countToIndents = func(indent int) (indentor string) { var countToIndents = func(indent int) (indentor string) {
@ -54,7 +60,7 @@ func main() {
if runnable.Literal { if runnable.Literal {
out += "\n\t" + indentor + runnable.Contents out += "\n\t" + indentor + runnable.Contents
} else { } else {
out += "\n" + indentor + "err = common." + runnable.Contents + "(w,req,user)\n" + out += "\n" + indentor + "err = c." + runnable.Contents + "(w,req,user)\n" +
indentor + "if err != nil {\n" + indentor + "if err != nil {\n" +
indentor + "\treturn err\n" + indentor + "\treturn err\n" +
indentor + "}\n" + indentor indentor + "}\n" + indentor
@ -71,7 +77,7 @@ func main() {
out += runBefore(route.RunBefore, 4) out += runBefore(route.RunBefore, 4)
out += "\n\t\t\tcounters.RouteViewCounter.Bump(" + strconv.Itoa(allRouteMap[route.Name]) + ")" out += "\n\t\t\tcounters.RouteViewCounter.Bump(" + strconv.Itoa(allRouteMap[route.Name]) + ")"
if !route.Action && !route.NoHead { if !route.Action && !route.NoHead {
out += "\n\t\t\thead, err := common.UserCheck(w,req,&user)" out += "\n\t\t\thead, err := c.UserCheck(w,req,&user)"
out += "\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}" out += "\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}"
vcpy := route.Vars vcpy := route.Vars
route.Vars = []string{"head"} route.Vars = []string{"head"}
@ -122,7 +128,7 @@ func main() {
out += "\n\t\t\t\t\t" + runnable.Contents out += "\n\t\t\t\t\t" + runnable.Contents
} else { } else {
out += ` out += `
err = common.` + runnable.Contents + `(w,req,user) err = c.` + runnable.Contents + `(w,req,user)
if err != nil { if err != nil {
return err return err
} }
@ -132,7 +138,7 @@ func main() {
} }
out += "\n\t\t\t\t\tcounters.RouteViewCounter.Bump(" + strconv.Itoa(allRouteMap[route.Name]) + ")" out += "\n\t\t\t\t\tcounters.RouteViewCounter.Bump(" + strconv.Itoa(allRouteMap[route.Name]) + ")"
if !route.Action && !route.NoHead && !group.NoHead { if !route.Action && !route.NoHead && !group.NoHead {
out += "\n\t\t\t\thead, err := common.UserCheck(w,req,&user)" out += "\n\t\t\t\thead, err := c.UserCheck(w,req,&user)"
out += "\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}" out += "\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}"
vcpy := route.Vars vcpy := route.Vars
route.Vars = []string{"head"} route.Vars = []string{"head"}
@ -151,7 +157,7 @@ func main() {
out += runBefore(defaultRoute.RunBefore, 4) out += runBefore(defaultRoute.RunBefore, 4)
out += "\n\t\t\t\t\tcounters.RouteViewCounter.Bump(" + strconv.Itoa(allRouteMap[defaultRoute.Name]) + ")" out += "\n\t\t\t\t\tcounters.RouteViewCounter.Bump(" + strconv.Itoa(allRouteMap[defaultRoute.Name]) + ")"
if !defaultRoute.Action && !defaultRoute.NoHead && !group.NoHead { if !defaultRoute.Action && !defaultRoute.NoHead && !group.NoHead {
out += "\n\t\t\t\t\thead, err := common.UserCheck(w,req,&user)" out += "\n\t\t\t\t\thead, err := c.UserCheck(w,req,&user)"
out += "\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}" out += "\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}"
vcpy := defaultRoute.Vars vcpy := defaultRoute.Vars
defaultRoute.Vars = []string{"head"} defaultRoute.Vars = []string{"head"}
@ -315,7 +321,7 @@ import (
"os" "os"
"net/http" "net/http"
"github.com/Azareal/Gosora/common" c "github.com/Azareal/Gosora/common"
"github.com/Azareal/Gosora/common/counters" "github.com/Azareal/Gosora/common/counters"
"github.com/Azareal/Gosora/routes" "github.com/Azareal/Gosora/routes"
"github.com/Azareal/Gosora/routes/panel" "github.com/Azareal/Gosora/routes/panel"
@ -324,15 +330,15 @@ import (
var ErrNoRoute = errors.New("That route doesn't exist.") var ErrNoRoute = errors.New("That route doesn't exist.")
// TODO: What about the /uploads/ route? x.x // TODO: What about the /uploads/ route? x.x
var RouteMap = map[string]interface{}{ {{range .AllRouteNames}} var RouteMap = map[string]interface{}{ {{range .AllRouteNames}}
"{{.}}": {{.}},{{end}} "{{.Plain}}": {{.Short}},{{end}}
} }
// ! NEVER RELY ON THESE REMAINING THE SAME BETWEEN COMMITS // ! NEVER RELY ON THESE REMAINING THE SAME BETWEEN COMMITS
var routeMapEnum = map[string]int{ {{range $index, $element := .AllRouteNames}} var routeMapEnum = map[string]int{ {{range $index, $element := .AllRouteNames}}
"{{$element}}": {{$index}},{{end}} "{{$element.Plain}}": {{$index}},{{end}}
} }
var reverseRouteMapEnum = map[int]string{ {{range $index, $element := .AllRouteNames}} var reverseRouteMapEnum = map[int]string{ {{range $index, $element := .AllRouteNames}}
{{$index}}: "{{$element}}",{{end}} {{$index}}: "{{$element.Plain}}",{{end}}
} }
var osMapEnum = map[string]int{ {{range $index, $element := .AllOSNames}} var osMapEnum = map[string]int{ {{range $index, $element := .AllOSNames}}
"{{$element}}": {{$index}},{{end}} "{{$element}}": {{$index}},{{end}}
@ -373,7 +379,7 @@ func NewWriterIntercept(w http.ResponseWriter) *WriterIntercept {
return &WriterIntercept{w} return &WriterIntercept{w}
} }
var wiMaxAge = "max-age=" + strconv.Itoa(int(common.Day)) var wiMaxAge = "max-age=" + strconv.Itoa(int(c.Day))
func (writ *WriterIntercept) WriteHeader(code int) { func (writ *WriterIntercept) WriteHeader(code int) {
if code == 200 { if code == 200 {
writ.ResponseWriter.Header().Set("Cache-Control", wiMaxAge) writ.ResponseWriter.Header().Set("Cache-Control", wiMaxAge)
@ -395,14 +401,14 @@ func (red *HTTPSRedirect) ServeHTTP(w http.ResponseWriter, req *http.Request) {
type GenRouter struct { type GenRouter struct {
UploadHandler func(http.ResponseWriter, *http.Request) UploadHandler func(http.ResponseWriter, *http.Request)
extraRoutes map[string]func(http.ResponseWriter, *http.Request, common.User) common.RouteError extraRoutes map[string]func(http.ResponseWriter, *http.Request, c.User) c.RouteError
requestLogger *log.Logger requestLogger *log.Logger
sync.RWMutex sync.RWMutex
} }
func NewGenRouter(uploads http.Handler) (*GenRouter, error) { func NewGenRouter(uploads http.Handler) (*GenRouter, error) {
f, err := os.OpenFile("./logs/reqs-"+strconv.FormatInt(common.StartTime.Unix(),10)+".log", os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0755) f, err := os.OpenFile("./logs/reqs-"+strconv.FormatInt(c.StartTime.Unix(),10)+".log", os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0755)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -412,27 +418,27 @@ func NewGenRouter(uploads http.Handler) (*GenRouter, error) {
writ := NewWriterIntercept(w) writ := NewWriterIntercept(w)
http.StripPrefix("/uploads/",uploads).ServeHTTP(writ,req) http.StripPrefix("/uploads/",uploads).ServeHTTP(writ,req)
}, },
extraRoutes: make(map[string]func(http.ResponseWriter, *http.Request, common.User) common.RouteError), extraRoutes: make(map[string]func(http.ResponseWriter, *http.Request, c.User) c.RouteError),
requestLogger: log.New(f, "", log.LstdFlags), requestLogger: log.New(f, "", log.LstdFlags),
}, nil }, nil
} }
func (r *GenRouter) handleError(err common.RouteError, w http.ResponseWriter, req *http.Request, user common.User) { func (r *GenRouter) handleError(err c.RouteError, w http.ResponseWriter, req *http.Request, user c.User) {
if err.Handled() { if err.Handled() {
return return
} }
if err.Type() == "system" { if err.Type() == "system" {
common.InternalErrorJSQ(err, w, req, err.JSON()) c.InternalErrorJSQ(err, w, req, err.JSON())
return return
} }
common.LocalErrorJSQ(err.Error(), w, req, user, err.JSON()) c.LocalErrorJSQ(err.Error(), w, req, user, err.JSON())
} }
func (r *GenRouter) Handle(_ string, _ http.Handler) { func (r *GenRouter) Handle(_ string, _ http.Handler) {
} }
func (r *GenRouter) HandleFunc(pattern string, handle func(http.ResponseWriter, *http.Request, common.User) common.RouteError) { func (r *GenRouter) HandleFunc(pattern string, handle func(http.ResponseWriter, *http.Request, c.User) c.RouteError) {
r.Lock() r.Lock()
defer r.Unlock() defer r.Unlock()
r.extraRoutes[pattern] = handle r.extraRoutes[pattern] = handle
@ -453,17 +459,17 @@ func (r *GenRouter) DumpRequest(req *http.Request, prepend string) {
var heads string var heads string
for key, value := range req.Header { for key, value := range req.Header {
for _, vvalue := range value { for _, vvalue := range value {
heads += "Header '" + common.SanitiseSingleLine(key) + "': " + common.SanitiseSingleLine(vvalue) + "!\n" heads += "Header '" + c.SanitiseSingleLine(key) + "': " + c.SanitiseSingleLine(vvalue) + "!\n"
} }
} }
r.requestLogger.Print(prepend + r.requestLogger.Print(prepend +
"\nUA: " + common.SanitiseSingleLine(req.UserAgent()) + "\n" + "\nUA: " + c.SanitiseSingleLine(req.UserAgent()) + "\n" +
"Method: " + common.SanitiseSingleLine(req.Method) + "\n" + heads + "Method: " + c.SanitiseSingleLine(req.Method) + "\n" + heads +
"req.Host: " + common.SanitiseSingleLine(req.Host) + "\n" + "req.Host: " + c.SanitiseSingleLine(req.Host) + "\n" +
"req.URL.Path: " + common.SanitiseSingleLine(req.URL.Path) + "\n" + "req.URL.Path: " + c.SanitiseSingleLine(req.URL.Path) + "\n" +
"req.URL.RawQuery: " + common.SanitiseSingleLine(req.URL.RawQuery) + "\n" + "req.URL.RawQuery: " + c.SanitiseSingleLine(req.URL.RawQuery) + "\n" +
"req.Referer(): " + common.SanitiseSingleLine(req.Referer()) + "\n" + "req.Referer(): " + c.SanitiseSingleLine(req.Referer()) + "\n" +
"req.RemoteAddr: " + req.RemoteAddr + "\n") "req.RemoteAddr: " + req.RemoteAddr + "\n")
} }
@ -512,24 +518,24 @@ func (r *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
} }
} }
// TODO: Reject requests from non-local IPs, if the site host is set to localhost or a localhost IP // TODO: Reject requests from non-local IPs, if the site host is set to localhost or a localhost IP
if !common.Config.LoosePort && common.Site.PortInt != 80 && common.Site.PortInt != 443 && sport != common.Site.Port { if !c.Config.LoosePort && c.Site.PortInt != 80 && c.Site.PortInt != 443 && sport != c.Site.Port {
malformedRequest(2) malformedRequest(2)
return return
} }
// Redirect www. and local IP requests to the right place // Redirect www. and local IP requests to the right place
if shost == "www." + common.Site.Host || (common.Site.LocalHost && shost != common.Site.Host && isLocalHost(shost)) { if shost == "www." + c.Site.Host || (c.Site.LocalHost && shost != c.Site.Host && isLocalHost(shost)) {
// TODO: Abstract the redirect logic? // TODO: Abstract the redirect logic?
w.Header().Set("Connection", "close") w.Header().Set("Connection", "close")
var s string var s string
if common.Site.EnableSsl { if c.Site.EnableSsl {
s = "s" s = "s"
} }
var p string var p string
if common.Site.PortInt != 80 && common.Site.PortInt != 443 { if c.Site.PortInt != 80 && c.Site.PortInt != 443 {
p = ":"+common.Site.Port p = ":"+c.Site.Port
} }
dest := "http"+s+"://" + common.Site.Host+p + req.URL.Path dest := "http"+s+"://" + c.Site.Host+p + req.URL.Path
if len(req.URL.RawQuery) > 0 { if len(req.URL.RawQuery) > 0 {
dest += "?" + req.URL.RawQuery dest += "?" + req.URL.RawQuery
} }
@ -538,11 +544,11 @@ func (r *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
} }
// Deflect malformed requests // Deflect malformed requests
if len(req.URL.Path) == 0 || req.URL.Path[0] != '/' || (!common.Config.LooseHost && shost != common.Site.Host) { if len(req.URL.Path) == 0 || req.URL.Path[0] != '/' || (!c.Config.LooseHost && shost != c.Site.Host) {
malformedRequest(3) malformedRequest(3)
return return
} }
if common.Dev.FullReqLog { if c.Dev.FullReqLog {
r.DumpRequest(req,"") r.DumpRequest(req,"")
} }
@ -561,7 +567,7 @@ func (r *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
// Indirect the default route onto a different one // Indirect the default route onto a different one
if req.URL.Path == "/" { if req.URL.Path == "/" {
req.URL.Path = common.Config.DefaultPath req.URL.Path = c.Config.DefaultPath
} }
var prefix, extraData string var prefix, extraData string
@ -572,7 +578,7 @@ func (r *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
} }
// TODO: Use the same hook table as downstream // TODO: Use the same hook table as downstream
hTbl := common.GetHookTable() hTbl := c.GetHookTable()
skip, ferr := hTbl.VhookSkippable("router_after_filters", w, req, prefix, extraData) skip, ferr := hTbl.VhookSkippable("router_after_filters", w, req, prefix, extraData)
if skip || ferr != nil { if skip || ferr != nil {
return return
@ -585,7 +591,7 @@ func (r *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
h.Set("X-Content-Type-Options", "nosniff") h.Set("X-Content-Type-Options", "nosniff")
} }
if common.Dev.SuperDebug { if c.Dev.SuperDebug {
r.DumpRequest(req,"before routes.StaticFile") r.DumpRequest(req,"before routes.StaticFile")
} }
// Increment the request counter // Increment the request counter
@ -597,11 +603,11 @@ func (r *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
routes.StaticFile(w, req) routes.StaticFile(w, req)
return return
} }
if atomic.LoadInt32(&common.IsDBDown) == 1 { if atomic.LoadInt32(&c.IsDBDown) == 1 {
common.DatabaseError(w, req) c.DatabaseError(w, req)
return return
} }
if common.Dev.SuperDebug { if c.Dev.SuperDebug {
r.requestLogger.Print("before PreRoute") r.requestLogger.Print("before PreRoute")
} }
@ -612,7 +618,7 @@ func (r *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
var agent string var agent string
if ua == "" { if ua == "" {
counters.AgentViewCounter.Bump({{.AllAgentMap.blank}}) counters.AgentViewCounter.Bump({{.AllAgentMap.blank}})
if common.Dev.DebugMode { if c.Dev.DebugMode {
var prepend string var prepend string
for _, char := range req.UserAgent() { for _, char := range req.UserAgent() {
prepend += strconv.Itoa(int(char)) + " " prepend += strconv.Itoa(int(char)) + " "
@ -673,10 +679,10 @@ func (r *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
} }
} }
} }
if common.Dev.SuperDebug { if c.Dev.SuperDebug {
r.requestLogger.Print("parsed agent: ", agent) r.requestLogger.Print("parsed agent: ", agent)
} }
if common.Dev.SuperDebug { if c.Dev.SuperDebug {
r.requestLogger.Print("os: ", os) r.requestLogger.Print("os: ", os)
r.requestLogger.Printf("items: %+v\n",items) r.requestLogger.Printf("items: %+v\n",items)
} }
@ -702,7 +708,7 @@ func (r *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
if agent == "" { if agent == "" {
counters.AgentViewCounter.Bump({{.AllAgentMap.unknown}}) counters.AgentViewCounter.Bump({{.AllAgentMap.unknown}})
if common.Dev.DebugMode { if c.Dev.DebugMode {
var prepend string var prepend string
for _, char := range req.UserAgent() { for _, char := range req.UserAgent() {
prepend += strconv.Itoa(int(char)) + " " prepend += strconv.Itoa(int(char)) + " "
@ -721,7 +727,7 @@ func (r *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
lang = strings.TrimSpace(lang) lang = strings.TrimSpace(lang)
lLang := strings.Split(lang,"-") lLang := strings.Split(lang,"-")
tLang := strings.Split(strings.Split(lLang[0],";")[0],",") tLang := strings.Split(strings.Split(lLang[0],";")[0],",")
common.DebugDetail("tLang:", tLang) c.DebugDetail("tLang:", tLang)
var llLang string var llLang string
for _, seg := range tLang { for _, seg := range tLang {
if seg == "*" { if seg == "*" {
@ -730,7 +736,7 @@ func (r *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
llLang = seg llLang = seg
break break
} }
common.DebugDetail("llLang:", llLang) c.DebugDetail("llLang:", llLang)
if llLang == "" { if llLang == "" {
counters.LangViewCounter.Bump("none") counters.LangViewCounter.Bump("none")
} else { } else {
@ -749,18 +755,18 @@ func (r *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
referrer = strings.TrimPrefix(strings.TrimPrefix(referrer,"http://"),"https://") referrer = strings.TrimPrefix(strings.TrimPrefix(referrer,"http://"),"https://")
referrer = strings.Split(referrer,"/")[0] referrer = strings.Split(referrer,"/")[0]
portless := strings.Split(referrer,":")[0] portless := strings.Split(referrer,":")[0]
if portless != "localhost" && portless != "127.0.0.1" && portless != common.Site.Host { if portless != "localhost" && portless != "127.0.0.1" && portless != c.Site.Host {
counters.ReferrerTracker.Bump(referrer) counters.ReferrerTracker.Bump(referrer)
} }
} }
// Deal with the session stuff, etc. // Deal with the session stuff, etc.
user, ok := common.PreRoute(w, req) user, ok := c.PreRoute(w, req)
if !ok { if !ok {
return return
} }
user.LastAgent = agent user.LastAgent = agent
if common.Dev.SuperDebug { if c.Dev.SuperDebug {
r.requestLogger.Print( r.requestLogger.Print(
"after PreRoute\n" + "after PreRoute\n" +
"routeMapEnum: ", routeMapEnum) "routeMapEnum: ", routeMapEnum)
@ -776,7 +782,7 @@ func (r *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
gz.Close() gz.Close()
} }
}() }()
w = common.GzipResponseWriter{Writer: gz, ResponseWriter: w} w = c.GzipResponseWriter{Writer: gz, ResponseWriter: w}
} }
skip, ferr = hTbl.VhookSkippable("router_pre_route", w, req, user, prefix, extraData) skip, ferr = hTbl.VhookSkippable("router_pre_route", w, req, user, prefix, extraData)
@ -789,20 +795,20 @@ func (r *GenRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
} }
hTbl.VhookNoRet("router_end", w, req, user, prefix, extraData) hTbl.VhookNoRet("router_end", w, req, user, prefix, extraData)
//common.StoppedServer("Profile end") //c.StoppedServer("Profile end")
} }
func (r *GenRouter) routeSwitch(w http.ResponseWriter, req *http.Request, user common.User, prefix string, extraData string) common.RouteError { func (r *GenRouter) routeSwitch(w http.ResponseWriter, req *http.Request, user c.User, prefix string, extraData string) c.RouteError {
var err common.RouteError var err c.RouteError
switch(prefix) {` + out + ` switch(prefix) {` + out + `
/*case "/sitemaps": // TODO: Count these views /*case "/sitemaps": // TODO: Count these views
req.URL.Path += extraData req.URL.Path += extraData
err = sitemapSwitch(w,req)*/ err = sitemapSwitch(w,req)*/
case "/uploads": case "/uploads":
if extraData == "" { if extraData == "" {
return common.NotFound(w,req,nil) return c.NotFound(w,req,nil)
} }
gzw, ok := w.(common.GzipResponseWriter) gzw, ok := w.(c.GzipResponseWriter)
if ok { if ok {
w = gzw.ResponseWriter w = gzw.ResponseWriter
w.Header().Del("Content-Type") w.Header().Del("Content-Type")
@ -829,7 +835,7 @@ func (r *GenRouter) routeSwitch(w http.ResponseWriter, req *http.Request, user c
counters.RouteViewCounter.Bump({{index .AllRouteMap "routes.SitemapXml"}}) counters.RouteViewCounter.Bump({{index .AllRouteMap "routes.SitemapXml"}})
return routes.SitemapXml(w,req)*/ return routes.SitemapXml(w,req)*/
} }
return common.NotFound(w,req,nil) return c.NotFound(w,req,nil)
default: default:
// A fallback for dynamic routes, e.g. ones declared by plugins // A fallback for dynamic routes, e.g. ones declared by plugins
r.RLock() r.RLock()
@ -849,7 +855,7 @@ func (r *GenRouter) routeSwitch(w http.ResponseWriter, req *http.Request, user c
r.DumpRequest(req,"Bad Route") r.DumpRequest(req,"Bad Route")
} }
counters.RouteViewCounter.Bump({{index .AllRouteMap "routes.BadRoute" }}) counters.RouteViewCounter.Bump({{index .AllRouteMap "routes.BadRoute" }})
return common.NotFound(w,req,nil) return c.NotFound(w,req,nil)
} }
return err return err
} }

View File

@ -60,7 +60,7 @@ func (route *RouteImpl) hasBeforeItem(item string) bool {
} }
func (route *RouteImpl) NoGzip() *RouteImpl { func (route *RouteImpl) NoGzip() *RouteImpl {
return route.LitBeforeMultiline(`gzw, ok := w.(common.GzipResponseWriter) return route.LitBeforeMultiline(`gzw, ok := w.(c.GzipResponseWriter)
if ok { if ok {
w = gzw.ResponseWriter w = gzw.ResponseWriter
w.Header().Del("Content-Type") w.Header().Del("Content-Type")
@ -132,7 +132,7 @@ func UploadAction(fname string, path string, args ...string) *uploadAction {
} }
func (action *uploadAction) MaxSizeVar(varName string) *RouteImpl { func (action *uploadAction) MaxSizeVar(varName string) *RouteImpl {
action.Route.LitBeforeMultiline(`err = common.HandleUploadRoute(w,req,user,` + varName + `) action.Route.LitBeforeMultiline(`err = c.HandleUploadRoute(w,req,user,` + varName + `)
if err != nil { if err != nil {
return err return err
}`) }`)

View File

@ -41,7 +41,7 @@ func routes(r *Router) {
r.AddGroup(pollRoutes()) r.AddGroup(pollRoutes())
r.AddGroup(accountRoutes()) r.AddGroup(accountRoutes())
r.Add(Special("common.RouteWebsockets", "/ws/")) r.Add(Special("c.RouteWebsockets", "/ws/"))
} }
// TODO: Test the email token route // TODO: Test the email token route
@ -52,7 +52,7 @@ func userRoutes() *RouteGroup {
MemberView("routes.AccountEdit", "/user/edit/"), MemberView("routes.AccountEdit", "/user/edit/"),
MemberView("routes.AccountEditPassword", "/user/edit/password/"), MemberView("routes.AccountEditPassword", "/user/edit/password/"),
Action("routes.AccountEditPasswordSubmit", "/user/edit/password/submit/"), // TODO: Full test this Action("routes.AccountEditPasswordSubmit", "/user/edit/password/submit/"), // TODO: Full test this
UploadAction("routes.AccountEditAvatarSubmit", "/user/edit/avatar/submit/").MaxSizeVar("int(common.Config.MaxRequestSize)"), UploadAction("routes.AccountEditAvatarSubmit", "/user/edit/avatar/submit/").MaxSizeVar("int(c.Config.MaxRequestSize)"),
Action("routes.AccountEditUsernameSubmit", "/user/edit/username/submit/"), // TODO: Full test this Action("routes.AccountEditUsernameSubmit", "/user/edit/username/submit/"), // TODO: Full test this
MemberView("routes.AccountEditMFA", "/user/edit/mfa/"), MemberView("routes.AccountEditMFA", "/user/edit/mfa/"),
MemberView("routes.AccountEditMFASetup", "/user/edit/mfa/setup/"), MemberView("routes.AccountEditMFASetup", "/user/edit/mfa/setup/"),
@ -82,7 +82,7 @@ func usersRoutes() *RouteGroup {
func topicRoutes() *RouteGroup { func topicRoutes() *RouteGroup {
return newRouteGroup("/topic/").Routes( return newRouteGroup("/topic/").Routes(
View("routes.ViewTopic", "/topic/", "extraData"), View("routes.ViewTopic", "/topic/", "extraData"),
UploadAction("routes.CreateTopicSubmit", "/topic/create/submit/").MaxSizeVar("int(common.Config.MaxRequestSize)"), UploadAction("routes.CreateTopicSubmit", "/topic/create/submit/").MaxSizeVar("int(c.Config.MaxRequestSize)"),
Action("routes.EditTopicSubmit", "/topic/edit/submit/", "extraData"), Action("routes.EditTopicSubmit", "/topic/edit/submit/", "extraData"),
Action("routes.DeleteTopicSubmit", "/topic/delete/submit/").LitBefore("req.URL.Path += extraData"), Action("routes.DeleteTopicSubmit", "/topic/delete/submit/").LitBefore("req.URL.Path += extraData"),
Action("routes.StickTopicSubmit", "/topic/stick/submit/", "extraData"), Action("routes.StickTopicSubmit", "/topic/stick/submit/", "extraData"),
@ -91,7 +91,7 @@ func topicRoutes() *RouteGroup {
Action("routes.UnlockTopicSubmit", "/topic/unlock/submit/", "extraData"), Action("routes.UnlockTopicSubmit", "/topic/unlock/submit/", "extraData"),
Action("routes.MoveTopicSubmit", "/topic/move/submit/", "extraData"), Action("routes.MoveTopicSubmit", "/topic/move/submit/", "extraData"),
Action("routes.LikeTopicSubmit", "/topic/like/submit/", "extraData"), Action("routes.LikeTopicSubmit", "/topic/like/submit/", "extraData"),
UploadAction("routes.AddAttachToTopicSubmit", "/topic/attach/add/submit/", "extraData").MaxSizeVar("int(common.Config.MaxRequestSize)"), UploadAction("routes.AddAttachToTopicSubmit", "/topic/attach/add/submit/", "extraData").MaxSizeVar("int(c.Config.MaxRequestSize)"),
Action("routes.RemoveAttachFromTopicSubmit", "/topic/attach/remove/submit/", "extraData"), Action("routes.RemoveAttachFromTopicSubmit", "/topic/attach/remove/submit/", "extraData"),
) )
} }
@ -99,13 +99,13 @@ func topicRoutes() *RouteGroup {
func replyRoutes() *RouteGroup { func replyRoutes() *RouteGroup {
return newRouteGroup("/reply/").Routes( return newRouteGroup("/reply/").Routes(
// TODO: Reduce this to 1MB for attachments for each file? // TODO: Reduce this to 1MB for attachments for each file?
UploadAction("routes.CreateReplySubmit", "/reply/create/").MaxSizeVar("int(common.Config.MaxRequestSize)"), // TODO: Rename the route so it's /reply/create/submit/ UploadAction("routes.CreateReplySubmit", "/reply/create/").MaxSizeVar("int(c.Config.MaxRequestSize)"), // TODO: Rename the route so it's /reply/create/submit/
Action("routes.ReplyEditSubmit", "/reply/edit/submit/", "extraData"), Action("routes.ReplyEditSubmit", "/reply/edit/submit/", "extraData"),
Action("routes.ReplyDeleteSubmit", "/reply/delete/submit/", "extraData"), Action("routes.ReplyDeleteSubmit", "/reply/delete/submit/", "extraData"),
Action("routes.ReplyLikeSubmit", "/reply/like/submit/", "extraData"), Action("routes.ReplyLikeSubmit", "/reply/like/submit/", "extraData"),
//MemberView("routes.ReplyEdit","/reply/edit/","extraData"), // No js fallback //MemberView("routes.ReplyEdit","/reply/edit/","extraData"), // No js fallback
//MemberView("routes.ReplyDelete","/reply/delete/","extraData"), // No js confirmation page? We could have a confirmation modal for the JS case //MemberView("routes.ReplyDelete","/reply/delete/","extraData"), // No js confirmation page? We could have a confirmation modal for the JS case
UploadAction("routes.AddAttachToReplySubmit", "/reply/attach/add/submit/", "extraData").MaxSizeVar("int(common.Config.MaxRequestSize)"), UploadAction("routes.AddAttachToReplySubmit", "/reply/attach/add/submit/", "extraData").MaxSizeVar("int(c.Config.MaxRequestSize)"),
Action("routes.RemoveAttachFromReplySubmit", "/reply/attach/remove/submit/", "extraData"), Action("routes.RemoveAttachFromReplySubmit", "/reply/attach/remove/submit/", "extraData"),
) )
} }