func FetchTag(w http.ResponseWriter, r *http.Request, cfg config.Configuration, ctx model.Context) { var err error params := mux.Vars(r) t := model.Tag{} err = t.SetTag(params["tag"]) if err != nil { ctx.Log.Println(err) http.Error(w, "Invalid tag", 400) return } t.SetTagDir(cfg.Filedir) t.CalculateExpiration(cfg.Expiration) if t.TagDirExists() { expired, err := t.IsExpired(cfg.Expiration) if err != nil { ctx.Log.Println(err) http.Error(w, "Internal server error", 500) return } if expired { ctx.Log.Println("Expired: " + t.ExpirationReadable) http.Error(w, "This tag has expired.", 410) return } err = t.StatInfo() if err != nil { ctx.Log.Println(err) http.Error(w, "Internal Server Error", 500) return } err = t.List(cfg.Baseurl) if err != nil { ctx.Log.Println(err) http.Error(w, "Error reading the tag contents.", 404) return } } //t.GenerateLinks(cfg.Baseurl) headers := make(map[string]string) headers["Cache-Control"] = "max-age=1" var status = 200 if r.Header.Get("Content-Type") == "application/zip" || r.FormValue("o") == "zip" { headers["Content-Type"] = "application/zip" // Generate a map of paths to add to the zip response var paths []string for _, f := range t.Files { path := filepath.Join(f.TagDir, f.Filename) paths = append(paths, path) } output.ZIPresponse(w, status, t.Tag, headers, paths, ctx) return } if r.Header.Get("Content-Type") == "application/json" { headers["Content-Type"] = "application/json" output.JSONresponse(w, status, headers, t, ctx) return } else { output.HTMLresponse(w, "viewtag", status, headers, t, ctx) return } }