Files
BugBeGone/controllers/authController.go
T

118 lines
3.3 KiB
Go

package controllers
import (
"context"
"encoding/base64"
"time"
"github.com/SowinskiBraeden/BugBeGone/database"
"github.com/SowinskiBraeden/BugBeGone/models"
"github.com/SowinskiBraeden/gfbmb/messageBox"
"github.com/gofiber/fiber/v2"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
"go.mongodb.org/mongo-driver/mongo"
)
var userCollection *mongo.Collection = database.OpenCollection(database.Client, "users")
func toBase64(b []byte) string {
return base64.StdEncoding.EncodeToString(b)
}
func Register(c *fiber.Ctx) error {
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
firstname := c.FormValue("firstname")
lastname := c.FormValue("lastname")
username := c.FormValue("username")
email := c.FormValue("email")
password := c.FormValue("password")
if email == "" {
cancel()
return c.Status(fiber.StatusBadRequest).Render("register", fiber.Map{
"errorMsg": messageBox.NewWarningBox("Missing Email"),
"username": username,
"email": email,
})
}
if password == "" {
cancel()
return c.Status(fiber.StatusBadRequest).Render("register", fiber.Map{
"errorMsg": messageBox.NewWarningBox("Please enter your password"),
"username": username,
"email": email,
})
}
if username == "" {
cancel()
return c.Status(fiber.StatusBadRequest).Render("register", fiber.Map{
"errorMsg": messageBox.NewWarningBox("Missing Username"),
"username": username,
"email": email,
})
}
// Check if email or username is previously registered
count, err := userCollection.CountDocuments(ctx, bson.M{
"$or": []bson.M{
bson.M{"email": email},
bson.M{"username": username},
}},
)
if err != nil {
cancel()
return c.Status(fiber.StatusInternalServerError).Render("register", fiber.Map{
"errorMsg": messageBox.NewWarningBox("Failed to search database"),
"username": username,
"email": email,
})
}
if count > 0 {
cancel()
return c.Status(fiber.StatusInternalServerError).Render("register", fiber.Map{
"errorMsg": messageBox.NewWarningBox("An account already exists with that email or username"),
"username": username,
"email": email,
})
}
var user models.User
if user.CheckPasswordStrength(password) {
cancel()
return c.Status(fiber.StatusBadRequest).Render("register", fiber.Map{
"errorMsg": messageBox.NewWarningBox("Your password must contain at least 1 lowercase, 1 uppercase & 1 special character"),
"username": username,
"email": email,
})
}
user.Username = username
user.Firstname = firstname
user.Lastname = lastname
user.Email = email
user.Password = user.HashPassword(password)
user.TempPassword = false
user.ID = primitive.NewObjectID()
user.Created_at, _ = time.Parse(time.RFC3339, time.Now().Format(time.RFC3339))
user.Updated_at, _ = time.Parse(time.RFC3339, time.Now().Format(time.RFC3339))
_, insertErr := userCollection.InsertOne(ctx, user)
if insertErr != nil {
cancel()
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
"success": false,
"message": "the student could not be inserted",
"error": insertErr,
})
}
defer cancel()
return c.Status(fiber.StatusNotImplemented).JSON(fiber.Map{})
}
func Login(c *fiber.Ctx) error {
return c.Status(fiber.StatusNotImplemented).JSON(fiber.Map{})
}