From 518942bcec63269adc84adfac48d178e0294e9e5 Mon Sep 17 00:00:00 2001 From: ParkSuMin Date: Wed, 29 Jan 2025 09:23:43 +0100 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20not=5Fsorted/register.go?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- not_sorted/register.go | 75 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 not_sorted/register.go diff --git a/not_sorted/register.go b/not_sorted/register.go new file mode 100644 index 00000000..f8ffd2bc --- /dev/null +++ b/not_sorted/register.go @@ -0,0 +1,75 @@ +package main + +import ( + "fmt" + "log" + db "market/database" + "golang.org/x/crypto/bcrypt" + "github.com/gofiber/fiber/v2" +) + +// Data структура для входящих данных +type Data struct { + ID int `json:"ID"` + Count int `json:"Count"` +} + +type Account struct { + Login string `json:"Login"` + Password string `json:"Password"` +} + +func HashPassword(password string) (string) { + // Генерация хэша с заданным уровнем сложности (по умолчанию 10) + hash, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost) + if err != nil { + return "" + } + return string(hash) +} + +// CheckPassword сравнивает хэшированный пароль с обычным +func CheckPassword(hashedPassword, plainPassword string) bool { + err := bcrypt.CompareHashAndPassword([]byte(hashedPassword), []byte(plainPassword)) + return err == nil +} + +func main() { + // Инициализация Fiber + app := fiber.New() + + // Маршрут для обработки POST-запроса + app.Post("/register", func(c *fiber.Ctx) error { + // var input []Data + var input Account + // Парсинг входящих данных + if err := c.BodyParser(&input); err != nil { + return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{ + "message": "err", + }) + } + + check_auth := fmt.Sprintf("SELECT ID, login WHERE login=%s", input.Login) + is_exist := db.Exec(check_auth) + if is_exist{ + pswd := HashPassword(input.Password) + formatted := fmt.Sprintf("INSERT INTO users (login, hash_password) VALUES (%s, %s)", input.Login, pswd) + err := db.Insert_Data(formatted) + if err == false { + log.Printf("Ошибка при вставке данных") + return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{ + "message": "err", + }) + } + } + + + return c.Status(fiber.StatusOK).JSON(fiber.Map{ + "message": "OK", + }) + }) + + // Запуск сервера + log.Fatal(app.Listen(":3000")) +} +18