| 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",
|
| })
|
| }
|