package controllers import ( "InfantrySkillCalculator/models" "InfantrySkillCalculator/utils" "github.com/gin-gonic/gin" "session" ) func CreateUser(username string, hashedPassword string, enabled bool, usedCode string) { user := models.User{Username: username, Password: hashedPassword, Enabled: enabled} var code models.ActivationCode var bf2042 models.Game if err := models.DB.Create(&user).Error; err != nil { utils.Logger.Fatalf("[USER] Error while creating user: %s", err.Error()) } if err := models.DB.Where("code = ?", usedCode).First(&code).Error; err != nil { utils.Logger.Fatalf("[USER] Error while getting activation code: %s", err.Error()) } code.UsedForUsername = username if err := models.DB.Save(&code).Error; err != nil { utils.Logger.Fatalf("[USER] Error while updating activation code: %s", err.Error()) } user.UserRole = code.UserRole if err := models.DB.Save(&user).Error; err != nil { utils.Logger.Fatalf("[USER] Error while updating user role: %s", err.Error()) } if err := models.DB.Where("tag = ?", "BF2042").First(&bf2042).Error; err != nil { utils.Logger.Fatalf("[USER] Error while getting game: %v", err) } userSettings := models.UserSettings{ Username: username, ActiveGameID: bf2042.ID, SquadColors: true, CalcMedian: false, UseCache: true, } if err := models.DB.Create(&userSettings).Error; err != nil { utils.Logger.Fatalf("[USER] Error while creating user settings: %s", err.Error()) } utils.Logger.Infof("[USER] Created user: %s", username) } func IsUserEnabled(username string) bool { var user models.User if err := models.DB.Where("username = ?", username).First(&user).Error; err != nil { utils.Logger.Fatalf("[USER] Error while getting user: %s", err.Error()) } return user.Enabled } func GetUserRole(username string) models.Role { var user models.User if err := models.DB.Where("username = ?", username).First(&user).Error; err != nil { utils.Logger.Fatalf("[USER] Error while getting user: %s", err.Error()) } return user.UserRole } func GetUserRoleByCtx(c *gin.Context) models.Role { username, ok := session.GetUsername(c) if !ok { return models.ReaderRole } return GetUserRole(username) } func IsUserAdmin(username string) bool { var user models.User if err := models.DB.Where("username = ?", username).First(&user).Error; err != nil { utils.Logger.Fatalf("[USER] Error while getting user: %s", err.Error()) } return user.UserRole == models.AdminRole }