func (w *Web) Register(c *fiber.Ctx) error { email := c.FormValue("email") password := c.FormValue("password") if email == "" || password == "" { return fiber.NewError(fiber.StatusBadRequest, "Request was missing email or password.") } _, err := mail.ParseAddress(email) if err != nil { return fiber.NewError(fiber.StatusBadRequest, "Invalid email address.") } if len(password) < 6 { return fiber.NewError(fiber.StatusBadRequest, "Password must be at least 6 characters long.") } user, err := w.database.GetUserByEmail(context.TODO(), email) if user != nil { return fiber.NewError(fiber.StatusConflict, "This email is already in use. Try logging in or use a different email address.") } user = &types.User{ Id: uuid.New(), Email: email, Password: w.passwordHash(password), } err = w.database.AddUser(context.TODO(), user) if err != nil { return fiber.NewError(fiber.StatusBadRequest, err.Error()) } token, err := w.generateToken(user.Id) if err != nil { return fiber.NewError(fiber.StatusUnauthorized, err.Error()) } return c.Status(fiber.StatusCreated).JSON(fiber.Map{ "access_token": token, "token_type": "Bearer", }) }