Browse Source

доавлена базовая регистрация нового пользователя

toomanysugar 3 years ago
parent
commit
2f81fc3ce1
3 changed files with 125 additions and 5 deletions
  1. 41 0
      connector.go
  2. 61 4
      main.go
  3. 23 1
      www/signin.html

+ 41 - 0
connector.go

@@ -64,6 +64,47 @@ func (c connection) LogIn(username string, password string) bool{
 
 }
 
+func (c connection) IsNameUsed(username string) bool {
+
+	db, err := sql.Open("mysql", c.dBOpenStr)
+	if err != nil {
+		panic(err)
+	}
+	defer db.Close()
+
+	var counter int
+	act_query := "SELECT count(*) FROM gosite.users WHERE username='" + username + "';"
+	db.QueryRow(act_query).Scan(&counter)
+    
+	if (counter == 0) {
+		fmt.Printf("Username unused\n")
+    	return false
+    }
+	fmt.Printf("Username used\n")
+	return true
+}
+
+func (c connection) SigInUser(username string, password string) bool {
+	db, err := sql.Open("mysql", c.dBOpenStr)  
+    if err != nil {
+        panic(err)
+    } 
+    defer db.Close()
+     
+    result, err := db.Exec("INSERT INTO gosite.users (username, password) values (?, ?)", username, password)
+    if err != nil{
+        panic(err)
+    }
+
+    rowsCount, _ := result.RowsAffected()
+    if (rowsCount == 1) {
+	    fmt.Printf("Lines changed: %d\n", rowsCount)
+	    return true
+    } else {
+    	return false
+    }
+}
+
 /*
 func main() {
 

+ 61 - 4
main.go

@@ -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))

+ 23 - 1
www/signin.html

@@ -6,6 +6,28 @@
 	</head>
 	<body>
 		<h1>SIGNIN</h1>
-		
+		<form method="POST">
+			<p>
+				Логин:
+				<br>
+				<input name="username" value="{{.Username}}">
+			</p>
+			<p>
+				Пароль: 
+				<br>
+				<input name="password" value="{{.Password}}">
+			</p>
+			<p>
+				Подтвердить пароль:
+				<br>
+				<input name="password-repeat" value="{{.PasswordRepeat}}">
+			</p>
+			<p>
+				<button type="submit">Зарегистрироваться</button>
+			</p>
+			{{if .Error}}<p>
+				{{.Error}}
+			</p>{{end}}
+		</form>
 	</body>
 </html>