Пример #1
0
func encodeHandler(db database.DB) http.Handler {
	handler := func(w http.ResponseWriter, r *http.Request) {

		if r.Method != "POST" {
			http.Error(w, "use POST to encode urls", http.StatusMethodNotAllowed)
			return
		}
		if r.Body == nil {
			http.Error(w, http.ErrShortBody.ErrorString, http.StatusBadRequest)
			return
		}

		longurl, err := ioutil.ReadAll(r.Body)
		if err != nil {
			http.Error(w, err.Error(), http.StatusInternalServerError)
			return
		}

		shorturl, err := db.Encode(string(longurl))
		if err != nil {
			http.Error(w, fmt.Sprintf("error encoding %s: %s", longurl, err), http.StatusInternalServerError)
			return
		}
		writeLogErr(w, []byte(fmt.Sprintf("%s/%s", opts.Domain, shorturl)))
	}

	return http.HandlerFunc(handler)

}