59 lines
1.6 KiB
Go
59 lines
1.6 KiB
Go
// Copyright (c) 2014 Couchbase, Inc.
|
|
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
|
|
// except in compliance with the License. You may obtain a copy of the License at
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
// Unless required by applicable law or agreed to in writing, software distributed under the
|
|
// License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
|
|
// either express or implied. See the License for the specific language governing permissions
|
|
// and limitations under the License.
|
|
package main
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"github.com/gorilla/mux"
|
|
)
|
|
|
|
func staticFileRouter() *mux.Router {
|
|
r := mux.NewRouter()
|
|
r.StrictSlash(true)
|
|
|
|
// static
|
|
r.PathPrefix("/static/").Handler(http.StripPrefix("/static/",
|
|
myFileHandler{http.FileServer(http.Dir(*staticPath))}))
|
|
|
|
// application pages
|
|
appPages := []string{
|
|
"/overview",
|
|
"/search",
|
|
}
|
|
|
|
for _, p := range appPages {
|
|
// if you try to use index.html it will redirect...poorly
|
|
r.PathPrefix(p).Handler(RewriteURL("/",
|
|
http.FileServer(http.Dir(*staticPath))))
|
|
}
|
|
|
|
r.Handle("/", http.RedirectHandler("/static/index.html", 302))
|
|
|
|
return r
|
|
}
|
|
|
|
type myFileHandler struct {
|
|
h http.Handler
|
|
}
|
|
|
|
func (mfh myFileHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
|
if *staticEtag != "" {
|
|
w.Header().Set("Etag", *staticEtag)
|
|
}
|
|
mfh.h.ServeHTTP(w, r)
|
|
}
|
|
|
|
func RewriteURL(to string, h http.Handler) http.Handler {
|
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
r.URL.Path = to
|
|
h.ServeHTTP(w, r)
|
|
})
|
|
}
|