apifiber/controllers/userController.go

91 lines
1.5 KiB
Go

package controllers
import (
"api/globals"
"api/models"
"api/services"
"fmt"
"github.com/gofiber/fiber/v2"
)
func GetUsers(c *fiber.Ctx) error {
var users []models.SystemUser
globals.DB.Find(&users)
return c.JSON(users)
}
func GetGroups(c *fiber.Ctx) error {
var groups []models.SystemGroup
globals.DB.Find(&groups)
return c.JSON(groups)
}
func CreateUser(c *fiber.Ctx) error {
var body map[string]interface{}
if err := c.BodyParser(&body); err != nil {
return fiber.ErrBadRequest
}
email := body["email"].(string)
user := services.GetUserByEmail(email)
if user.ID == 0 {
fmt.Println("inexistent user")
}
return c.JSON(user)
}
func Login(c *fiber.Ctx) error {
var body map[string]interface{}
var channel models.Channel
var channels []models.Channel
if err := c.BodyParser(&body); err != nil {
return fiber.ErrBadRequest
}
channelname := body["channel"].(string)
password := body["password"].(string)
result := globals.DB.Where("name LIKE ?", channelname+"%").Find(&channels)
if result.RowsAffected == 0 {
return fiber.ErrNotFound
}
matchFound := false
for _, ch := range channels {
if ch.TransmissionKey == password {
channel = ch
matchFound = true
break
}
}
if !matchFound {
return fiber.ErrUnauthorized
}
customer := models.Customer{}
globals.DB.First(&customer, channel.CustomerID)
token, err := services.GenerateJWT(channel)
if err != nil {
return fiber.ErrInternalServerError
}
return c.JSON(fiber.Map{
"token": token,
"customer": customer,
})
}