func (rc *ReferralCodeControllerImpl) report(w http.ResponseWriter, r *http.Request) { u := rc.currentUser.Get(r) if u == nil { rc.renderer.JSON(w, http.StatusUnauthorized, map[string]string{"error": "Must be logged in to report invalid codes"}) return } if !bson.IsObjectIdHex(mux.Vars(r)["id"]) { rc.renderer.JSON(w, http.StatusBadRequest, map[string]string{"error": "Invalid BSON ID"}) return } code := new(models.ReferralCode) db := rc.database.Get(r) if err := code.FindByID(bson.ObjectIdHex(mux.Vars(r)["id"]), db); err != nil { rc.renderer.JSON(w, http.StatusInternalServerError, map[string]string{"error": err.Error()}) return } if !code.ID.Valid() { rc.renderer.JSON(w, http.StatusBadRequest, map[string]string{"error": "No such referral code"}) return } if u.ID == code.UserID { rc.renderer.JSON(w, http.StatusBadRequest, map[string]string{"error": "Don't report your own code, silly"}) return } defer code.WasReported(u.ID, db) flag := models.NewReferralCodeFlag(code.ID, u.ID) defer flag.Save(db) if newCode := rc.randomCode(code.ServiceID, db, w); newCode.ID.Valid() { rc.renderer.JSON(w, http.StatusOK, newCode) } }