Streamline verification a bit
This commit is contained in:
parent
c4969084ff
commit
3eb1d522e3
2 changed files with 10 additions and 18 deletions
|
@ -83,7 +83,7 @@ func Handler() http.Handler {
|
||||||
s := m.PathPrefix("/{genus}").Subrouter()
|
s := m.PathPrefix("/{genus}").Subrouter()
|
||||||
|
|
||||||
s.Handle("/users", errorHandler(handleCreater(userService))).Methods("POST")
|
s.Handle("/users", errorHandler(handleCreater(userService))).Methods("POST")
|
||||||
s.Handle("/users/verify/{Nonce}", http.HandlerFunc(handleUserVerify)).Methods("GET")
|
s.Handle("/users/verify/{Nonce}", errorHandler(handleUserVerify)).Methods("GET")
|
||||||
|
|
||||||
type r struct {
|
type r struct {
|
||||||
f errorHandler
|
f errorHandler
|
||||||
|
|
26
users.go
26
users.go
|
@ -270,7 +270,7 @@ func dbGetUserByEmail(email string) (*User, error) {
|
||||||
return &user, nil
|
return &user, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func handleUserVerify(w http.ResponseWriter, r *http.Request) {
|
func handleUserVerify(w http.ResponseWriter, r *http.Request) *appError {
|
||||||
nonce := mux.Vars(r)["Nonce"]
|
nonce := mux.Vars(r)["Nonce"]
|
||||||
q := `SELECT user_id, referer FROM verification WHERE nonce=$1;`
|
q := `SELECT user_id, referer FROM verification WHERE nonce=$1;`
|
||||||
|
|
||||||
|
@ -280,22 +280,16 @@ func handleUserVerify(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
if err := DBH.SelectOne(&ver, q, nonce); err != nil {
|
if err := DBH.SelectOne(&ver, q, nonce); err != nil {
|
||||||
log.Print(err)
|
log.Print(err)
|
||||||
fmt.Fprintln(w, "Invalid URL")
|
return newJSONError(err, http.StatusInternalServerError)
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
failURL := fmt.Sprintf("%s/users/new/fail", ver.Referer)
|
|
||||||
successURL := fmt.Sprintf("%s/users/new/success", ver.Referer)
|
|
||||||
|
|
||||||
if ver.User_id == 0 {
|
if ver.User_id == 0 {
|
||||||
http.Redirect(w, r, failURL, http.StatusMovedPermanently)
|
return newJSONError(errors.New("No user found"), http.StatusInternalServerError)
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var user User
|
var user User
|
||||||
if err := DBH.Get(&user, ver.User_id); err != nil {
|
if err := DBH.Get(&user, ver.User_id); err != nil {
|
||||||
http.Redirect(w, r, failURL, http.StatusMovedPermanently)
|
return newJSONError(err, http.StatusInternalServerError)
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
user.UpdatedAt = currentTime()
|
user.UpdatedAt = currentTime()
|
||||||
|
@ -303,19 +297,17 @@ func handleUserVerify(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
count, err := DBH.Update(&user)
|
count, err := DBH.Update(&user)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
http.Redirect(w, r, failURL, http.StatusMovedPermanently)
|
return newJSONError(err, http.StatusInternalServerError)
|
||||||
return
|
|
||||||
}
|
}
|
||||||
if count != 1 {
|
if count != 1 {
|
||||||
http.Redirect(w, r, failURL, http.StatusMovedPermanently)
|
return newJSONError(errors.New("Count 0"), http.StatusInternalServerError)
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
q = `DELETE FROM verification WHERE user_id=$1;`
|
q = `DELETE FROM verification WHERE user_id=$1;`
|
||||||
_, err = DBH.Exec(q, user.Id)
|
_, err = DBH.Exec(q, user.Id)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
http.Redirect(w, r, failURL, http.StatusMovedPermanently)
|
return newJSONError(err, http.StatusInternalServerError)
|
||||||
return
|
|
||||||
}
|
}
|
||||||
http.Redirect(w, r, successURL, http.StatusMovedPermanently)
|
fmt.Fprintln(w, `{"msg":"All set! Please log in."}`)
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue