2014-05-07 13:06:24 +08:00
|
|
|
package controllers
|
|
|
|
|
|
|
|
import (
|
|
|
|
"github.com/revel/revel"
|
|
|
|
"github.com/leanote/leanote/app/info"
|
|
|
|
. "github.com/leanote/leanote/app/lea"
|
2014-10-22 16:20:45 +08:00
|
|
|
// "strconv"
|
2014-05-07 13:06:24 +08:00
|
|
|
)
|
|
|
|
|
|
|
|
// 用户登录/注销/找回密码
|
|
|
|
|
|
|
|
type Auth struct {
|
|
|
|
BaseController
|
|
|
|
}
|
|
|
|
|
|
|
|
//--------
|
|
|
|
// 登录
|
2014-10-22 16:20:45 +08:00
|
|
|
func (c Auth) Login(email, from string) revel.Result {
|
2014-05-07 13:06:24 +08:00
|
|
|
c.RenderArgs["title"] = c.Message("login")
|
|
|
|
c.RenderArgs["subTitle"] = c.Message("login")
|
|
|
|
c.RenderArgs["email"] = email
|
2014-10-22 16:20:45 +08:00
|
|
|
c.RenderArgs["from"] = from
|
2014-10-23 10:03:19 +08:00
|
|
|
c.RenderArgs["openRegister"] = configService.IsOpenRegister()
|
2014-05-07 20:31:30 +08:00
|
|
|
|
2014-10-22 16:20:45 +08:00
|
|
|
sessionId := c.Session.Id()
|
|
|
|
if sessionService.LoginTimesIsOver(sessionId) {
|
|
|
|
c.RenderArgs["needCaptcha"] = true
|
|
|
|
}
|
|
|
|
|
|
|
|
c.SetLocale()
|
|
|
|
|
2014-05-07 13:06:24 +08:00
|
|
|
if c.Has("demo") {
|
|
|
|
c.RenderArgs["demo"] = true
|
|
|
|
c.RenderArgs["email"] = "demo@leanote.com"
|
|
|
|
}
|
|
|
|
return c.RenderTemplate("home/login.html")
|
|
|
|
}
|
2014-10-22 16:20:45 +08:00
|
|
|
|
|
|
|
// 为了demo和register
|
|
|
|
func (c Auth) doLogin(email, pwd string) revel.Result {
|
|
|
|
sessionId := c.Session.Id()
|
|
|
|
var msg = ""
|
2015-09-07 15:39:46 +08:00
|
|
|
|
2015-09-06 23:16:56 +08:00
|
|
|
userInfo, err := authService.Login(email, pwd)
|
|
|
|
if err != nil {
|
|
|
|
// 登录错误, 则错误次数++
|
|
|
|
msg = "wrongUsernameOrPassword"
|
|
|
|
} else {
|
2014-05-07 13:06:24 +08:00
|
|
|
c.SetSession(userInfo)
|
2014-10-22 16:20:45 +08:00
|
|
|
sessionService.ClearLoginTimes(sessionId)
|
2014-05-07 13:06:24 +08:00
|
|
|
return c.RenderJson(info.Re{Ok: true})
|
2015-09-06 23:16:56 +08:00
|
|
|
}
|
2014-10-22 16:20:45 +08:00
|
|
|
|
|
|
|
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 {
|
2015-09-06 23:16:56 +08:00
|
|
|
userInfo, err := authService.Login(email, pwd)
|
|
|
|
if err != nil {
|
2014-10-22 16:20:45 +08:00
|
|
|
// 登录错误, 则错误次数++
|
|
|
|
msg = "wrongUsernameOrPassword"
|
|
|
|
sessionService.IncrLoginTimes(sessionId)
|
2015-09-06 23:16:56 +08:00
|
|
|
} else {
|
|
|
|
c.SetSession(userInfo)
|
|
|
|
sessionService.ClearLoginTimes(sessionId)
|
|
|
|
return c.RenderJson(info.Re{Ok: true})
|
|
|
|
}
|
2014-10-22 16:20:45 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
return c.RenderJson(info.Re{Ok: false, Item: sessionService.LoginTimesIsOver(sessionId) , Msg: c.Message(msg)})
|
2014-05-07 13:06:24 +08:00
|
|
|
}
|
|
|
|
// 注销
|
|
|
|
func (c Auth) Logout() revel.Result {
|
2014-10-22 16:20:45 +08:00
|
|
|
sessionId := c.Session.Id()
|
|
|
|
sessionService.Clear(sessionId)
|
2014-05-07 13:06:24 +08:00
|
|
|
c.ClearSession()
|
2014-05-07 20:31:30 +08:00
|
|
|
return c.Redirect("/login")
|
2014-05-07 13:06:24 +08:00
|
|
|
}
|
2014-05-07 20:31:30 +08:00
|
|
|
|
2014-05-07 13:06:24 +08:00
|
|
|
// 体验一下
|
|
|
|
func (c Auth) Demo() revel.Result {
|
2015-06-15 19:13:00 +08:00
|
|
|
email := configService.GetGlobalStringConfig("demoPassword")
|
|
|
|
pwd := configService.GetGlobalStringConfig("demoPassword");
|
2015-09-06 23:16:56 +08:00
|
|
|
userInfo, err := authService.Login(email, pwd)
|
|
|
|
if err != nil {
|
|
|
|
return c.RenderJson(info.Re{Ok: false})
|
|
|
|
} else {
|
2015-06-15 19:13:00 +08:00
|
|
|
c.SetSession(userInfo)
|
|
|
|
return c.Redirect("/note")
|
|
|
|
}
|
|
|
|
return nil
|
2014-05-07 13:06:24 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
//--------
|
|
|
|
// 注册
|
2015-01-08 21:15:56 +08:00
|
|
|
func (c Auth) Register(from, iu string) revel.Result {
|
2014-10-23 10:03:19 +08:00
|
|
|
if !configService.IsOpenRegister() {
|
2014-05-07 20:31:30 +08:00
|
|
|
return c.Redirect("/index")
|
|
|
|
}
|
2014-10-22 16:20:45 +08:00
|
|
|
c.SetLocale()
|
|
|
|
c.RenderArgs["from"] = from
|
2015-01-08 21:15:56 +08:00
|
|
|
c.RenderArgs["iu"] = iu
|
2014-05-07 20:31:30 +08:00
|
|
|
|
2014-05-07 13:06:24 +08:00
|
|
|
c.RenderArgs["title"] = c.Message("register")
|
|
|
|
c.RenderArgs["subTitle"] = c.Message("register")
|
|
|
|
return c.RenderTemplate("home/register.html")
|
|
|
|
}
|
2015-01-08 21:15:56 +08:00
|
|
|
func (c Auth) DoRegister(email, pwd, iu string) revel.Result {
|
2014-10-23 10:03:19 +08:00
|
|
|
if !configService.IsOpenRegister() {
|
2014-05-07 20:31:30 +08:00
|
|
|
return c.Redirect("/index")
|
|
|
|
}
|
|
|
|
|
2014-05-07 13:06:24 +08:00
|
|
|
re := info.NewRe();
|
|
|
|
|
2014-10-22 16:20:45 +08:00
|
|
|
if re.Ok, re.Msg = Vd("email", email); !re.Ok {
|
|
|
|
return c.RenderRe(re);
|
2014-05-07 13:06:24 +08:00
|
|
|
}
|
2014-10-22 16:20:45 +08:00
|
|
|
if re.Ok, re.Msg = Vd("password", pwd); !re.Ok {
|
|
|
|
return c.RenderRe(re);
|
2014-05-07 13:06:24 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
// 注册
|
2015-01-08 21:15:56 +08:00
|
|
|
re.Ok, re.Msg = authService.Register(email, pwd, iu)
|
2014-05-07 13:06:24 +08:00
|
|
|
|
|
|
|
// 注册成功, 则立即登录之
|
|
|
|
if re.Ok {
|
2014-10-22 16:20:45 +08:00
|
|
|
c.doLogin(email, pwd)
|
2014-05-07 13:06:24 +08:00
|
|
|
}
|
|
|
|
|
2014-10-22 16:20:45 +08:00
|
|
|
return c.RenderRe(re)
|
2014-05-07 13:06:24 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
//--------
|
|
|
|
// 找回密码
|
|
|
|
func (c Auth) FindPassword() revel.Result {
|
|
|
|
c.RenderArgs["title"] = c.Message("findPassword")
|
|
|
|
c.RenderArgs["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.RenderArgs["title"] = c.Message("findPassword")
|
|
|
|
c.RenderArgs["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.RenderArgs["findPwd"] = findPwd
|
|
|
|
|
|
|
|
c.RenderArgs["title"] = c.Message("updatePassword")
|
|
|
|
c.RenderArgs["subTitle"] = c.Message("updatePassword")
|
|
|
|
|
|
|
|
return c.RenderTemplate("home/find_password2.html")
|
|
|
|
}
|
|
|
|
// 找回密码修改密码
|
|
|
|
func (c Auth) FindPasswordUpdate(token, pwd string) revel.Result {
|
|
|
|
re := info.NewRe();
|
2014-10-22 16:20:45 +08:00
|
|
|
|
|
|
|
if re.Ok, re.Msg = Vd("password", pwd); !re.Ok {
|
|
|
|
return c.RenderRe(re);
|
2014-05-07 13:06:24 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
// 修改之
|
|
|
|
re.Ok, re.Msg = pwdService.UpdatePwd(token, pwd)
|
2014-10-22 16:20:45 +08:00
|
|
|
return c.RenderRe(re)
|
2014-05-07 13:06:24 +08:00
|
|
|
}
|