mirror of
https://github.com/songquanpeng/message-pusher.git
synced 2025-11-01 03:52:43 +08:00
fix: check input for user model
This commit is contained in:
@@ -105,7 +105,14 @@ func GitHubOAuth(c *gin.Context) {
|
|||||||
GitHubId: githubUser.Login,
|
GitHubId: githubUser.Login,
|
||||||
}
|
}
|
||||||
if model.IsGitHubIdAlreadyTaken(user.GitHubId) {
|
if model.IsGitHubIdAlreadyTaken(user.GitHubId) {
|
||||||
user.FillUserByGitHubId()
|
err := user.FillUserByGitHubId()
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusOK, gin.H{
|
||||||
|
"success": false,
|
||||||
|
"message": err.Error(),
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if common.RegisterEnabled {
|
if common.RegisterEnabled {
|
||||||
user.Username = "github_" + strconv.Itoa(model.GetMaxUserId()+1)
|
user.Username = "github_" + strconv.Itoa(model.GetMaxUserId()+1)
|
||||||
@@ -171,7 +178,14 @@ func GitHubBind(c *gin.Context) {
|
|||||||
id := session.Get("id")
|
id := session.Get("id")
|
||||||
// id := c.GetInt("id") // critical bug!
|
// id := c.GetInt("id") // critical bug!
|
||||||
user.Id = id.(int)
|
user.Id = id.(int)
|
||||||
user.FillUserById()
|
err = user.FillUserById()
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusOK, gin.H{
|
||||||
|
"success": false,
|
||||||
|
"message": err.Error(),
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
user.GitHubId = githubUser.Login
|
user.GitHubId = githubUser.Login
|
||||||
err = user.Update(false)
|
err = user.Update(false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -44,7 +44,14 @@ func PostPushMessage(c *gin.Context) {
|
|||||||
|
|
||||||
func pushMessageHelper(c *gin.Context, message *channel.Message) {
|
func pushMessageHelper(c *gin.Context, message *channel.Message) {
|
||||||
user := model.User{Username: c.Param("username")}
|
user := model.User{Username: c.Param("username")}
|
||||||
user.FillUserByUsername()
|
err := user.FillUserByUsername()
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusForbidden, gin.H{
|
||||||
|
"success": false,
|
||||||
|
"message": err.Error(),
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
if user.Status == common.UserStatusNonExisted {
|
if user.Status == common.UserStatusNonExisted {
|
||||||
c.JSON(http.StatusForbidden, gin.H{
|
c.JSON(http.StatusForbidden, gin.H{
|
||||||
"success": false,
|
"success": false,
|
||||||
@@ -87,7 +94,7 @@ func pushMessageHelper(c *gin.Context, message *channel.Message) {
|
|||||||
message.Channel = channel.TypeEmail
|
message.Channel = channel.TypeEmail
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
err := message.Send(&user)
|
err = message.Send(&user)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(http.StatusOK, gin.H{
|
c.JSON(http.StatusOK, gin.H{
|
||||||
"success": false,
|
"success": false,
|
||||||
|
|||||||
@@ -478,9 +478,16 @@ func DeleteUser(c *gin.Context) {
|
|||||||
func DeleteSelf(c *gin.Context) {
|
func DeleteSelf(c *gin.Context) {
|
||||||
id := c.GetInt("id")
|
id := c.GetInt("id")
|
||||||
user := model.User{Id: id}
|
user := model.User{Id: id}
|
||||||
user.FillUserById()
|
err := user.FillUserById()
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusOK, gin.H{
|
||||||
|
"success": false,
|
||||||
|
"message": err.Error(),
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
channel.TokenStoreRemoveUser(&user)
|
channel.TokenStoreRemoveUser(&user)
|
||||||
err := model.DeleteUserById(id)
|
err = model.DeleteUserById(id)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(http.StatusOK, gin.H{
|
c.JSON(http.StatusOK, gin.H{
|
||||||
"success": false,
|
"success": false,
|
||||||
@@ -633,10 +640,17 @@ func EmailBind(c *gin.Context) {
|
|||||||
user := model.User{
|
user := model.User{
|
||||||
Id: id,
|
Id: id,
|
||||||
}
|
}
|
||||||
user.FillUserById()
|
err := user.FillUserById()
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusOK, gin.H{
|
||||||
|
"success": false,
|
||||||
|
"message": err.Error(),
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
user.Email = email
|
user.Email = email
|
||||||
// no need to check if this email already taken, because we have used verification code to check it
|
// no need to check if this email already taken, because we have used verification code to check it
|
||||||
err := user.Update(false)
|
err = user.Update(false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(http.StatusOK, gin.H{
|
c.JSON(http.StatusOK, gin.H{
|
||||||
"success": false,
|
"success": false,
|
||||||
|
|||||||
@@ -70,7 +70,14 @@ func WeChatAuth(c *gin.Context) {
|
|||||||
WeChatId: wechatId,
|
WeChatId: wechatId,
|
||||||
}
|
}
|
||||||
if model.IsWeChatIdAlreadyTaken(wechatId) {
|
if model.IsWeChatIdAlreadyTaken(wechatId) {
|
||||||
user.FillUserByWeChatId()
|
err := user.FillUserByWeChatId()
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusOK, gin.H{
|
||||||
|
"success": false,
|
||||||
|
"message": err.Error(),
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if common.RegisterEnabled {
|
if common.RegisterEnabled {
|
||||||
user.Username = "wechat_" + strconv.Itoa(model.GetMaxUserId()+1)
|
user.Username = "wechat_" + strconv.Itoa(model.GetMaxUserId()+1)
|
||||||
@@ -132,7 +139,14 @@ func WeChatBind(c *gin.Context) {
|
|||||||
user := model.User{
|
user := model.User{
|
||||||
Id: id,
|
Id: id,
|
||||||
}
|
}
|
||||||
user.FillUserById()
|
err = user.FillUserById()
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusOK, gin.H{
|
||||||
|
"success": false,
|
||||||
|
"message": err.Error(),
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
user.WeChatId = wechatId
|
user.WeChatId = wechatId
|
||||||
err = user.Update(false)
|
err = user.Update(false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -62,6 +62,9 @@ func SearchUsers(keyword string) (users []*User, err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func GetUserById(id int, selectAll bool) (*User, error) {
|
func GetUserById(id int, selectAll bool) (*User, error) {
|
||||||
|
if id == 0 {
|
||||||
|
return nil, errors.New("id 为空!")
|
||||||
|
}
|
||||||
user := User{Id: id}
|
user := User{Id: id}
|
||||||
var err error = nil
|
var err error = nil
|
||||||
if selectAll {
|
if selectAll {
|
||||||
@@ -78,6 +81,9 @@ func GetUserById(id int, selectAll bool) (*User, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func DeleteUserById(id int) (err error) {
|
func DeleteUserById(id int) (err error) {
|
||||||
|
if id == 0 {
|
||||||
|
return errors.New("id 为空!")
|
||||||
|
}
|
||||||
user := User{Id: id}
|
user := User{Id: id}
|
||||||
return user.Delete()
|
return user.Delete()
|
||||||
}
|
}
|
||||||
@@ -107,6 +113,9 @@ func (user *User) Update(updatePassword bool) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (user *User) Delete() error {
|
func (user *User) Delete() error {
|
||||||
|
if user.Id == 0 {
|
||||||
|
return errors.New("id 为空!")
|
||||||
|
}
|
||||||
err := DB.Delete(user).Error
|
err := DB.Delete(user).Error
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -117,8 +126,8 @@ func (user *User) ValidateAndFill() (err error) {
|
|||||||
// that means if your field’s value is 0, '', false or other zero values,
|
// that means if your field’s value is 0, '', false or other zero values,
|
||||||
// it won’t be used to build query conditions
|
// it won’t be used to build query conditions
|
||||||
password := user.Password
|
password := user.Password
|
||||||
if password == "" {
|
if user.Username == "" || password == "" {
|
||||||
return errors.New("密码为空")
|
return errors.New("用户名或密码为空")
|
||||||
}
|
}
|
||||||
DB.Where(User{Username: user.Username}).First(user)
|
DB.Where(User{Username: user.Username}).First(user)
|
||||||
okay := common.ValidatePasswordAndHash(password, user.Password)
|
okay := common.ValidatePasswordAndHash(password, user.Password)
|
||||||
@@ -128,24 +137,44 @@ func (user *User) ValidateAndFill() (err error) {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (user *User) FillUserById() {
|
func (user *User) FillUserById() error {
|
||||||
|
if user.Id == 0 {
|
||||||
|
return errors.New("id 为空!")
|
||||||
|
}
|
||||||
DB.Where(User{Id: user.Id}).First(user)
|
DB.Where(User{Id: user.Id}).First(user)
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (user *User) FillUserByEmail() {
|
func (user *User) FillUserByEmail() error {
|
||||||
|
if user.Email == "" {
|
||||||
|
return errors.New("email 为空!")
|
||||||
|
}
|
||||||
DB.Where(User{Email: user.Email}).First(user)
|
DB.Where(User{Email: user.Email}).First(user)
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (user *User) FillUserByGitHubId() {
|
func (user *User) FillUserByGitHubId() error {
|
||||||
|
if user.GitHubId == "" {
|
||||||
|
return errors.New("GitHub id 为空!")
|
||||||
|
}
|
||||||
DB.Where(User{GitHubId: user.GitHubId}).First(user)
|
DB.Where(User{GitHubId: user.GitHubId}).First(user)
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (user *User) FillUserByWeChatId() {
|
func (user *User) FillUserByWeChatId() error {
|
||||||
|
if user.WeChatId == "" {
|
||||||
|
return errors.New("WeChat id 为空!")
|
||||||
|
}
|
||||||
DB.Where(User{WeChatId: user.WeChatId}).First(user)
|
DB.Where(User{WeChatId: user.WeChatId}).First(user)
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (user *User) FillUserByUsername() {
|
func (user *User) FillUserByUsername() error {
|
||||||
|
if user.Username == "" {
|
||||||
|
return errors.New("username 为空!")
|
||||||
|
}
|
||||||
DB.Where(User{Username: user.Username}).First(user)
|
DB.Where(User{Username: user.Username}).First(user)
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func ValidateUserToken(token string) (user *User) {
|
func ValidateUserToken(token string) (user *User) {
|
||||||
@@ -177,6 +206,9 @@ func IsUsernameAlreadyTaken(username string) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func ResetUserPasswordByEmail(email string, password string) error {
|
func ResetUserPasswordByEmail(email string, password string) error {
|
||||||
|
if email == "" || password == "" {
|
||||||
|
return errors.New("邮箱地址或密码为空!")
|
||||||
|
}
|
||||||
hashedPassword, err := common.Password2Hash(password)
|
hashedPassword, err := common.Password2Hash(password)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|||||||
Reference in New Issue
Block a user