func Login(w http.ResponseWriter, r *http.Request, urlValues map[string]string, db *xorm.Engine) { //handle the input var input struct { Email string `json:"email" validate:"required"` Password string `json:"password" validate:"required"` } if err := httputil.Bind(r.Body, &input); err != nil { middleware.Send(w, http.StatusBadRequest, map[string]string{"error": err.Error()}) return } user := model.User{} found, err := db.Where("email = ?", input.Email).Get(&user) if err != nil { middleware.Send(w, http.StatusInternalServerError, map[string]string{"error": err.Error()}) return } if found == false || bcrypt.CompareHashAndPassword([]byte(user.PasswordDigest), []byte(input.Password)) != nil { middleware.Send(w, http.StatusUnauthorized, map[string]string{"error": "Incorrect Email / Password"}) return } if newToken, err := auth.Sign(user.Id); err != nil { middleware.Send(w, http.StatusInternalServerError, map[string]string{"error": err.Error()}) } else { // update JWT Token w.Header().Add("Authorization", newToken) //allow CORS w.Header().Set("Access-Control-Expose-Headers", "Authorization") middleware.Send(w, http.StatusOK, map[string]string{"userId": user.Id}) } }
func CatCreate(r io.Reader, urlValues map[string]string, session *xorm.Session, userId string) (int, error, interface{}) { cat := model.Cat{} if err := httputil.Bind(r, &cat); err != nil { return http.StatusBadRequest, err, nil } cat.Id = uuid.NewV4().String() cat.UserId = userId if statusCode, err := createRecord(&cat, session); err != nil { return statusCode, err, nil } else { return http.StatusOK, nil, map[string]string{"id": cat.Id} } }
func UserCreate(w http.ResponseWriter, r *http.Request, urlValues map[string]string, db *xorm.Engine) { user := struct { model.User `xorm:"extends"` Password string `xorm:"-" json:"password" validate:"required"` }{} if err := httputil.Bind(r.Body, &user); err != nil { middleware.Send(w, http.StatusBadRequest, map[string]string{"error": err.Error()}) return } user.Id = uuid.NewV4().String() if digest, err := bcrypt.GenerateFromPassword([]byte(user.Password), bcrypt.DefaultCost); err != nil { middleware.Send(w, http.StatusInternalServerError, map[string]string{"error": err.Error()}) return } else { user.PasswordDigest = string(digest) } session := db.NewSession() if err := session.Begin(); err != nil { middleware.Send(w, http.StatusInternalServerError, map[string]string{"error": err.Error()}) return } defer session.Close() if statusCode, err := createRecord(&user, session); err != nil { middleware.Send(w, statusCode, map[string]string{"error": err.Error()}) return } if err := session.Commit(); err != nil { middleware.Send(w, http.StatusInternalServerError, map[string]string{"error": err.Error()}) return } if newToken, err := auth.Sign(user.Id); err != nil { middleware.Send(w, http.StatusInternalServerError, map[string]string{"error": err.Error()}) } else { // update JWT Token w.Header().Add("Authorization", newToken) //allow CORS w.Header().Set("Access-Control-Expose-Headers", "Authorization") middleware.Send(w, http.StatusOK, map[string]string{"userId": user.Id}) } }