pocketbase-signer/handlers/register.go

95 lines
2.9 KiB
Go

package handlers
import (
"bytes"
"encoding/json"
"log"
"net/http"
"pocketbaseSigner/config"
"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 := config.PocketBaseURL + "/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)
}
}