diff --git a/README.md b/README.md index cada9dc..5242253 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,43 @@ -# pocketbase-signer + + +# Pocketbase Signer 📜✨ + +## О проекте 🚧 +Этот проект находится **в стадии разработки** 🛠️. Он предназначен для хранения сертификатов пользователей, чтобы они могли подписывать документы 🖋️📄. + +## Как начать 🏁 +1. **Склонируйте репозиторий** и перейдите в основную папку `pocketbase-signer`: + +bash + git clone + 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" ``` \ No newline at end of file diff --git a/handlers/register.go b/handlers/register.go index 6bcd76d..1de3ab3 100644 --- a/handlers/register.go +++ b/handlers/register.go @@ -5,17 +5,10 @@ import ( "log" "net/http" "pocketbaseSigner/models" - "encoding/json" - "bytes" - "io/ioutil" + "bytes" + "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) + + log.Printf("Получен пользователь: %+v\n", user) + fmt.Println(json.Marshal(user)) + fmt.Println() + if err != nil { + fmt.Println(err) return } - log.Printf("Получен пользователь: %+v\n", user) - 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) - if err != nil { - fmt.Println("Ошибка marshaling:", err) - return - } + fmt.Println(bytes.NewBuffer(data)) + fmt.Println() - resp, err := http.Post(url, "application/json", bytes.NewBuffer(jsonData)) - if err != nil { - fmt.Println("Ошибка запроса:", err) - return - } - defer resp.Body.Close() + req.Header.Set("Content-Type", "application/json") - body, err := ioutil.ReadAll(resp.Body) - if err != nil { - fmt.Println("Ошибка чтения ответа:", err) - return - } + fmt.Println(req) + client := &http.Client{} + resp, err := client.Do(req) + if err != nil { + fmt.Println(err) + return + } + defer resp.Body.Close() - // Проверка статуса - 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) + http.Error(w, "Данные отправлены", http.StatusOK) } +} \ No newline at end of file diff --git a/models/user.go b/models/user.go index eb63192..c5216c1 100644 --- a/models/user.go +++ b/models/user.go @@ -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 { diff --git a/pb_data/auxiliary.db b/pb_data/auxiliary.db index 0f85266..7ddd33f 100644 Binary files a/pb_data/auxiliary.db and b/pb_data/auxiliary.db differ diff --git a/pb_data/data.db b/pb_data/data.db index 7fb0d89..6828647 100644 Binary files a/pb_data/data.db and b/pb_data/data.db differ