* factor out GetSubpathFromConfig

* mv web/subpath.go to utils/subpath.go

* serve up web, api and ws on /subpath if configured

* pass config to utils.RenderWeb(App)?Error

This allows the methods to extract the configured subpath and redirect
to the appropriate `/subpath/error` handler.

* ensure GetSubpathFromConfig returns trailing slashes deterministically

* fix error 404 handling

* redirect /subpath to /subpath/

This is necessary for the static handler to match, otherwise none of the
registered routes find anything. This also makes it no longer necessary
to add trailing slashes in the root router.
Этот коммит содержится в:
Jesse Hallam
2018-06-21 14:31:51 -04:00
коммит произвёл Christopher Speller
родитель 46f969e5dd
Коммит dd35ad43ca
14 изменённых файлов: 283 добавлений и 149 удалений

Просмотреть файл

@@ -29,10 +29,17 @@ import (
type Server struct {
Store store.Store
WebSocketRouter *WebSocketRouter
Router *mux.Router
Server *http.Server
ListenAddr *net.TCPAddr
RateLimiter *RateLimiter
// RootRouter is the starting point for all HTTP requests to the server.
RootRouter *mux.Router
// Router is the starting point for all web, api4 and ws requests to the server. It differs
// from RootRouter only if the SiteURL contains a /subpath.
Router *mux.Router
Server *http.Server
ListenAddr *net.TCPAddr
RateLimiter *RateLimiter
didFinishListen chan struct{}
}
@@ -99,7 +106,7 @@ func redirectHTTPToHTTPS(w http.ResponseWriter, r *http.Request) {
func (a *App) StartServer() error {
mlog.Info("Starting Server...")
var handler http.Handler = &CorsWrapper{a.Config, a.Srv.Router}
var handler http.Handler = &CorsWrapper{a.Config, a.Srv.RootRouter}
if *a.Config().RateLimitSettings.Enable {
mlog.Info("RateLimiter is enabled")