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

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
password:"0123456789"
```

View File

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

Binary file not shown.

Binary file not shown.