func handleIndexPageRequest(w http.ResponseWriter, r *http.Request) { c := appengine.NewContext(r) // set the initial visitor info to the web site by templating k := storage.GetVisitorInfoKey(c) info, err := storage.GetVisitorInfo(c, k) // ignore the NoSuchEntityError and return the default value if we don't have the entity stored yet if err != nil && err != datastore.ErrNoSuchEntity { log.Errorf(c, "Failed getting visitor info: %v", err) http.Error(w, err.Error(), http.StatusInternalServerError) return } outBuf, err := json.Marshal(info) if err != nil { log.Errorf(c, "Error while marshaling visitor info: %v", err) http.Error(w, err.Error(), http.StatusInternalServerError) return } param := struct { VisitorInfo string }{ string(outBuf), } err = xt.ExecuteTemplate(w, indexFileName, ¶m) if err != nil { log.Errorf(c, "Failed executing template: %v", err) http.Error(w, err.Error(), http.StatusInternalServerError) return } }
func setVisitorInfo(c context.Context, w http.ResponseWriter, r *http.Request) { dec := json.NewDecoder(r.Body) var info storage.VisitorInfo err := dec.Decode(&info) if err != nil { log.Errorf(c, "Failed decoding user request: %v", err) http.Error(w, err.Error(), http.StatusBadRequest) return } k := storage.GetVisitorInfoKey(c) _, err = storage.SetVisitorInfo(c, k, &info) if err != nil { log.Errorf(c, "Failed setting visitor info: %v", err) http.Error(w, err.Error(), http.StatusInternalServerError) return } }
func getVisitorInfo(c context.Context, w http.ResponseWriter, r *http.Request) { k := storage.GetVisitorInfoKey(c) info, err := storage.GetVisitorInfo(c, k) // ignore the NoSuchEntityError and return the default value if we don't have the entity stored yet if err != nil && err != datastore.ErrNoSuchEntity { log.Errorf(c, "Failed getting visitor info: %v", err) http.Error(w, err.Error(), http.StatusInternalServerError) return } enc := json.NewEncoder(w) err = enc.Encode(info) if err != nil { log.Errorf(c, "Failed encoding json response: %v", err) http.Error(w, err.Error(), http.StatusInternalServerError) return } }