github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/routers/root/RUpdateUser.go (about)

     1  package root
     2  
     3  import (
     4  	"errors"
     5  	"fmt"
     6  	"github.com/insionng/makross"
     7  	
     8  	"strconv"
     9  	"github.com/insionng/yougam/helper"
    10  	"github.com/insionng/yougam/models"
    11  )
    12  
    13  func GetRUpdateUserHandler(self *makross.Context) error {
    14  	
    15  
    16  	self.Set("catpage", "RUpdateUserHandler")
    17  	TplNames := "root/update_user"
    18  
    19  	if userid := self.Param("uid").MustInt64(); userid > 0 {
    20  		if usrinfo, err := models.GetUser(userid); err == nil && usrinfo != nil {
    21  			self.Set("usr", usrinfo)
    22  
    23  			// 匹配处理: /root/update/user/:uid/password/
    24  			if holder := self.Param("holder").String(); len(holder) > 0 && holder == "password" {
    25  				randomPassword := helper.StringNewRand(8)
    26  				usrinfo.Password = helper.EncryptHash(randomPassword, nil)
    27  				if row, err := models.PutUser(userid, usrinfo); err != nil || row <= 0 {
    28  					self.Flash.Error("用户信息更新到数据库时发生错误!")
    29  					return self.Redirect("/root/update/user/" + strconv.FormatInt(userid, 10) + "/")
    30  
    31  				} else {
    32  					body := "<html><body><div>"
    33  					body = body + "<p>亲爱的 <strong>" + usrinfo.Username + "</strong> ,您好:</p>"
    34  					body = body + `<p style="padding-left:2em;">` + helper.SiteName + `的管理员已为你重置了` + helper.SiteName + `的登录密码为:</p>`
    35  					body = body + `<p>[<b>` + randomPassword + `</b>]</p>`
    36  					body = body + "<p>我们将一如既往竭诚为您服务!</p>"
    37  					body = body + `<p style="border-bottom:dotted 1px gray;height:1px;"></p>`
    38  					body = body + "<p>" + helper.MailAdline + "</p>"
    39  					body = body + "</div></body></html>"
    40  
    41  					subject := "【" + helper.SiteName + "】重置密码"
    42  
    43  					//发送邮件
    44  					if err := helper.SendEmail(usrinfo.Email, subject, body, "html"); err != nil {
    45  						es := fmt.Sprintf("为用户【%s】发送随机密码到【%s】失败,请你稍后重新尝试.", usrinfo.Username, usrinfo.Email)
    46  						self.Flash.Error(es)
    47  						return errors.New(es)
    48  					} else {
    49  						self.Flash.Success(fmt.Sprintf("为用户【%s】生成随机密码并已成功发送到【%s】.", usrinfo.Username, usrinfo.Email))
    50  						return self.Redirect("/root/update/user/" + strconv.FormatInt(userid, 10) + "/")
    51  					}
    52  
    53  				}
    54  
    55  			}
    56  		}
    57  		return self.Render(TplNames)
    58  
    59  	} else {
    60  		return self.Redirect("/root/read/user/")
    61  	}
    62  
    63  }
    64  
    65  func PostRUpdateUserHandler(self *makross.Context) error {
    66  	
    67  
    68  	self.Set("catpage", "RUpdateUserHandler")
    69  
    70  	if userid := self.Param("uid").MustInt64(); userid > 0 {
    71  		username := self.FormValue("username")
    72  		nickname := self.FormValue("nickname")
    73  		password := self.FormValue("password")
    74  		repassword := self.FormValue("repassword")
    75  		content := self.FormValue("content")
    76  		mobile := self.FormValue("mobile")
    77  		email := self.FormValue("email")
    78  		group := self.FormValue("group")
    79  		gender := self.Args("gender").MustInt64()
    80  
    81  		if len(password) > 0 {
    82  			if helper.CheckPassword(password) == false {
    83  				self.Flash.Error("密码含有非法字符或密码过短(至少4~30位密码)!")
    84  				return self.Redirect("/root/update/user/" + strconv.FormatInt(userid, 10) + "/")
    85  
    86  			} else if password != repassword {
    87  
    88  				self.Flash.Error("密码前后不一致,请确认你输入的密码正确无误!")
    89  				return self.Redirect("/root/update/user/" + strconv.FormatInt(userid, 10) + "/")
    90  
    91  			}
    92  		} else {
    93  
    94  			self.Flash.Error("密码为空!")
    95  			return self.Redirect("/root/update/user/" + strconv.FormatInt(userid, 10) + "/")
    96  
    97  		}
    98  
    99  		if len(username) == 0 {
   100  			self.Flash.Error("用户名是为永久性设定,不能少于4个字或多于30个字,请慎重考虑,不能为空!")
   101  			return self.Redirect("/root/update/user/" + strconv.FormatInt(userid, 10) + "/")
   102  
   103  		}
   104  
   105  		if len(email) > 0 {
   106  			if helper.CheckEmail(email) == false {
   107  				self.Flash.Error("邮箱格式错误!")
   108  				return self.Redirect("/root/update/user/" + strconv.FormatInt(userid, 10) + "/")
   109  
   110  			}
   111  
   112  		} else {
   113  			if helper.CheckEmail(username) == true {
   114  				email = username
   115  			} else if helper.CheckUsername(username) == false {
   116  				self.Flash.Error("用户名是为永久性设定,不能少于4个字或多于30个字,请慎重考虑,不能为空!")
   117  				return self.Redirect("/root/update/user/" + strconv.FormatInt(userid, 10) + "/")
   118  
   119  			}
   120  
   121  		}
   122  
   123  		usr, _ := models.GetUser(userid)
   124  		//usr.Id = userid
   125  		usr.Email = email
   126  		usr.Username = username
   127  		usr.Nickname = nickname
   128  		usr.Password = helper.EncryptHash(password, nil)
   129  		usr.Group = group
   130  		usr.Content = content
   131  		usr.Mobile = mobile
   132  		usr.Gender = gender
   133  		//usr.Role = 1
   134  
   135  		if row, err := models.PutUser(userid, usr); err != nil || row <= 0 {
   136  			self.Flash.Error("用户注册信息写入数据库时发生错误!")
   137  			return self.Redirect("/root/update/user/" + strconv.FormatInt(userid, 10) + "/")
   138  
   139  		} else {
   140  
   141  			if usrinfo, err := models.GetUser(userid); err == nil && usrinfo != nil {
   142  				self.Set("usr", usrinfo)
   143  				self.Flash.Success("用户账号保存成功!")
   144  				return self.Redirect("/root/update/user/" + strconv.FormatInt(userid, 10) + "/")
   145  
   146  			} else {
   147  
   148  				self.Flash.Error("获取用户数据出错!")
   149  				return self.Redirect("/root/read/user/")
   150  
   151  			}
   152  
   153  		}
   154  	} else {
   155  
   156  		self.Flash.Error("用户不存在!")
   157  		return self.Redirect("/root/read/user/")
   158  	}
   159  }