package controllers import ( "api/database" "api/models" "api/utils" "log" "os" "strconv" "strings" "time" "github.com/dgrijalva/jwt-go" "github.com/gofiber/fiber/v2" "golang.org/x/crypto/bcrypt" ) // Login - Login. Returns a JWT token on the response body func Login(c *fiber.Ctx) error { var data map[string]string if err := c.BodyParser(&data); err != nil { log.Printf("Bad Request on parse: %v\n", err) return fiber.ErrBadRequest } var user models.User database.DB.Where("email = ?", data["email"]).First(&user) if user.ID == 0 { return c.JSON(fiber.Map{ "message": "Usuário não encontrado", "userId": 0, "userType": "", "userName": "", "token": ""}) } if err := bcrypt.CompareHashAndPassword(user.Password, []byte(data["password"])); err != nil { return c.JSON(fiber.Map{ "message": "Senha inválida", "userId": 0, "userType": "", "userName": "", "token": ""}) } if user.Blocked == "S" { return c.JSON(fiber.Map{ "message": "Usuário bloqueado", "userId": 0, "userType": "", "userName": "", "token": ""}) } 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 { return fiber.ErrInternalServerError } return c.JSON(fiber.Map{ "message": "", "userId": user.ID, "userType": user.UserType, "userName": user.Name, "token": token}) } // Register/AdUser - Adds or register a user to the database func AddUser(c *fiber.Ctx) error { var data map[string]string if err := c.BodyParser(&data); err != nil { return c.JSON(fiber.Map{ "message": "Dados inválidos"}) } if data["name"] == "" || data["email"] == "" || data["url"] == "" || data["cpfcnpj"] == "" || data["password"] == "" || data["channel"] == "" || data["usertype"] == "" || data["companyname"] == "" { return c.JSON(fiber.Map{ "message": "Dados inválidos"}) } passwd, _ := utils.HashPassword(data["password"]) var user models.User database.DB.Where("email = ?", data["email"]).First(&user) if user.ID != 0 { return c.JSON(fiber.Map{ "message": "Usuário já cadastrado"}) } database.DB.Where("channel = ?", strings.ToLower(data["channel"])).First(&user) if user.ID != 0 { return c.JSON(fiber.Map{ "message": "Canal já em uso"}) } user = models.User{ Name: data["name"], Email: data["email"], CompanyName: data["companyname"], Url: data["url"], Password: passwd, Channel: strings.ToLower(data["channel"]), CpfCnpj: data["cpfcnpj"], UserType: data["usertype"], Blocked: "N", Cancelled: "N", CreatedBy: data["createdby"], } database.DB.Create(&user) if user.ID == 0 { return c.JSON(fiber.Map{ "message": "Erro ao criar usuário"}) } return c.JSON(user) } // GetOwnUser - Returns the current user func GetOwnUser(c *fiber.Ctx) error { var user models.User userCode, err := utils.ProcessToken(c) if err != nil { return fiber.ErrUnauthorized } database.DB.Where("id = ?", userCode).First(&user) if user.ID == 0 { return fiber.ErrUnauthorized } return c.JSON(fiber.Map{ "user": user, }) } // GetAllUsers - Returns all users func GetAllUsers(c *fiber.Ctx) error { var users []models.User _, err := utils.ProcessToken(c) if err != nil { return fiber.ErrUnauthorized } database.DB.Find(&users) if len(users) == 0 { return fiber.ErrNotFound } return c.JSON(users) } func WixIntegration(c *fiber.Ctx) error { var data map[string]interface{} if err := c.BodyParser(&data); err != nil { return fiber.ErrBadRequest } log.Printf("====================> Data from WIX: %v\n", data) utils.PrettyPrintJson(data) return c.JSON(data) }