Esempio n. 1
0
// RedirectHandler redirects users to their desired location.
// Not accessed via Ajax, just by end users
func RedirectHandler(db database.ShortenBackend, domain string) func(http.ResponseWriter, *http.Request) {
	return func(w http.ResponseWriter, r *http.Request) {
		slug := mux.Vars(r)["slug"]
		long, err := db.GetLongURL(slug)
		var errNotFound database.ErrNotFound
		if err == errNotFound {
			w.WriteHeader(404)
			fmt.Fprintf(w, fmt.Sprintf(errMsgTemplate, slug, domain, domain))
			return
		}
		if err != nil {
			log.Println(kayvee.FormatLog("shorty", kayvee.Error, "redirect", msg{
				"err": err.Error(),
			}))
			w.WriteHeader(500)
			w.Write([]byte(err.Error()))
			return
		}
		http.Redirect(w, r, long, 302)
		return
	}
}