Начало разработки: Добавлена форма регистрации
This commit is contained in:
parent
00674234ec
commit
92176c6994
40
README.md
40
README.md
@ -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"
|
||||||
```
|
```
|
@ -5,17 +5,10 @@ import (
|
|||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
"pocketbaseSigner/models"
|
"pocketbaseSigner/models"
|
||||||
"encoding/json"
|
|
||||||
"bytes"
|
"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) {
|
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)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
log.Printf("Получен пользователь: %+v\n", user)
|
log.Printf("Получен пользователь: %+v\n", user)
|
||||||
|
fmt.Println(json.Marshal(user))
|
||||||
url:= "http://localhost:8090/api/collections/users/records"
|
fmt.Println()
|
||||||
|
|
||||||
jsonData, err := json.Marshal(user)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("Ошибка marshaling:", err)
|
fmt.Println(err)
|
||||||
return
|
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 {
|
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
|
return
|
||||||
}
|
}
|
||||||
defer resp.Body.Close()
|
defer resp.Body.Close()
|
||||||
|
|
||||||
body, err := ioutil.ReadAll(resp.Body)
|
http.Error(w, "Данные отправлены", http.StatusOK)
|
||||||
if err != nil {
|
|
||||||
fmt.Println("Ошибка чтения ответа:", err)
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Проверка статуса
|
|
||||||
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)
|
|
||||||
}
|
}
|
@ -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.
BIN
pb_data/data.db
BIN
pb_data/data.db
Binary file not shown.
Loading…
Reference in New Issue
Block a user