package main import ( "code.google.com/p/go-uuid/uuid" "encoding/json" "fmt" "github.com/gorilla/mux" "io" "io/ioutil" "net/http" "strconv" ) func Index(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "text/plain; charset=UTF-8") w.WriteHeader(http.StatusOK) fmt.Fprintln(w, "Welcome!") } func CacheIndex(w http.ResponseWriter, r *http.Request) { dbcaches, err := getCaches() if err != nil { panic(err) } w.Header().Set("Content-Type", "application/json; charset=UTF-8") w.WriteHeader(http.StatusOK) var apicaches APICaches for db := range dbcaches { apicaches = append(apicaches, DBToAPI(dbcaches[db])) } out, err := json.MarshalIndent(apicaches, "", " ") if err != nil { panic(err) } fmt.Fprintf(w, string(out)) } func MarshalCache(apicache APICache) (string, error) { str, err := json.MarshalIndent(apicache, "", " ") return string(str), err } func CacheShow(w http.ResponseWriter, r *http.Request) { cacheId, err := strconv.ParseUint(mux.Vars(r)["cacheId"], 10, 64) if err != nil { panic(err) } cache, err := getCache(cacheId) if err != nil { panic(err) } w.Header().Set("Content-Type", "application/json; charset=UTF-8") w.WriteHeader(http.StatusOK) str, err := MarshalCache(DBToAPI(cache)) if err != nil { panic(err) } fmt.Fprintln(w, str) } func CacheCreate(w http.ResponseWriter, r *http.Request) { var postcache PostCache body, err := ioutil.ReadAll(io.LimitReader(r.Body, 1048576)) if err != nil { panic(err) } if err := r.Body.Close(); err != nil { panic(err) } if err := json.Unmarshal(body, &postcache); err != nil { w.Header().Set("Content-Type", "application/json; charset=UTF-8") w.WriteHeader(422) // unprocessable entity panic(err) } filename := uuid.New() + ".mp3" incache := PostToDB(postcache, filename) outcache, err := postCache(incache) if err != nil { panic(err) } err = writeFile(postcache, filename) if err != nil { panic(err) } w.Header().Set("Content-Type", "application/json; charset=UTF-8") w.WriteHeader(http.StatusCreated) str, err := MarshalCache(DBToAPI(outcache)) if err != nil { panic(err) } fmt.Fprintln(w, str) }