|  | @@ -9,6 +9,7 @@ import (
 | 
	
		
			
				|  |  |  	"x-ui/web/service"
 | 
	
		
			
				|  |  |  	"x-ui/web/session"
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	"github.com/gin-contrib/sessions"
 | 
	
		
			
				|  |  |  	"github.com/gin-gonic/gin"
 | 
	
		
			
				|  |  |  )
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -49,8 +50,8 @@ func (a *IndexController) index(c *gin.Context) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  func (a *IndexController) login(c *gin.Context) {
 | 
	
		
			
				|  |  |  	var form LoginForm
 | 
	
		
			
				|  |  | -	err := c.ShouldBind(&form)
 | 
	
		
			
				|  |  | -	if err != nil {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if err := c.ShouldBind(&form); err != nil {
 | 
	
		
			
				|  |  |  		pureJsonMsg(c, http.StatusOK, false, I18nWeb(c, "pages.login.toasts.invalidFormData"))
 | 
	
		
			
				|  |  |  		return
 | 
	
		
			
				|  |  |  	}
 | 
	
	
		
			
				|  | @@ -68,29 +69,31 @@ func (a *IndexController) login(c *gin.Context) {
 | 
	
		
			
				|  |  |  	safeUser := template.HTMLEscapeString(form.Username)
 | 
	
		
			
				|  |  |  	safePass := template.HTMLEscapeString(form.Password)
 | 
	
		
			
				|  |  |  	safeSecret := template.HTMLEscapeString(form.LoginSecret)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	if user == nil {
 | 
	
		
			
				|  |  |  		logger.Warningf("wrong username: \"%s\", password: \"%s\", secret: \"%s\", IP: \"%s\"", safeUser, safePass, safeSecret, getRemoteIp(c))
 | 
	
		
			
				|  |  |  		a.tgbot.UserLoginNotify(safeUser, safePass, getRemoteIp(c), timeStr, 0)
 | 
	
		
			
				|  |  |  		pureJsonMsg(c, http.StatusOK, false, I18nWeb(c, "pages.login.toasts.wrongUsernameOrPassword"))
 | 
	
		
			
				|  |  |  		return
 | 
	
		
			
				|  |  | -	} else {
 | 
	
		
			
				|  |  | -		logger.Infof("%s logged in successfully, Ip Address: %s\n", safeUser, getRemoteIp(c))
 | 
	
		
			
				|  |  | -		a.tgbot.UserLoginNotify(safeUser, ``, getRemoteIp(c), timeStr, 1)
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	logger.Infof("%s logged in successfully, Ip Address: %s\n", safeUser, getRemoteIp(c))
 | 
	
		
			
				|  |  | +	a.tgbot.UserLoginNotify(safeUser, ``, getRemoteIp(c), timeStr, 1)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	sessionMaxAge, err := a.settingService.GetSessionMaxAge()
 | 
	
		
			
				|  |  |  	if err != nil {
 | 
	
		
			
				|  |  |  		logger.Warning("Unable to get session's max age from DB")
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	err = session.SetMaxAge(c, sessionMaxAge*60)
 | 
	
		
			
				|  |  | -	if err != nil {
 | 
	
		
			
				|  |  | -		logger.Warning("Unable to set session's max age")
 | 
	
		
			
				|  |  | +	session.SetMaxAge(c, sessionMaxAge*60)
 | 
	
		
			
				|  |  | +	session.SetLoginUser(c, user)
 | 
	
		
			
				|  |  | +	if err := sessions.Default(c).Save(); err != nil {
 | 
	
		
			
				|  |  | +		logger.Warning("Unable to save session: ", err)
 | 
	
		
			
				|  |  | +		return
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	err = session.SetLoginUser(c, user)
 | 
	
		
			
				|  |  | -	logger.Infof("%s logged in successfully", user.Username)
 | 
	
		
			
				|  |  | -	jsonMsg(c, I18nWeb(c, "pages.login.toasts.successLogin"), err)
 | 
	
		
			
				|  |  | +	logger.Infof("%s logged in successfully", safeUser)
 | 
	
		
			
				|  |  | +	jsonMsg(c, I18nWeb(c, "pages.login.toasts.successLogin"), nil)
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  func (a *IndexController) logout(c *gin.Context) {
 | 
	
	
		
			
				|  | @@ -99,6 +102,9 @@ func (a *IndexController) logout(c *gin.Context) {
 | 
	
		
			
				|  |  |  		logger.Infof("%s logged out successfully", user.Username)
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  	session.ClearSession(c)
 | 
	
		
			
				|  |  | +	if err := sessions.Default(c).Save(); err != nil {
 | 
	
		
			
				|  |  | +		logger.Warning("Unable to save session after clearing:", err)
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  |  	c.Redirect(http.StatusTemporaryRedirect, c.GetString("base_path"))
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 |