diff --git a/controllers/authController.go b/controllers/authController.go index 6385a59..3cdbcf0 100644 --- a/controllers/authController.go +++ b/controllers/authController.go @@ -1,148 +1,151 @@ -package controllers - -import ( - "api/database" - "api/models" - "api/utils" - "os" - "strconv" - "time" - - "github.com/dgrijalva/jwt-go" - "github.com/gofiber/fiber/v2" - "golang.org/x/crypto/bcrypt" -) - -func Version(c *fiber.Ctx) error { - return c.JSON(fiber.Map{ - "version": "1.0.1", - }) -} - -func Login(c *fiber.Ctx) error { - var data map[string]string - - if err := c.BodyParser(&data); err != nil { - return err - } - - var user models.User - - database.DB.Where("email = ?", data["email"]).First(&user) - - if user.Id == 0 { - c.Status(fiber.StatusNotFound) - return c.JSON(fiber.Map{ - "message": "User not found", - }) - } - - if err := bcrypt.CompareHashAndPassword(user.Password, []byte(data["password"])); err != nil { - c.Status(fiber.StatusBadRequest) - return c.JSON(fiber.Map{ - "message": "Incorrect password", - }) - } - - type customClaims struct { - Userid string `json:"user"` - jwt.StandardClaims - } - - tok := customClaims{ - Userid: strconv.Itoa(int(user.Id)), - StandardClaims: jwt.StandardClaims{ - Issuer: strconv.Itoa(int(user.Id)), - ExpiresAt: time.Now().Add(time.Hour * 1).Unix(), - }, - } - - claims := jwt.NewWithClaims(jwt.SigningMethodHS256, tok) - - token, err := claims.SignedString([]byte(os.Getenv("API_SECRET"))) - if err != nil { - c.Status(fiber.StatusInternalServerError) - return c.JSON(fiber.Map{ - "message": "Could't login", - }) - } - - return c.JSON(fiber.Map{ - "token": token}) -} - -func AddUser(c *fiber.Ctx) error { - var data map[string]string - - if err := c.BodyParser(&data); err != nil { - return err - } - - passwd, _ := utils.HashPassword(data["password"]) - - user := models.User{ - Name: data["name"], - Email: data["email"], - Password: passwd, - UserType: data["usertype"], - Blocked: "N", - Cancelled: "N", - CreatedBy: data["creator"], - } - - database.DB.Create(&user) - - if user.Id == 0 { - return c.SendStatus(fiber.StatusFound) - } - - c.SendStatus(fiber.StatusCreated) - return c.JSON(user) -} - -func GetOwnUser(c *fiber.Ctx) error { - - var user models.User - - userCode, err := utils.ProcessToken(c) - if err != nil { - c.Status(fiber.StatusBadRequest) - return c.JSON(fiber.Map{ - "message": "Invalid authorization", - }) - } - - database.DB.Where("id = ?", userCode).First(&user) - - if user.Id == 0 { - c.Status(fiber.StatusInternalServerError) - return c.JSON(fiber.Map{ - "message": "Invalid token when should be ok", - }) - } - - return c.JSON(user) -} - -func GetAllUsers(c *fiber.Ctx) error { - var users []models.User - - _, err := utils.ProcessToken(c) - if err != nil { - c.Status(fiber.StatusUnauthorized) - return c.JSON(fiber.Map{ - "message": "Unauthenticated", - }) - } - - database.DB.Find(&users) - - if len(users) == 0 { - c.Status(fiber.StatusUnauthorized) - return c.JSON(fiber.Map{ - "message": "Unauthenticated", - }) - } - - return c.JSON(users) -} +package controllers + +import ( + "api/database" + "api/models" + "api/utils" + "os" + "strconv" + "time" + + "github.com/dgrijalva/jwt-go" + "github.com/gofiber/fiber/v2" + "golang.org/x/crypto/bcrypt" +) + +func Version(c *fiber.Ctx) error { + return c.JSON(fiber.Map{ + "version": "1.0.2", + }) +} + +func Login(c *fiber.Ctx) error { + var data map[string]string + + if err := c.BodyParser(&data); err != nil { + return err + } + + var user models.User + + database.DB.Where("email = ?", data["email"]).First(&user) + + if user.Id == 0 { + c.Status(fiber.StatusNotFound) + return c.JSON(fiber.Map{ + "message": "Usuário não cadastrado", + }) + } + + if err := bcrypt.CompareHashAndPassword(user.Password, []byte(data["password"])); err != nil { + c.Status(fiber.StatusBadRequest) + return c.JSON(fiber.Map{ + "message": "Senha incorreta", + }) + } + + type customClaims struct { + Userid string `json:"user"` + jwt.StandardClaims + } + + tok := customClaims{ + Userid: strconv.Itoa(int(user.Id)), + StandardClaims: jwt.StandardClaims{ + Issuer: strconv.Itoa(int(user.Id)), + ExpiresAt: time.Now().Add(time.Hour * 1).Unix(), + }, + } + + claims := jwt.NewWithClaims(jwt.SigningMethodHS256, tok) + + token, err := claims.SignedString([]byte(os.Getenv("API_SECRET"))) + if err != nil { + c.Status(fiber.StatusInternalServerError) + return c.JSON(fiber.Map{ + "message": "(A1) - Erro na geração do token", + }) + } + + return c.JSON(fiber.Map{ + "token": token}) +} + +func AddUser(c *fiber.Ctx) error { + var data map[string]string + + if err := c.BodyParser(&data); err != nil { + return err + } + + passwd, _ := utils.HashPassword(data["password"]) + + user := models.User{ + Name: data["name"], + Email: data["email"], + Password: passwd, + UserType: data["usertype"], + Blocked: "N", + Cancelled: "N", + CreatedBy: data["creator"], + } + + database.DB.Create(&user) + + if user.Id == 0 { + c.SendStatus(fiber.StatusFound) + return c.JSON(fiber.Map{ + "message": "Usuário já cadastrado", + }) + } + + c.SendStatus(fiber.StatusCreated) + return c.JSON(user) +} + +func GetOwnUser(c *fiber.Ctx) error { + + var user models.User + + userCode, err := utils.ProcessToken(c) + if err != nil { + c.Status(fiber.StatusBadRequest) + return c.JSON(fiber.Map{ + "message": "Autorização inválida", + }) + } + + database.DB.Where("id = ?", userCode).First(&user) + + if user.Id == 0 { + c.Status(fiber.StatusInternalServerError) + return c.JSON(fiber.Map{ + "message": "(A2) - Autorização inválida", + }) + } + + return c.JSON(user) +} + +func GetAllUsers(c *fiber.Ctx) error { + var users []models.User + + _, err := utils.ProcessToken(c) + if err != nil { + c.Status(fiber.StatusUnauthorized) + return c.JSON(fiber.Map{ + "message": "Sem autorização", + }) + } + + database.DB.Find(&users) + + if len(users) == 0 { + c.Status(fiber.StatusUnauthorized) + return c.JSON(fiber.Map{ + "message": "Sem autorização", + }) + } + + return c.JSON(users) +} diff --git a/controllers/eventController.go b/controllers/eventController.go index fc0b45b..cf3e512 100644 --- a/controllers/eventController.go +++ b/controllers/eventController.go @@ -1,99 +1,99 @@ -package controllers - -import ( - "api/database" - "api/dbaccess" - "api/models" - "api/utils" - "strconv" - "time" - - "github.com/gofiber/fiber/v2" -) - -func AddEvent(c *fiber.Ctx) error { - var data map[string]string - var audience int - var startdt time.Time - - _, err := utils.ProcessToken(c) - if err != nil { - c.Status(fiber.StatusBadRequest) - return c.JSON(fiber.Map{ - "message": "Invalid authorization", - }) - } - - if err := c.BodyParser(&data); err != nil { - return err - } - - u, err := strconv.Atoi(data["user"]) - if err != nil { - c.Status(fiber.StatusBadRequest) - return c.JSON(fiber.Map{ - "message": "Invalid value for Event Owner", - }) - } - - user := dbaccess.GetUserById(u) - - if user.Id == 0 { - c.Status(fiber.StatusBadRequest) - return c.JSON(fiber.Map{ - "message": "Event Owner not found", - }) - } - - if data["audience"] == "" { - c.Status(fiber.StatusBadRequest) - return c.JSON(fiber.Map{ - "message": "Audience not defined", - }) - } else { - audience, err = strconv.Atoi(data["audience"]) - if err != nil { - c.Status(fiber.StatusBadRequest) - return c.JSON(fiber.Map{ - "message": "Invalid value for audience", - }) - } - } - - dateformat := "02/01/2006 15:04" - if data["startDt"] == "" { - c.Status(fiber.StatusBadRequest) - return c.JSON(fiber.Map{ - "message": "Start date not defined", - }) - } else { - startdt, err = time.Parse(dateformat, data["startDt"]) - if err != nil { - c.Status(fiber.StatusBadRequest) - return c.JSON(fiber.Map{ - "message": "Invalid value for start date", - }) - } - } - - event := models.Event{ - Name: data["name"], - UserId: user.Id, - User: user, - ExpectedAudience: audience, - ExpectedDate: startdt, - EventType: data["eventtype"], - } - - database.DB.Create(&event) - - if event.Id == 0 { - c.Status(fiber.StatusBadRequest) - return c.JSON(fiber.Map{ - "message": "Cannot create event", - }) - } - - c.SendStatus(fiber.StatusCreated) - return c.JSON(event) -} +package controllers + +import ( + "api/database" + "api/dbaccess" + "api/models" + "api/utils" + "strconv" + "time" + + "github.com/gofiber/fiber/v2" +) + +func AddEvent(c *fiber.Ctx) error { + var data map[string]string + var audience int + var startdt time.Time + + _, err := utils.ProcessToken(c) + if err != nil { + c.Status(fiber.StatusBadRequest) + return c.JSON(fiber.Map{ + "message": "Sem autorização", + }) + } + + if err := c.BodyParser(&data); err != nil { + return err + } + + u, err := strconv.Atoi(data["user"]) + if err != nil { + c.Status(fiber.StatusBadRequest) + return c.JSON(fiber.Map{ + "message": "Requisição inválida (usuário não informado)", + }) + } + + user := dbaccess.GetUserById(u) + + if user.Id == 0 { + c.Status(fiber.StatusBadRequest) + return c.JSON(fiber.Map{ + "message": "Requisição inválida (usuário inexistente)", + }) + } + + if data["audience"] == "" { + c.Status(fiber.StatusBadRequest) + return c.JSON(fiber.Map{ + "message": "Audience not defined", + }) + } else { + audience, err = strconv.Atoi(data["audience"]) + if err != nil { + c.Status(fiber.StatusBadRequest) + return c.JSON(fiber.Map{ + "message": "Invalid value for audience", + }) + } + } + + dateformat := "02/01/2006 15:04" + if data["startDt"] == "" { + c.Status(fiber.StatusBadRequest) + return c.JSON(fiber.Map{ + "message": "Requisição inválida (sem data)", + }) + } else { + startdt, err = time.Parse(dateformat, data["startDt"]) + if err != nil { + c.Status(fiber.StatusBadRequest) + return c.JSON(fiber.Map{ + "message": "Requisição inválida (data inválida)", + }) + } + } + + event := models.Event{ + Name: data["name"], + UserId: user.Id, + User: user, + ExpectedAudience: audience, + ExpectedDate: startdt, + EventType: data["eventtype"], + } + + database.DB.Create(&event) + + if event.Id == 0 { + c.Status(fiber.StatusBadRequest) + return c.JSON(fiber.Map{ + "message": "(E1) - Não foi possível criar o evento", + }) + } + + c.SendStatus(fiber.StatusCreated) + return c.JSON(event) +}