|
@@ -121,12 +121,67 @@ func logInPostHandler(w http.ResponseWriter, r *http.Request) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-func signInHandler(w http.ResponseWriter, r *http.Request) {
|
|
|
+func logOutGetHandler(w http.ResponseWriter, r *http.Request) {
|
|
|
+ session, _ := sessionsStore.Get(r, "session")
|
|
|
+ session.Options.MaxAge = -1
|
|
|
+ session.Save(r, w)
|
|
|
+
|
|
|
+ untyped, ok := session.Values["username"]
|
|
|
+ if ok {
|
|
|
+ username, ok1 := untyped.(string)
|
|
|
+ if ok1 {
|
|
|
+ logger.Printf("User %s loged out", username)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ http.Redirect(w, r, "/", http.StatusFound)
|
|
|
+}
|
|
|
+
|
|
|
+func signInGetHandler(w http.ResponseWriter, r *http.Request) {
|
|
|
signInTemplate.Execute(w, nil)
|
|
|
}
|
|
|
|
|
|
+func signInPostHandler(w http.ResponseWriter, r *http.Request) {
|
|
|
+ r.ParseForm()
|
|
|
+ username := r.PostForm.Get("username")
|
|
|
+ password := r.PostForm.Get("password")
|
|
|
+ passwordRepeat := r.PostForm.Get("password-repeat")
|
|
|
+
|
|
|
+ data := struct {
|
|
|
+ Username string
|
|
|
+ Password string
|
|
|
+ PasswordRepeat string
|
|
|
+ Error string
|
|
|
+ }{
|
|
|
+ Username: username,
|
|
|
+ Password: password,
|
|
|
+ PasswordRepeat: passwordRepeat,
|
|
|
+ Error: "",
|
|
|
+ }
|
|
|
+
|
|
|
+ if dBConnector.IsNameUsed(username) {
|
|
|
+ data.Error = "Имя пользователя занято"
|
|
|
+ } else {
|
|
|
+ if (password != passwordRepeat) {
|
|
|
+ data.Error = "Введенные пароли не совпадают"
|
|
|
+ } else {
|
|
|
+ if dBConnector.SigInUser(username,password) {
|
|
|
+
|
|
|
+ session, _ := sessionsStore.Get(r, "session")
|
|
|
+ session.Values["username"] = username
|
|
|
+ session.Values["password"] = password
|
|
|
+ session.Save(r,w)
|
|
|
+
|
|
|
+ http.Redirect(w, r, "/", http.StatusFound)
|
|
|
+ } else {
|
|
|
+ data.Error = "Произошла внутреняя ошибка при регистрации нового пользователя"
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ signInTemplate.Execute(w, data)
|
|
|
+}
|
|
|
+
|
|
|
func pressHandler(w http.ResponseWriter, r *http.Request) {
|
|
|
- logger.Print("click")
|
|
|
http.Redirect(w, r, "/", http.StatusFound)
|
|
|
}
|
|
|
|
|
@@ -165,10 +220,12 @@ func main() {
|
|
|
|
|
|
|
|
|
requestRouter.HandleFunc("/", indexHandler).Methods("GET")
|
|
|
- requestRouter.HandleFunc("/", indexPostHandler).Methods("POST")
|
|
|
+ requestRouter.HandleFunc("/", indexPostHandler).Methods("POST") //Есть ли нужда в обработке POST для /
|
|
|
requestRouter.HandleFunc("/login/", logInGetHandler).Methods("GET")
|
|
|
requestRouter.HandleFunc("/login/", logInPostHandler).Methods("POST")
|
|
|
- requestRouter.HandleFunc("/signin/", signInHandler).Methods("GET")
|
|
|
+ requestRouter.HandleFunc("/logout/", logOutGetHandler).Methods("GET")
|
|
|
+ requestRouter.HandleFunc("/signin/", signInGetHandler).Methods("GET")
|
|
|
+ requestRouter.HandleFunc("/signin/", signInPostHandler).Methods("POST")
|
|
|
//requestRouter.HandleFunc("/", pressHandler).Methods("POST")
|
|
|
http.Handle("/", requestRouter)
|
|
|
logger.Fatal(http.ListenAndServe(":8080", nil))
|