diff --git a/app/controllers/adminController/theme.go b/app/controllers/adminController/theme.go index 680921d..d84f87c 100644 --- a/app/controllers/adminController/theme.go +++ b/app/controllers/adminController/theme.go @@ -28,24 +28,11 @@ func CreateTheme(c *gin.Context) { Type: data.Type, ThemeConfig: data.ThemeConfig, } - themeID, err := themeServices.CreateTheme(record) + err = themeServices.CreateTheme(record) if err != nil { _ = c.AbortWithError(200, apiException.ServerError) return } - if data.Type == "all" { - studentIDs, err := themeServices.GetAllStudentIDs() - if err != nil { - _ = c.AbortWithError(200, apiException.ServerError) - return - } - - _, err = themeServices.AddThemePermission(themeID, studentIDs) - if err != nil { - _ = c.AbortWithError(200, apiException.ServerError) - return - } - } utils.JsonSuccessResponse(c, nil) } @@ -110,7 +97,13 @@ func DeleteTheme(c *gin.Context) { return } - err = themeServices.DeleteTheme(data.ID) + theme, err := themeServices.GetThemeByID(data.ID) + if err != nil { + _ = c.AbortWithError(200, apiException.ServerError) + return + } + + err = themeServices.DeleteTheme(data.ID, theme.Type) if err != nil { _ = c.AbortWithError(200, apiException.ServerError) return @@ -138,7 +131,13 @@ func AddThemePermission(c *gin.Context) { return } - invalidStudentIDs, err := themeServices.AddThemePermission(data.ThemeID, data.StudentID) + theme, err := themeServices.GetThemeByID(data.ThemeID) + if err != nil { + _ = c.AbortWithError(200, apiException.ServerError) + return + } + + invalidStudentIDs, err := themeServices.AddThemePermission(data.ThemeID, data.StudentID, theme.Type) if err != nil { _ = c.AbortWithError(200, apiException.ServerError) return diff --git a/app/controllers/userController/auth.go b/app/controllers/userController/auth.go index 9165da4..ac077f6 100644 --- a/app/controllers/userController/auth.go +++ b/app/controllers/userController/auth.go @@ -2,6 +2,7 @@ package userController import ( "wejh-go/app/apiException" + "wejh-go/app/models" "wejh-go/app/services/sessionServices" "wejh-go/app/services/userServices" "wejh-go/app/utils" @@ -12,23 +13,21 @@ import ( ) type autoLoginForm struct { - Code string `json:"code" binding:"required"` - LoginType string `json:"type"` + Code string `json:"code" binding:"required"` } type passwordLoginForm struct { - Username string `json:"username" binding:"required"` - Password string `json:"password" binding:"required"` - LoginType string `json:"type"` + Username string `json:"username" binding:"required"` + Password string `json:"password" binding:"required"` } func AuthByPassword(c *gin.Context) { var postForm passwordLoginForm err := c.ShouldBindJSON(&postForm) - if err != nil { _ = c.AbortWithError(200, apiException.ParamError) return } + user, err := userServices.GetUserByUsername(postForm.Username) if err == gorm.ErrRecordNotFound { _ = c.AbortWithError(200, apiException.UserNotFind) @@ -39,7 +38,11 @@ func AuthByPassword(c *gin.Context) { return } - err = userServices.CheckLogin(postForm.Username,postForm.Password) + if user.Type != models.Postgraduate && user.Type != models.Undergraduate { + err = userServices.CheckLocalLogin(user, postForm.Password) + } else { + err = userServices.CheckLogin(postForm.Username, postForm.Password) + } if err != nil { _ = c.AbortWithError(200, err) return diff --git a/app/services/themeServices/themePermissionService.go b/app/services/themeServices/themePermissionService.go index ce3d786..3c84816 100644 --- a/app/services/themeServices/themePermissionService.go +++ b/app/services/themeServices/themePermissionService.go @@ -4,14 +4,19 @@ import ( "encoding/json" "errors" "gorm.io/gorm" + "strconv" + "wejh-go/app/config" "wejh-go/app/models" "wejh-go/config/database" ) -func AddThemePermission(themeID int, reqStudentIDs []string) ([]string, error) { +func AddThemePermission(themeID int, reqStudentIDs []string, themeType string) ([]string, error) { + if themeType == "all" { + return nil, nil + } + var studentIDs []string var invalidStudentIDs []string - if len(reqStudentIDs) > 0 { var existingUsers []models.User err := database.DB.Select("student_id").Where("student_id IN ?", reqStudentIDs).Find(&existingUsers).Error @@ -32,14 +37,10 @@ func AddThemePermission(themeID int, reqStudentIDs []string) ([]string, error) { } } } else { - var users []models.User - err := database.DB.Select("student_id").Find(&users).Error - if err != nil { - return nil, err - } - for _, user := range users { - studentIDs = append(studentIDs, user.StudentID) - } + return nil, errors.New("reqStudentIDs is invalid") + } + if len(studentIDs) == 0 { + return invalidStudentIDs, nil } var permissions []models.ThemePermission @@ -107,6 +108,18 @@ func UpdateCurrentTheme(id int, studentID string) error { return err } + var allThemes []models.Theme + err = database.DB.Where("type = ?", "all").Find(&allThemes).Error + if err != nil { + return err + } + + for _, theme := range allThemes { + if !containThemeID(themePermissionData.ThemeIDs, theme.ID) { + themePermissionData.ThemeIDs = append(themePermissionData.ThemeIDs, theme.ID) + } + } + if !containThemeID(themePermissionData.ThemeIDs, id) { return errors.New("the theme ID is not in the user's permission list") } @@ -134,11 +147,25 @@ func GetThemeNameByID(themePermission models.ThemePermission) ([]string, error) if err != nil { return nil, err } + var themes []models.Theme err = database.DB.Where("id IN ?", themePermissionData.ThemeIDs).Find(&themes).Error if err != nil { return nil, err } + + var allThemes []models.Theme + err = database.DB.Where("type = ?", "all").Find(&allThemes).Error + if err != nil { + return nil, err + } + + for _, allTheme := range allThemes { + if !containThemeID(themePermissionData.ThemeIDs, allTheme.ID) { + themes = append(themes, allTheme) + } + } + var themeNames []string for _, theme := range themes { themeNames = append(themeNames, theme.Name) @@ -152,11 +179,25 @@ func GetThemesByID(themePermission models.ThemePermission) ([]models.Theme, erro if err != nil { return nil, err } + var themes []models.Theme err = database.DB.Where("id IN ?", themePermissionData.ThemeIDs).Find(&themes).Error if err != nil { return nil, err } + + var allThemes []models.Theme + err = database.DB.Where("type = ?", "all").Find(&allThemes).Error + if err != nil { + return nil, err + } + + for _, allTheme := range allThemes { + if !containThemeID(themePermissionData.ThemeIDs, allTheme.ID) { + themes = append(themes, allTheme) + } + } + return themes, nil } @@ -165,29 +206,32 @@ func AddDefaultThemePermission(studentID string) error { err := database.DB.Where("student_id = ?", studentID).First(&existingPermission).Error if err != nil { if err == gorm.ErrRecordNotFound { - var themes []models.Theme - err := database.DB.Where("type = ?", "all").Find(&themes).Error - if err != nil { - return err - } - if len(themes) == 0 { - return errors.New("no themes found with type 'all'") - } - - var themeIDs []int - for _, theme := range themes { - themeIDs = append(themeIDs, theme.ID) + themePermissionData := models.ThemePermissionData{ + ThemeIDs: []int{}, } - var themePermissionData models.ThemePermissionData - themePermissionData.ThemeIDs = themeIDs permission, err := json.Marshal(themePermissionData) if err != nil { return err } + var defaultThemeID int + defaultThemeIDStr := config.GetDefaultThemeKey() + if defaultThemeIDStr != "" { + defaultThemeID, err = strconv.Atoi(defaultThemeIDStr) + if err != nil { + return err + } + } else { + var theme models.Theme + if err := database.DB.Model(models.Theme{}).Where("type = ?", "all").First(&theme).Error; err != nil { + return err + } + defaultThemeID = theme.ID + } + newPermission := models.ThemePermission{ StudentID: studentID, - CurrentThemeID: themeIDs[0], + CurrentThemeID: defaultThemeID, ThemePermission: string(permission), } diff --git a/app/services/themeServices/themeService.go b/app/services/themeServices/themeService.go index 2a58c93..163829a 100644 --- a/app/services/themeServices/themeService.go +++ b/app/services/themeServices/themeService.go @@ -2,6 +2,8 @@ package themeServices import ( "encoding/json" + "strconv" + "wejh-go/app/config" "wejh-go/app/models" "wejh-go/config/database" ) @@ -12,9 +14,9 @@ func CheckThemeExist(id int) error { return result.Error } -func CreateTheme(record models.Theme) (int, error) { +func CreateTheme(record models.Theme) error { result := database.DB.Create(&record) - return record.ID, result.Error + return result.Error } func UpdateTheme(id int, record models.Theme) error { @@ -34,7 +36,7 @@ func GetThemes() ([]models.Theme, error) { return themes, result.Error } -func DeleteTheme(id int) error { +func DeleteTheme(id int, themeType string) error { tx := database.DB.Begin() if err := tx.Delete(&models.Theme{}, id).Error; err != nil { tx.Rollback() @@ -47,20 +49,36 @@ func DeleteTheme(id int) error { return err } - var permissions []models.ThemePermission - if err := tx.Where("current_theme_id = ?", id).Find(&permissions).Error; err != nil { - tx.Rollback() - return err + var defaultThemeID int + defaultThemeIDStr := config.GetDefaultThemeKey() + if defaultThemeIDStr != "" { + defaultThemeID, _ = strconv.Atoi(defaultThemeIDStr) + if id == defaultThemeID { + defaultThemeID = theme.ID + err := config.SetDefaultThemeKey(strconv.Itoa(defaultThemeID)) + if err != nil { + tx.Rollback() + return err + } + } + } else { + defaultThemeID = theme.ID } if err := tx.Model(&models.ThemePermission{}). Where("current_theme_id = ?", id). - Update("current_theme_id", theme.ID).Error; err != nil { + Update("current_theme_id", defaultThemeID).Error; err != nil { tx.Rollback() return err } - result := tx.Find(&permissions) + if themeType == "all" { + tx.Commit() + return nil + } + + var permissions []models.ThemePermission + result := tx.Model(models.ThemePermission{}).Find(&permissions) if result.Error != nil { tx.Rollback() return result.Error @@ -77,6 +95,9 @@ func DeleteTheme(id int) error { updatedThemeIDs := removeThemeID(themePermissionData.ThemeIDs, id) if len(updatedThemeIDs) != len(themePermissionData.ThemeIDs) { themePermissionData.ThemeIDs = updatedThemeIDs + if len(updatedThemeIDs) == 0 { + themePermissionData.ThemeIDs = []int{} + } updatedPermissionMap[permission.StudentID] = themePermissionData } } diff --git a/app/services/userServices/check.go b/app/services/userServices/check.go index ea5ff5a..fc41e18 100644 --- a/app/services/userServices/check.go +++ b/app/services/userServices/check.go @@ -1,17 +1,34 @@ package userServices +import ( + "crypto/sha256" + "encoding/hex" + "wejh-go/app/apiException" + "wejh-go/app/models" + "wejh-go/app/services/userCenterServices" +) + func CheckUsername(username string) bool { user, _ := GetUserByUsername(username) - if user != nil { - return true - } - return false + return user != nil } func CheckWechatOpenID(wechatOpenID string) bool { user := GetUserByWechatOpenID(wechatOpenID) - if user != nil { - return false + return user != nil +} + +func CheckLogin(username, password string) error { + return userCenterServices.Login(username, password) +} + +func CheckLocalLogin(user *models.User, password string) error { + h := sha256.New() + h.Write([]byte(password)) + pass := hex.EncodeToString(h.Sum(nil)) + + if user.JHPassword != pass { + return apiException.NoThatPasswordOrWrong } - return true + return nil } diff --git a/app/services/userServices/create.go b/app/services/userServices/create.go index 514699a..2147407 100755 --- a/app/services/userServices/create.go +++ b/app/services/userServices/create.go @@ -73,7 +73,3 @@ func CreateAdmin(userName, password string, adminType int) error { res := database.DB.Create(&admin) return res.Error } - -func CheckLogin(username, password string) error { - return userCenterServices.Login(username, password) -} \ No newline at end of file