94 lines
2.9 KiB
Go
94 lines
2.9 KiB
Go
package handlers
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"log"
|
|
"net/http"
|
|
"pocketbaseSigner/models"
|
|
)
|
|
|
|
func RegisterFormHandler(w http.ResponseWriter, r *http.Request) {
|
|
if r.Method == http.MethodGet {
|
|
http.ServeFile(w, r, "./web/register_form.html")
|
|
return
|
|
}
|
|
|
|
if r.Method == http.MethodPost {
|
|
err := r.ParseForm()
|
|
if err != nil {
|
|
http.Error(w, "Ошибка при обработке формы", http.StatusBadRequest)
|
|
return
|
|
}
|
|
|
|
user := models.RegisterForm{
|
|
Email: r.FormValue("email"),
|
|
Password: r.FormValue("password"),
|
|
PasswordConfirm: r.FormValue("password_confirm"),
|
|
FirstName: r.FormValue("firstname"),
|
|
LastName: r.FormValue("lastname"),
|
|
Phone: r.FormValue("phone"),
|
|
}
|
|
|
|
// Проверяем совпадение паролей
|
|
if r.FormValue("password") != r.FormValue("password_confirm") {
|
|
http.Error(w, "Пароли не совпали", http.StatusBadRequest)
|
|
return
|
|
}
|
|
|
|
// Проверяем обязательные поля
|
|
if user.Email == "" || user.Password == "" {
|
|
http.Error(w, "Email и пароль обязательны!", http.StatusBadRequest)
|
|
return
|
|
}
|
|
|
|
// Подготавливаем данные для отправки
|
|
dataMap := map[string]string{
|
|
"email": user.Email,
|
|
"password": user.Password,
|
|
"passwordConfirm": user.PasswordConfirm,
|
|
"FirstName": user.FirstName,
|
|
"LastName": user.LastName,
|
|
"Phone": user.Phone,
|
|
}
|
|
|
|
data, err := json.Marshal(dataMap)
|
|
if err != nil {
|
|
log.Printf("Ошибка при создании JSON: %v", err)
|
|
http.Error(w, "Внутренняя ошибка сервера", http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
log.Printf("Отправляем данные пользователя: %+v\n", user)
|
|
|
|
url := "http://localhost:8090/api/collections/users/records"
|
|
req, err := http.NewRequest("POST", url, bytes.NewBuffer(data))
|
|
if err != nil {
|
|
log.Printf("Ошибка при создании запроса: %v", err)
|
|
http.Error(w, "Внутренняя ошибка сервера", http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
req.Header.Set("Content-Type", "application/json")
|
|
|
|
client := &http.Client{}
|
|
resp, err := client.Do(req)
|
|
if err != nil {
|
|
log.Printf("Ошибка при отправке запроса: %v", err)
|
|
http.Error(w, "Ошибка при подключении к серверу", http.StatusInternalServerError)
|
|
return
|
|
}
|
|
defer resp.Body.Close()
|
|
|
|
// Проверяем статус ответа
|
|
if resp.StatusCode != http.StatusOK {
|
|
log.Printf("Ошибка при регистрации: %v", resp.StatusCode)
|
|
http.Error(w, "Ошибка при регистрации", resp.StatusCode)
|
|
return
|
|
}
|
|
|
|
// Перенаправляем на страницу логина после успешной регистрации
|
|
http.Redirect(w, r, "/login", http.StatusSeeOther)
|
|
}
|
|
}
|