Worked on login remember cookie, and redirect after login

This commit is contained in:
Torkel Ödegaard
2015-01-27 12:05:23 +01:00
parent 6e5ef561eb
commit 257519490a
9 changed files with 98 additions and 5 deletions
+75 -4
View File
@@ -1,21 +1,72 @@
package api
import (
"net/url"
"github.com/torkelo/grafana-pro/pkg/api/dtos"
"github.com/torkelo/grafana-pro/pkg/bus"
"github.com/torkelo/grafana-pro/pkg/log"
"github.com/torkelo/grafana-pro/pkg/middleware"
m "github.com/torkelo/grafana-pro/pkg/models"
"github.com/torkelo/grafana-pro/pkg/setting"
"github.com/torkelo/grafana-pro/pkg/util"
)
const (
VIEW_INDEX = "index"
)
func LoginView(c *middleware.Context) {
if err := setIndexViewData(c); err != nil {
c.Handle(500, "Failed to get settings", err)
return
}
c.HTML(200, "index")
// Check auto-login.
uname := c.GetCookie(setting.CookieUserName)
if len(uname) == 0 {
c.HTML(200, VIEW_INDEX)
return
}
isSucceed := false
defer func() {
if !isSucceed {
log.Trace("auto-login cookie cleared: %s", uname)
c.SetCookie(setting.CookieUserName, "", -1, setting.AppSubUrl+"/")
c.SetCookie(setting.CookieRememberName, "", -1, setting.AppSubUrl+"/")
return
}
}()
userQuery := m.GetUserByLoginQuery{LoginOrEmail: uname}
if err := bus.Dispatch(&userQuery); err != nil {
if err != m.ErrUserNotFound {
c.Handle(500, "GetUserByLoginQuery", err)
} else {
c.HTML(200, VIEW_INDEX)
}
return
}
user := userQuery.Result
if val, _ := c.GetSuperSecureCookie(
util.EncodeMd5(user.Rands+user.Password), setting.CookieRememberName); val != user.Login {
c.HTML(200, VIEW_INDEX)
return
}
isSucceed = true
loginUserWithUser(user, c)
if redirectTo, _ := url.QueryUnescape(c.GetCookie("redirect_to")); len(redirectTo) > 0 {
c.SetCookie("redirect_to", "", -1, setting.AppSubUrl+"/")
c.Redirect(redirectTo)
return
}
c.Redirect(setting.AppSubUrl + "/")
}
func LoginPost(c *middleware.Context, cmd dtos.LoginCommand) {
@@ -36,9 +87,27 @@ func LoginPost(c *middleware.Context, cmd dtos.LoginCommand) {
return
}
// default to true here for now
cmd.Remember = true
if cmd.Remember {
days := 86400 * setting.LogInRememberDays
c.SetCookie(setting.CookieUserName, user.Login, days, setting.AppSubUrl+"/")
c.SetSuperSecureCookie(util.EncodeMd5(user.Rands+user.Password), setting.CookieRememberName, user.Login, days, setting.AppSubUrl+"/")
}
loginUserWithUser(user, c)
c.JsonOK("User logged in")
result := map[string]interface{}{
"message": "Logged in",
}
if redirectTo, _ := url.QueryUnescape(c.GetCookie("redirect_to")); len(redirectTo) > 0 {
result["redirectUrl"] = redirectTo
c.SetCookie("redirect_to", "", -1, setting.AppSubUrl+"/")
}
c.JSON(200, result)
}
func loginUserWithUser(user *m.User, c *middleware.Context) {
@@ -50,6 +119,8 @@ func loginUserWithUser(user *m.User, c *middleware.Context) {
}
func LogoutPost(c *middleware.Context) {
c.Session.Delete("userId")
c.JSON(200, util.DynMap{"status": "logged out"})
c.SetCookie(setting.CookieUserName, "", -1, setting.AppSubUrl+"/")
c.SetCookie(setting.CookieRememberName, "", -1, setting.AppSubUrl+"/")
c.Session.Destory(c.Context)
c.JsonOK("logged out")
}
+1
View File
@@ -12,6 +12,7 @@ func SignUp(c *middleware.Context, cmd m.CreateUserCommand) {
cmd.Login = cmd.Email
cmd.Salt = util.GetRandomString(10)
cmd.Rands = util.GetRandomString(10)
cmd.Password = util.EncodePassword(cmd.Password, cmd.Salt)
if err := bus.Dispatch(&cmd); err != nil {