// For the user sign in. func signinHandler(w http.ResponseWriter, req *http.Request) { id, password, err := getRequiredDatas(req) defer req.Body.Close() if err != nil { http.Error(w, ERROR_BAD_REQUEST, http.StatusBadRequest) return } id = append([]byte(PREFIX_USER), id[0:]...) lbs, err := leveldb.Get(id) if err != nil { http.Error(w, ERROR_SERVER_INTERNAL, http.StatusInternalServerError) return } if bytes.Equal(lbs, password) { fmt.Println(string(id[len([]byte(PREFIX_USER)):])) token, err := jwt.NewToken(string(id[len([]byte(PREFIX_USER)):]), string(secret)) if err != nil { http.Error(w, ERROR_SERVER_INTERNAL, http.StatusInternalServerError) return } w.Write([]byte(token)) } else { w.WriteHeader(http.StatusNotAcceptable) } }
// For the user sign up. func signupHandler(w http.ResponseWriter, req *http.Request) { // Parse the username and password from the request body id, password, err := getRequiredDatas(req) defer req.Body.Close() // if error is not a nil // end the function immediately after sending the response if err != nil { http.Error(w, ERROR_BAD_REQUEST, http.StatusBadRequest) return } // append the prefix id = append([]byte(PREFIX_USER), id[0:]...) // check if the username have been used lbs, err := leveldb.Get(id) if err != nil { http.Error(w, ERROR_SERVER_INTERNAL, http.StatusInternalServerError) return } // if the username is not used if len(lbs) == 0 { err := leveldb.Put(id, password) if err != nil { http.Error(w, ERROR_SERVER_INTERNAL, http.StatusInternalServerError) return } // make the token for the response // the token only include the username and the hash which for use by the validator token, err := jwt.NewToken(string(id[len([]byte(PREFIX_USER)):]), string(secret)) if err != nil { http.Error(w, ERROR_SERVER_INTERNAL, http.StatusInternalServerError) return } w.Write([]byte(token)) } else { w.WriteHeader(http.StatusNotAcceptable) } }