|  | @@ -77,7 +77,39 @@ func SignIn(ctx *middleware.Context, form auth.LogInForm) {
 | 
	
		
			
				|  |  |  	ctx.Data["Title"] = "Log In"
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	if ctx.Req.Method == "GET" {
 | 
	
		
			
				|  |  | -		ctx.HTML(200, "user/signin")
 | 
	
		
			
				|  |  | +		// Check auto-login.
 | 
	
		
			
				|  |  | +		userName := ctx.GetCookie(base.CookieUserName)
 | 
	
		
			
				|  |  | +		if len(userName) == 0 {
 | 
	
		
			
				|  |  | +			ctx.HTML(200, "user/signin")
 | 
	
		
			
				|  |  | +			return
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		isSucceed := false
 | 
	
		
			
				|  |  | +		defer func() {
 | 
	
		
			
				|  |  | +			if !isSucceed {
 | 
	
		
			
				|  |  | +				log.Trace("%s auto-login cookie cleared: %s", ctx.Req.RequestURI, userName)
 | 
	
		
			
				|  |  | +				ctx.SetCookie(base.CookieUserName, "", -1)
 | 
	
		
			
				|  |  | +				ctx.SetCookie(base.CookieRememberName, "", -1)
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		}()
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		user, err := models.GetUserByName(userName)
 | 
	
		
			
				|  |  | +		if err != nil {
 | 
	
		
			
				|  |  | +			ctx.HTML(200, "user/signin")
 | 
	
		
			
				|  |  | +			return
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		secret := base.EncodeMd5(user.Rands + user.Passwd)
 | 
	
		
			
				|  |  | +		value, _ := ctx.GetSecureCookie(secret, base.CookieRememberName)
 | 
	
		
			
				|  |  | +		if value != user.Name {
 | 
	
		
			
				|  |  | +			ctx.HTML(200, "user/signin")
 | 
	
		
			
				|  |  | +			return
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		isSucceed = true
 | 
	
		
			
				|  |  | +		ctx.Session.Set("userId", user.Id)
 | 
	
		
			
				|  |  | +		ctx.Session.Set("userName", user.Name)
 | 
	
		
			
				|  |  | +		ctx.Redirect("/")
 | 
	
		
			
				|  |  |  		return
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -89,6 +121,7 @@ func SignIn(ctx *middleware.Context, form auth.LogInForm) {
 | 
	
		
			
				|  |  |  	user, err := models.LoginUserPlain(form.UserName, form.Password)
 | 
	
		
			
				|  |  |  	if err != nil {
 | 
	
		
			
				|  |  |  		if err == models.ErrUserNotExist {
 | 
	
		
			
				|  |  | +			log.Trace("%s Log in failed: %s/%s", ctx.Req.RequestURI, form.UserName, form.Password)
 | 
	
		
			
				|  |  |  			ctx.RenderWithErr("Username or password is not correct", "user/signin", &form)
 | 
	
		
			
				|  |  |  			return
 | 
	
		
			
				|  |  |  		}
 | 
	
	
		
			
				|  | @@ -97,6 +130,13 @@ func SignIn(ctx *middleware.Context, form auth.LogInForm) {
 | 
	
		
			
				|  |  |  		return
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	if form.Remember == "on" {
 | 
	
		
			
				|  |  | +		secret := base.EncodeMd5(user.Rands + user.Passwd)
 | 
	
		
			
				|  |  | +		days := 86400 * base.LogInRememberDays
 | 
	
		
			
				|  |  | +		ctx.SetCookie(base.CookieUserName, user.Name, days)
 | 
	
		
			
				|  |  | +		ctx.SetSecureCookie(secret, base.CookieRememberName, user.Name, days)
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	ctx.Session.Set("userId", user.Id)
 | 
	
		
			
				|  |  |  	ctx.Session.Set("userName", user.Name)
 | 
	
		
			
				|  |  |  	ctx.Redirect("/")
 |