Shorten common. to c. in the router.
This commit is contained in:
parent
20a6a22e78
commit
51e88ad1ee
404
gen_router.go
404
gen_router.go
File diff suppressed because it is too large
Load Diff
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
}`)
|
}`)
|
||||||
|
|
|
@ -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"),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue