Ejemplo n.º 1
0
func singleFileHandler(db db.DbManager) http.Handler {
	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		md5Hash := mux.Vars(r)["hash"]
		switch r.Method {
		case "GET":
			c, err := db.GetFileByHash(md5Hash)
			if err != nil {
				w.WriteHeader(http.StatusInternalServerError)
				fmt.Fprintln(w, "error decoding file")
				return
			}
			if c == nil {
				return404(w)
				return
			}
			if c.PwdHash == nil {
				// When file is downloaded, the file name is c.Name
				w.Header().Set("Content-Disposition", "attachment; filename="+c.Name)
				http.ServeFile(w, r, c.Path)
			} else {
				return404(w)
			}
		case "DELETE":
			err := db.DeleteFile(md5Hash)
			if err != nil {
				w.WriteHeader(http.StatusInternalServerError)
				fmt.Fprintln(w, "error deleting file: %v", err)
				return
			}
			fmt.Fprintln(w, "successfully deleted file")
		default:
			return404(w)
		}
	})
}