78 lines
1.9 KiB
Go
78 lines
1.9 KiB
Go
package user
|
|
|
|
import (
|
|
"fmt"
|
|
"jannex/admin-dashboard-backend/modules/config"
|
|
"jannex/admin-dashboard-backend/modules/database"
|
|
"jannex/admin-dashboard-backend/modules/logger"
|
|
"jannex/admin-dashboard-backend/modules/structs"
|
|
"jannex/admin-dashboard-backend/modules/utils"
|
|
"jannex/admin-dashboard-backend/socketclients"
|
|
"os"
|
|
"strings"
|
|
|
|
"github.com/gofiber/fiber/v2"
|
|
"github.com/rs/zerolog/log"
|
|
"github.com/savsgio/gotils/uuid"
|
|
)
|
|
|
|
func UpdateAvatar(c *fiber.Ctx) error {
|
|
fileHeader, err := c.FormFile("file")
|
|
|
|
if err != nil {
|
|
log.Error().Msgf("User Avatar file error: %v", err)
|
|
return c.SendStatus(fiber.StatusBadRequest)
|
|
}
|
|
|
|
if fileHeader.Size > utils.MaxAvatarSize {
|
|
return c.SendStatus(fiber.StatusRequestEntityTooLarge)
|
|
}
|
|
|
|
if !isAvatarFileTypeInList(fileHeader.Header["Content-Type"][0]) {
|
|
return c.SendStatus(fiber.StatusUnprocessableEntity)
|
|
}
|
|
|
|
user := structs.User{Id: c.Locals("userId").(string)}
|
|
|
|
database.DB.First(&user)
|
|
|
|
if user.Avatar != "" {
|
|
os.Remove(config.Cfg.FolderPaths.PublicStatic + "avatars/" + user.Avatar)
|
|
}
|
|
|
|
fileName := uuid.V4() + "." + strings.Split(fileHeader.Header["Content-Type"][0], "/")[1]
|
|
|
|
database.DB.Model(&structs.User{}).Where("id = ?", user.Id).Updates(&structs.User{Avatar: fileName})
|
|
|
|
socketclients.BroadcastMessage(structs.SendSocketMessage{
|
|
Cmd: utils.SentCmdUpdateAllUsersUserAvatar,
|
|
Body: struct {
|
|
UserId string
|
|
Avatar string
|
|
}{
|
|
UserId: user.Id,
|
|
Avatar: fileName,
|
|
},
|
|
})
|
|
|
|
logger.AddSystemLog(structs.LogMessage{
|
|
Id: 21,
|
|
Type: utils.LogTypeInfo,
|
|
Messages: []structs.LogData{
|
|
{Type: "userId", Value: user.Id},
|
|
},
|
|
})
|
|
|
|
return c.SaveFile(fileHeader, fmt.Sprintf("%savatars/%s", config.Cfg.FolderPaths.PublicStatic, fileName))
|
|
}
|
|
|
|
func isAvatarFileTypeInList(contentType string) bool {
|
|
for _, aType := range utils.AcceptedAvatarFileTypes {
|
|
if aType == contentType {
|
|
return true
|
|
}
|
|
}
|
|
|
|
return false
|
|
}
|