package controllers import ( "github.com/leanote/leanote/app/info" . "github.com/leanote/leanote/app/lea" "github.com/revel/revel" "strings" // "strconv" ) // 用户登录/注销/找回密码 type Auth struct { BaseController } //-------- // 登录 func (c Auth) Login(email, from string) revel.Result { c.ViewArgs["title"] = c.Message("login") c.ViewArgs["subTitle"] = c.Message("login") c.ViewArgs["email"] = email c.ViewArgs["from"] = from c.ViewArgs["openRegister"] = configService.IsOpenRegister() sessionId := c.Session.ID() if sessionService.LoginTimesIsOver(sessionId) { c.ViewArgs["needCaptcha"] = true } c.SetLocale() if c.Has("demo") { c.ViewArgs["demo"] = true c.ViewArgs["email"] = "demo@leanote.com" } return c.RenderTemplate("home/login.html") } // 为了demo和register func (c Auth) doLogin(email, pwd string) revel.Result { sessionId := c.Session.ID() var msg = "" userInfo, err := authService.Login(email, pwd) if err != nil { // 登录错误, 则错误次数++ msg = "wrongUsernameOrPassword" } else { c.SetSession(userInfo) sessionService.ClearLoginTimes(sessionId) return c.RenderJSON(info.Re{Ok: true}) } return c.RenderJSON(info.Re{Ok: false, Item: sessionService.LoginTimesIsOver(sessionId), Msg: c.Message(msg)}) } func (c Auth) DoLogin(email, pwd string, captcha string) revel.Result { sessionId := c.Session.ID() var msg = "" // > 5次需要验证码, 直到登录成功 if sessionService.LoginTimesIsOver(sessionId) && sessionService.GetCaptcha(sessionId) != captcha { msg = "captchaError" } else { userInfo, err := authService.Login(email, pwd) if err != nil { // 登录错误, 则错误次数++ msg = "wrongUsernameOrPassword" sessionService.IncrLoginTimes(sessionId) } else { c.SetSession(userInfo) sessionService.ClearLoginTimes(sessionId) return c.RenderJSON(info.Re{Ok: true}) } } return c.RenderJSON(info.Re{Ok: false, Item: sessionService.LoginTimesIsOver(sessionId), Msg: c.Message(msg)}) } // 注销 func (c Auth) Logout() revel.Result { sessionId := c.Session.ID() sessionService.Clear(sessionId) c.ClearSession() return c.Redirect("/login") } // 体验一下 func (c Auth) Demo() revel.Result { email := configService.GetGlobalStringConfig("demoUsername") pwd := configService.GetGlobalStringConfig("demoPassword") userInfo, err := authService.Login(email, pwd) if err != nil { return c.RenderJSON(info.Re{Ok: false}) } else { c.SetSession(userInfo) return c.Redirect("/note") } return nil } //-------- // 注册 func (c Auth) Register(from, iu string) revel.Result { if !configService.IsOpenRegister() { return c.Redirect("/index") } c.SetLocale() c.ViewArgs["from"] = from c.ViewArgs["iu"] = iu c.ViewArgs["title"] = c.Message("register") c.ViewArgs["subTitle"] = c.Message("register") return c.RenderTemplate("home/register.html") } func (c Auth) DoRegister(email, pwd, iu string) revel.Result { if !configService.IsOpenRegister() { return c.Redirect("/index") } re := info.NewRe() if re.Ok, re.Msg = Vd("email", email); !re.Ok { return c.RenderRe(re) } if re.Ok, re.Msg = Vd("password", pwd); !re.Ok { return c.RenderRe(re) } email = strings.ToLower(email) // 注册 re.Ok, re.Msg = authService.Register(email, pwd, iu) // 注册成功, 则立即登录之 if re.Ok { c.doLogin(email, pwd) } return c.RenderRe(re) } //-------- // 找回密码 func (c Auth) FindPassword() revel.Result { c.SetLocale() c.ViewArgs["title"] = c.Message("findPassword") c.ViewArgs["subTitle"] = c.Message("findPassword") return c.RenderTemplate("home/find_password.html") } func (c Auth) DoFindPassword(email string) revel.Result { pwdService.FindPwd(email) re := info.NewRe() re.Ok = true return c.RenderJSON(re) } // 点击链接后, 先验证之 func (c Auth) FindPassword2(token string) revel.Result { c.SetLocale() c.ViewArgs["title"] = c.Message("findPassword") c.ViewArgs["subTitle"] = c.Message("findPassword") if token == "" { return c.RenderTemplate("find_password2_timeout.html") } ok, _, findPwd := tokenService.VerifyToken(token, info.TokenPwd) if !ok { return c.RenderTemplate("home/find_password2_timeout.html") } c.ViewArgs["findPwd"] = findPwd c.ViewArgs["title"] = c.Message("updatePassword") c.ViewArgs["subTitle"] = c.Message("updatePassword") return c.RenderTemplate("home/find_password2.html") } // 找回密码修改密码 func (c Auth) FindPasswordUpdate(token, pwd string) revel.Result { re := info.NewRe() if re.Ok, re.Msg = Vd("password", pwd); !re.Ok { return c.RenderRe(re) } // 修改之 re.Ok, re.Msg = pwdService.UpdatePwd(token, pwd) return c.RenderRe(re) }