func (this *MainController) Reset() { this.activeContent("user/reset") flash := beego.NewFlash() u := this.Ctx.Input.Param(":uuid") o := orm.NewOrm() o.Using("default") user := models.AuthUser{Reset_key: u} err := o.Read(&user, "Reset_key") if err == nil { if this.Ctx.Input.Method() == "POST" { password := this.GetString("password") password2 := this.GetString("password2") valid := validation.Validation{} valid.MinSize(password, 6, "password") valid.Required(password2, "password2") if valid.HasErrors() { errormap := make(map[string]string) for _, err := range valid.Errors { errormap[err.Key] = err.Message } this.Data["Errors"] = errormap return } if password != password2 { flash.Error("Passwords don't match") flash.Store(&this.Controller) return } h := pk.HashPassword(password) // Convert password hash to string user.Password = hex.EncodeToString(h.Hash) + hex.EncodeToString(h.Salt) user.Reset_key = "" if _, err := o.Update(&user); err != nil { flash.Error("Internal error") flash.Store(&this.Controller) return } flash.Notice("Password updated.") flash.Store(&this.Controller) this.Redirect("/notice", 302) } } else { flash.Notice("Invalid key.") flash.Store(&this.Controller) this.Redirect("/notice", 302) } }
func (this *MainController) Forgot() { this.activeContent("user/forgot") if this.Ctx.Input.Method() == "POST" { email := this.GetString("email") valid := validation.Validation{} valid.Email(email, "email") if valid.HasErrors() { errormap := make(map[string]string) for _, err := range valid.Errors { errormap[err.Key] = err.Message } this.Data["Errors"] = errormap return } flash := beego.NewFlash() o := orm.NewOrm() o.Using("default") user := models.AuthUser{Email: email} err := o.Read(&user, "Email") if err != nil { flash.Error("No such user/email in our records") flash.Store(&this.Controller) return } u := uuid.NewV4() user.Reset_key = u.String() _, err = o.Update(&user) if err != nil { flash.Error("Internal error") flash.Store(&this.Controller) return } domainname := this.Data["domainname"] this.sendRequestReset(email, u.String(), domainname.(string)) flash.Notice("You've been sent a reset password link. You must check your email.") flash.Store(&this.Controller) this.Redirect("/notice", 302) } }