diff --git a/go.mod b/go.mod index 2d6f8bc0..ccb14a40 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.12 require ( cloud.google.com/go v0.39.0 // indirect github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d // indirect - github.com/aerogo/aero v1.3.8 + github.com/aerogo/aero v1.3.10 github.com/aerogo/api v0.2.0 github.com/aerogo/crawler v0.2.5 github.com/aerogo/graphql v0.4.0 @@ -52,4 +52,6 @@ require ( gopkg.in/yaml.v2 v2.2.2 // indirect ) +replace github.com/aerogo/aero => /home/eduard/projects/aerogo/aero + exclude github.com/logpacker/PayPal-Go-SDK v2.0.0+incompatible diff --git a/go.sum b/go.sum index 8b52ef0c..c27a0c14 100644 --- a/go.sum +++ b/go.sum @@ -9,10 +9,6 @@ github.com/PuerkitoBio/goquery v1.5.0 h1:uGvmFXOA73IKluu/F84Xd1tt/z07GYm8X49XKHP github.com/PuerkitoBio/goquery v1.5.0/go.mod h1:qD2PgZ9lccMbQlc7eEOjaeRlFQON7xY8kdmcsrnKqMg= github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d h1:G0m3OIz70MZUWq3EgK3CesDbo8upS2Vm9/P3FtgI+Jk= github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= -github.com/aerogo/aero v1.3.1 h1:P4XS4ePrJWSJwHLXKkX5YjFsoywhWuXf3dPIX5XVAW0= -github.com/aerogo/aero v1.3.1/go.mod h1:5rPhXo2DNMFQ7XhDsuZ3L7Zr6TH/349+WczUbrOUZvM= -github.com/aerogo/aero v1.3.8 h1:bKYigLZx4NupGb2mu2I0KdvQH2Kq8rP7Xg1scrz10sQ= -github.com/aerogo/aero v1.3.8/go.mod h1:DZA+Yt0AevLyvNG7w1CyYoZZfoFMysABOOrFrgrQhHM= github.com/aerogo/api v0.2.0 h1:mIc/y381e+Qc85eSc2cKPdpDDOmT0hlnEeCw2Dcf7no= github.com/aerogo/api v0.2.0/go.mod h1:6objJn5XiKpYpywQUPrFjxZIXD4NVI2LwcBNYCEcS3Y= github.com/aerogo/cluster v0.1.6 h1:9HYjJwo19uuh9thIc80T3caap9t9b4BXZ1iN8aztjlU= @@ -71,8 +67,6 @@ github.com/akyoto/color v1.8.5 h1:xvHRmBJdsT5HJxnfyIT8l3zNbexA/2YIIeAlaHuhYGY= github.com/akyoto/color v1.8.5/go.mod h1:mI8lhoKcgnvH8fnaupVUE3BmKUp2bpDn5wFS1xEQ4hw= github.com/akyoto/go-matroska v0.1.1 h1:HgoCAkeWrGjYr0FZr3yCzAIkXuOGRiVil7Ul329lm+A= github.com/akyoto/go-matroska v0.1.1/go.mod h1:x+GUVwyby6HN/MKKNP4BvGqP9VrHuEznfBf288gehek= -github.com/akyoto/hash v0.3.5 h1:5EJGHx6RfE9aHrEzWU3pfLGFUWMvPVqtsxt7mSON+mY= -github.com/akyoto/hash v0.3.5/go.mod h1:uPmnZyhBJIyLON8V9LNi0CcqtwYaH2RiKLFQg67fwq0= github.com/akyoto/hash v0.4.0 h1:M9Q3E6cOAxbf7q3yu5SZZdbZxC4thndCkqJctxl1+zg= github.com/akyoto/hash v0.4.0/go.mod h1:purxg2OohOWT7H0oLP0xQF1DG/EbazUbw7zomRUk8Y8= github.com/akyoto/imageserver v0.3.6 h1:Sxcbgo45Lh7afcSmcU8OS49VYbqh4kE3DK0Lxuuxf74= @@ -280,8 +274,6 @@ golang.org/x/sys v0.0.0-20190516014833-cab07311ab81 h1:5Q88vZAfC0WB8T1GHRLttQaZd golang.org/x/sys v0.0.0-20190516014833-cab07311ab81/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190523142557-0e01d883c5c5 h1:sM3evRHxE/1RuMe1FYAL3j7C7fUfIjkbE+NiDAYUF8U= golang.org/x/sys v0.0.0-20190523142557-0e01d883c5c5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190531175056-4c3a928424d2 h1:T5DasATyLQfmbTpfEXx/IOL9vfjzW6up+ZDkmHvIf2s= -golang.org/x/sys v0.0.0-20190531175056-4c3a928424d2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190602015325-4c4f7f33c9ed h1:uPxWBzB3+mlnjy9W58qY1j/cjyFjutgw/Vhan2zLy/A= golang.org/x/sys v0.0.0-20190602015325-4c4f7f33c9ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= diff --git a/main.go b/main.go index 3378b440..0b6bbe17 100644 --- a/main.go +++ b/main.go @@ -45,8 +45,8 @@ func configure(app *aero.Application) *aero.Application { // Middleware app.Use( + middleware.Recover, middleware.OpenGraph, - middleware.Layout, middleware.Log, middleware.Session, middleware.UserInfo, @@ -70,6 +70,11 @@ func configure(app *aero.Application) *aero.Application { // Close the database node on shutdown app.OnEnd(arn.Node.Close) + // Don't push when an underscore URL has been requested + app.AddPushCondition(func(ctx aero.Context) bool { + return !strings.HasPrefix(ctx.Path(), "/_") + }) + // Show errors in the console app.OnError(func(ctx aero.Context, err error) { color.Red(err.Error()) diff --git a/middleware/Layout.go b/middleware/Layout.go index b4d0f1f0..099e4ee4 100644 --- a/middleware/Layout.go +++ b/middleware/Layout.go @@ -2,7 +2,6 @@ package middleware import ( "sort" - "strings" "github.com/aerogo/aero" "github.com/akyoto/stringutils/unsafe" @@ -14,10 +13,6 @@ import ( // to be wrapped around the general layout. func Layout(next aero.Handler) aero.Handler { return func(ctx aero.Context) error { - if ctx.Request().Method() != "GET" || !strings.Contains(ctx.Request().Header("Accept"), "text/html") || strings.HasPrefix(ctx.Path(), "/_") || strings.HasPrefix(ctx.Path(), "/api/") || strings.HasPrefix(ctx.Path(), "/graphql") { - return next(ctx) - } - ctx.AddModifier(func(content []byte) []byte { user := arn.GetUserFromContext(ctx) customCtx := ctx.(*OpenGraphContext) @@ -42,6 +37,9 @@ func Layout(next aero.Handler) aero.Handler { sort.Strings(tags) } + // Assure that errors are formatted as HTML + ctx.Response().SetHeader("Content-Type", "text/html; charset=utf-8") + html := components.Layout(ctx, user, openGraph, meta, tags, unsafe.BytesToString(content)) return unsafe.StringToBytes(html) }) diff --git a/middleware/Recover.go b/middleware/Recover.go index 8f6fa6a8..12a25d3b 100644 --- a/middleware/Recover.go +++ b/middleware/Recover.go @@ -3,7 +3,9 @@ package middleware import ( "fmt" "net/http" + "os" "runtime" + "strings" "github.com/aerogo/aero" ) @@ -26,7 +28,11 @@ func Recover(next aero.Handler) aero.Handler { stack := make([]byte, 4096) length := runtime.Stack(stack, true) - _ = ctx.Error(http.StatusInternalServerError, err, stack[:length]) + stackString := string(stack[:length]) + fmt.Fprint(os.Stderr, stackString) + + message := err.Error() + "

" + strings.ReplaceAll(stackString, "\n", "
") + _ = ctx.Error(http.StatusInternalServerError, message) }() return next(ctx) diff --git a/utils/page/page.go b/utils/page/page.go index 7f5491ad..60daf08e 100644 --- a/utils/page/page.go +++ b/utils/page/page.go @@ -1,9 +1,12 @@ package page -import "github.com/aerogo/aero" +import ( + "github.com/aerogo/aero" + "github.com/animenotifier/notify.moe/middleware" +) // Get registers a layout rendered route and a contents-only route. func Get(app *aero.Application, route string, handler aero.Handler) { - app.Get(route, handler) + app.Get(route, middleware.Layout(handler)) app.Get("/_"+route, handler) }