package main import ( "flag" "log" "net/http" "path" "strings" ) var ( flagFetchDirPath string ) func init() { flag.StringVar(&flagFetchDirPath, "d", "data", "Path to content-addressed store") } func handleDataNew(storePath string) http.HandlerFunc { // hash string to url urlMap := mustReadJSON[map[string]string](path.Join(storePath, "map")) urlMapInverse := make(map[string]string, len(urlMap)) for hs, u := range urlMap { urlMapInverse[u] = hs } log.Printf("inverted %d media entries", len(urlMap)) return func(writer http.ResponseWriter, request *http.Request) { if request.URL == nil { log.Printf("got invalid request %p", request) return } fixedPath := strings.Replace(request.URL.Path, "/data/https:", "https:/", 1) if hs, ok := urlMapInverse[fixedPath]; !ok { verboseln("media path", fixedPath, "not found") writer.WriteHeader(http.StatusNotFound) writeResp(writer, []byte("not found")) return } else { http.ServeFile(writer, request, path.Join(storePath, hs)) } } }