diff --git a/dbutil/dbutil.go b/dbutil/dbutil.go index f3afd34..ad35c52 100644 --- a/dbutil/dbutil.go +++ b/dbutil/dbutil.go @@ -93,8 +93,13 @@ func (u Util) GetExtensions() (kp []types.IdCount, err error) { if _, err := u.Gfs.Find(nil).MapReduce(job, &kp); err != nil { return kp, err } + // Less than effecient, but cleanest place to put this + for i := range kp { + kp[i].Root = "ext" // for extension. Maps to /ext/ + } return kp, nil } + /* get a list of keywords and their frequency count */ @@ -126,5 +131,9 @@ func (u Util) GetKeywords() (kp []types.IdCount, err error) { if _, err := u.Gfs.Find(nil).MapReduce(job, &kp); err != nil { return kp, err } + // Less than effecient, but cleanest place to put this + for i := range kp { + kp[i].Root = "k" // for keyword. Maps to /k/ + } return kp, nil } diff --git a/layouts.go b/layouts.go index b73e958..2882cec 100644 --- a/layouts.go +++ b/layouts.go @@ -179,7 +179,7 @@ var tagcloudTemplateHTML = ` {{if .}}
{{range .}} -{{.Id}} +{{.Id}} {{end}}
{{end}} @@ -418,3 +418,41 @@ func ListTagCloudPage(w io.Writer, ic []types.IdCount) (err error) { } return } + +func ErrorPage(w io.Writer, e error) (err error) { + err = headTemplate.Execute(w, map[string]string{"title": "FileSrv :: ERROR"}) + if err != nil { + return err + } + err = navbarTemplate.Execute(w, nil) + if err != nil { + return err + } + err = containerBeginTemplate.Execute(w, nil) + if err != nil { + return err + } + + // main context of this page + err = template.Must(template.New("serverError").Parse(` + {{if .}} +
+
+

ERROR!

+
+ {{.Error()}} +
+
{{/* hero-unit */}} +
{{/* span9 */}} + {{end}} + `)).Execute(w, e) + if err != nil { + return err + } + + err = tailTemplate.Execute(w, map[string]string{"footer": fmt.Sprintf("Version: %s", VERSION)}) + if err != nil { + return err + } + return +} diff --git a/server.go b/server.go index 6ebe3ae..e1a9e9d 100644 --- a/server.go +++ b/server.go @@ -78,10 +78,10 @@ func initMongo() { } func serverErr(w http.ResponseWriter, r *http.Request, e error) { - log.Printf("Error: %s", e) httplog.LogRequest(r, 503) - fmt.Fprintf(w, "Error: %s", e) - http.Error(w, "Service Unavailable", 503) + log.Printf("Error: %s", e) + w.WriteHeader(503) + //ErrorPage(w, err) return } @@ -157,7 +157,7 @@ func routeFilesGET(w http.ResponseWriter, r *http.Request) { return } - filename := strings.ToLower(uriChunks[1]) + filename := strings.ToLower(uriChunks[1]) // if the Request got here by a delete request, confirm it if (len(r.Form["delete"]) > 0 && r.Form["delete"][0] == "true") && (len(r.Form["confirm"]) > 0 && r.Form["confirm"][0] == "true") { @@ -486,13 +486,13 @@ func routeKeywords(w http.ResponseWriter, r *http.Request) { iter = gfs.Find(bson.M{"metadata.keywords": uriChunks[1]}).Sort("-metadata.timestamp").Limit(defaultPageLimit).Iter() } - files := []types.File{} + files := []types.File{} err := iter.All(&files) if err != nil { serverErr(w, r, err) return } - log.Printf("collected %d files", len(files)) + log.Printf("collected %d files", len(files)) err = ListFilesPage(w, files) if err != nil { log.Printf("error: %s", err) @@ -508,7 +508,7 @@ func routeMD5s(w http.ResponseWriter, r *http.Request) { http.NotFound(w, r) return } else if len(uriChunks) != 2 { - // Path: /md5/ + // Path: /md5/ kc, err := du.GetKeywords() if err != nil { serverErr(w, r, err) @@ -521,7 +521,7 @@ func routeMD5s(w http.ResponseWriter, r *http.Request) { return } - files := []types.File{} + files := []types.File{} err := gfs.Find(bson.M{"md5": uriChunks[1]}).Sort("-metadata.timestamp").Limit(defaultPageLimit).All(&files) if err != nil { serverErr(w, r, err) @@ -553,14 +553,14 @@ func routeExt(w http.ResponseWriter, r *http.Request) { http.NotFound(w, r) return } else if len(uriChunks) == 1 || (len(uriChunks) == 2 && len(uriChunks[1]) == 0) { - // Path: /ext/ - // tag cloud of extensions used + // Path: /ext/ + // tag cloud of extensions used ic, err := du.GetExtensions() if err != nil { serverErr(w, r, err) return } - log.Printf("ext: %#v", ic) + log.Printf("ext: %#v", ic) err = ListTagCloudPage(w, ic) if err != nil { serverErr(w, r, err) @@ -568,15 +568,15 @@ func routeExt(w http.ResponseWriter, r *http.Request) { return } - ext := strings.ToLower(uriChunks[1]) - ext_pat := fmt.Sprintf("/%s$/", ext) - files := []types.File{} + ext := strings.ToLower(uriChunks[1]) + ext_pat := fmt.Sprintf("/%s$/", ext) + files := []types.File{} err := gfs.Find(bson.M{"filename": ext_pat}).Sort("-metadata.timestamp").All(&files) if err != nil { serverErr(w, r, err) return } - log.Printf("collected %d files, with ext %s", len(files), ext) + log.Printf("collected %d files, with ext %s", len(files), ext) err = ListFilesPage(w, files) if err != nil { log.Printf("error: %s", err) @@ -750,12 +750,13 @@ func routeUpload(w http.ResponseWriter, r *http.Request) { if exists || useRandName { ext := filepath.Ext(filename) str := hash.GetSmallHash() - filename = fmt.Sprintf("%s%s", str, ext) + filename = strings.ToLower(fmt.Sprintf("%s%s", str, ext)) } file, err := gfs.Create(filename) defer file.Close() if err != nil { + log.Printf("Failed to create on gfs: %s", err) serverErr(w, r, err) return } @@ -763,11 +764,12 @@ func routeUpload(w http.ResponseWriter, r *http.Request) { multiFile, err := filehdr.Open() if err != nil { - log.Println(err) + log.Printf("Failed to open from MultipartForm: %s", err) return } n, err := io.Copy(file, multiFile) if err != nil { + log.Printf("Failed copy from MultipartForm to gfs: %s", err) serverErr(w, r, err) return } diff --git a/types/types.go b/types/types.go index bf9ac28..3737ccf 100644 --- a/types/types.go +++ b/types/types.go @@ -49,4 +49,5 @@ Structure used for collecting values from mongo for a tag cloud type IdCount struct { Id string "_id" Value int + Root string }