Начало разработки: Добавлена форма регистрации

This commit is contained in:
Alexander 2025-04-23 18:11:19 +03:00
parent 00674234ec
commit 92176c6994
5 changed files with 90 additions and 56 deletions

View File

@ -1,7 +1,43 @@
# pocketbase-signer
# Pocketbase Signer 📜✨
## О проекте 🚧
Этот проект находится **в стадии разработки** 🛠️. Он предназначен для хранения сертификатов пользователей, чтобы они могли подписывать документы 🖋️📄.
## Как начать 🏁
1. **Склонируйте репозиторий** и перейдите в основную папку `pocketbase-signer`:
bash
git clone <repository-url>
cd pocketbase-signer
2. **Запустите сервер Pocketbase** на порту `:8090` 🚀:
bash
go run cmd/server/main.go serve
3. **Запустите клиент** для взаимодействия с сервером на порту `:8080` 🌐:
bash
go run cmd/client/main.go
## Текущие возможности ✅
- Клиент поддерживает форму регистрации, которая отправляет данные на сервер и сохраняет их 📝.
- Протестировать можно по ссылке: [http://localhost:8080/register](http://localhost:8080/register) 🔗
## Что дальше? 🔮
Продолжаем работать над функционалом для управления сертификатами и подписывания документов! 💪
---
*Создано с ❤️ для безопасного подписывания документов.*
``` ```
админская панель: - админская панель на сервере [http://localhost:8090/_/](http://localhost:8090/_/) 🔗
login:"admin@admin.ru login:"admin@admin.ru
password:"0123456789" password:"0123456789"
``` ```

View File

@ -5,17 +5,10 @@ import (
"log" "log"
"net/http" "net/http"
"pocketbaseSigner/models" "pocketbaseSigner/models"
"encoding/json" "bytes"
"bytes" "encoding/json"
"io/ioutil"
) )
type UserResponse struct {
ID string `json:"id"`
Email string `json:"email"`
FirstName string `json:"first_name"`
LastName string `json:"last_name"`
}
func RegisterFormHandler(w http.ResponseWriter, r *http.Request) { func RegisterFormHandler(w http.ResponseWriter, r *http.Request) {
if r.Method == http.MethodGet { if r.Method == http.MethodGet {
@ -31,63 +24,68 @@ func RegisterFormHandler(w http.ResponseWriter, r *http.Request) {
} }
user := models.UserForm{ user := models.UserForm{
LastName: r.FormValue("lastname"),
FirstName: r.FormValue("firstname"),
Phone: r.FormValue("phone"),
Email: r.FormValue("email"), Email: r.FormValue("email"),
Password: r.FormValue("password"), Password: r.FormValue("password"),
Password_confirm: r.FormValue("password_confirm"), PasswordConfirm: r.FormValue("password_confirm"),
FirstName: r.FormValue("firstname"),
LastName: r.FormValue("lastname"),
Phone: r.FormValue("phone"),
} }
// нужно для маршалинга потому что переменные с маленькой буквы потеряются
// если все переменные делать с большой буквы, то pocketbase не примет
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 r.FormValue("password") != r.FormValue("password_confirm") {
http.Error(w, "Пароли не совпали", http.StatusBadRequest)
return
}
// Проверка // Проверка
if user.Email == "" || user.Password == "" { if user.Email == "" || user.Password == "" {
http.Error(w, "Email и пароль обязательны!", http.StatusBadRequest) http.Error(w, "Email и пароль обязательны!", http.StatusBadRequest)
return return
} }
if user.Password != user.Password_confirm {
http.Error(w, "Пароли не совпали", http.StatusBadRequest) log.Printf("Получен пользователь: %+v\n", user)
fmt.Println(json.Marshal(user))
fmt.Println()
if err != nil {
fmt.Println(err)
return return
} }
log.Printf("Получен пользователь: %+v\n", user)
url:= "http://localhost:8090/api/collections/users/records" url:= "http://localhost:8090/api/collections/users/records"
fmt.Println(bytes.NewBuffer(data))
req, err := http.NewRequest("POST", url, bytes.NewBuffer(data))
if err != nil {
fmt.Println(err)
return
}
jsonData, err := json.Marshal(user) fmt.Println(bytes.NewBuffer(data))
if err != nil { fmt.Println()
fmt.Println("Ошибка marshaling:", err)
return
}
resp, err := http.Post(url, "application/json", bytes.NewBuffer(jsonData)) req.Header.Set("Content-Type", "application/json")
if err != nil {
fmt.Println("Ошибка запроса:", err)
return
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body) fmt.Println(req)
if err != nil { client := &http.Client{}
fmt.Println("Ошибка чтения ответа:", err) resp, err := client.Do(req)
return if err != nil {
} fmt.Println(err)
return
}
defer resp.Body.Close()
// Проверка статуса http.Error(w, "Данные отправлены", http.StatusOK)
if resp.StatusCode != http.StatusOK { }
fmt.Printf("Ошибка: %d, %s\n", resp.StatusCode, string(body))
return
}
// Парсинг ответа
var userResponse UserResponse
if err := json.Unmarshal(body, &userResponse); err != nil {
fmt.Println("Ошибка парсинга ответа:", err)
return
}
fmt.Printf("Пользователь создан: ID=%s, Email=%s, Имя=%s\n",
userResponse.ID, userResponse.Email, userResponse.FirstName)
}
http.Error(w, "Метод не поддерживается", http.StatusMethodNotAllowed)
} }

View File

@ -1,12 +1,12 @@
package models package models
type UserForm struct { type UserForm struct {
LastName string
FirstName string
Email string Email string
Password string Password string
PasswordConfirm string
FirstName string
LastName string
Phone string Phone string
Password_confirm string
} }
type UserResponse struct { type UserResponse struct {

Binary file not shown.

Binary file not shown.