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