Uses uuid to avoid easy inferral of user ids

This commit is contained in:
Dennis Schoepf 2024-04-28 20:21:56 +02:00
parent 800c839b53
commit 932edb8da7
5 changed files with 23 additions and 12 deletions

View file

@ -4,27 +4,36 @@ import (
"freed/internal/model"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/log"
"github.com/google/uuid"
)
var defaultUserError = fiber.NewError(fiber.ErrInternalServerError.Code, "Could not create user")
func (h *Handler) createUser(c *fiber.Ctx) error {
user := new(model.User)
if err := c.BodyParser(user); err != nil {
return err
userId, idErr := uuid.NewRandom()
if idErr != nil {
log.Warn(idErr)
return defaultUserError
}
result, err := h.db.Exec("INSERT INTO user (first_name, email) VALUES (?, ?)", user.FirstName, user.Email)
user.ID = userId.String()
if err != nil {
return err
if parseErr := c.BodyParser(user); parseErr != nil {
log.Warn(parseErr)
return defaultUserError
}
id, err := result.LastInsertId()
_, insertErr := h.db.Exec("INSERT INTO user (id, first_name, email) VALUES (?, ?, ?)", user.ID, user.FirstName, user.Email)
if err != nil {
return err
if insertErr != nil {
log.Warn(insertErr)
return defaultUserError
}
c.SendStatus(201)
return c.JSON(&fiber.Map{"userId": id})
return c.JSON(&fiber.Map{"userId": userId})
}

View file

@ -1,6 +1,6 @@
-- +migrate Up
CREATE table user (
id INTEGER PRIMARY KEY,
id text PRIMARY KEY,
first_name text NOT NULL,
email text NOT NULL
);

View file

@ -1,7 +1,7 @@
package model
type User struct {
ID uint32
ID string `json: id`
FirstName string `json: "firstName"`
Email string `json: "email"`
}