mirror of https://github.com/jlelse/GoBlog
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
1.0 KiB
Go
45 lines
1.0 KiB
Go
package main
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"net/http"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
)
|
|
|
|
const staticFolder = "static"
|
|
|
|
func allStaticPaths() (paths []string) {
|
|
paths = []string{}
|
|
err := filepath.Walk(staticFolder, func(path string, info os.FileInfo, err error) error {
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if info.Mode().IsRegular() {
|
|
paths = append(paths, strings.TrimPrefix(path, staticFolder))
|
|
}
|
|
return nil
|
|
})
|
|
if err != nil {
|
|
return
|
|
}
|
|
return
|
|
}
|
|
|
|
func hasStaticPath(path string) bool {
|
|
// Check if file exists
|
|
_, err := os.Stat(filepath.Join(staticFolder, path))
|
|
if err != nil && errors.Is(err, os.ErrNotExist) {
|
|
return false
|
|
}
|
|
return true
|
|
}
|
|
|
|
// Gets only called by registered paths
|
|
func (a *goBlog) serveStaticFile(w http.ResponseWriter, r *http.Request) {
|
|
w.Header().Set(cacheControl, fmt.Sprintf("public,max-age=%d,s-max-age=%d,stale-while-revalidate=%d", a.cfg.Cache.Expiration, a.cfg.Cache.Expiration/3, a.cfg.Cache.Expiration))
|
|
http.ServeFile(w, r, filepath.Join(staticFolder, r.URL.Path))
|
|
}
|