|
|
@@ -176,6 +176,48 @@ func SignInCloudBrain(ctx *context.Context) { |
|
|
ctx.HTML(200, tplSignInCloudBrain) |
|
|
ctx.HTML(200, tplSignInCloudBrain) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func SignInPostAPI(ctx *context.Context) { |
|
|
|
|
|
ctx.Data["Title"] = ctx.Tr("sign_in") |
|
|
|
|
|
UserName := ctx.Query("UserName") |
|
|
|
|
|
Password := ctx.Query("Password") |
|
|
|
|
|
log.Info("0000000") |
|
|
|
|
|
orderedOAuth2Names, oauth2Providers, err := models.GetActiveOAuth2Providers() |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
ctx.ServerError("UserSignIn", err) |
|
|
|
|
|
return |
|
|
|
|
|
} |
|
|
|
|
|
ctx.Data["OrderedOAuth2Names"] = orderedOAuth2Names |
|
|
|
|
|
ctx.Data["OAuth2Providers"] = oauth2Providers |
|
|
|
|
|
ctx.Data["Title"] = ctx.Tr("sign_in") |
|
|
|
|
|
ctx.Data["SignInLink"] = setting.AppSubURL + "/user/login" |
|
|
|
|
|
ctx.Data["PageIsSignIn"] = true |
|
|
|
|
|
ctx.Data["PageIsLogin"] = true |
|
|
|
|
|
ctx.Data["IsCourse"] = ctx.QueryBool("course") |
|
|
|
|
|
ctx.Data["EnableSSPI"] = models.IsSSPIEnabled() |
|
|
|
|
|
|
|
|
|
|
|
if ctx.HasError() { |
|
|
|
|
|
ctx.HTML(200, tplSignIn) |
|
|
|
|
|
return |
|
|
|
|
|
} |
|
|
|
|
|
log.Info("1111111") |
|
|
|
|
|
u, err := models.UserSignIn(UserName, Password) |
|
|
|
|
|
log.Info("22222") |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
ctx.ServerError("UserSignIn", err) |
|
|
|
|
|
return |
|
|
|
|
|
} |
|
|
|
|
|
log.Info("3333") |
|
|
|
|
|
models.SaveLoginInfoToDb(ctx.Req.Request, u) |
|
|
|
|
|
// If this user is enrolled in 2FA, we can't sign the user in just yet. |
|
|
|
|
|
// Instead, redirect them to the 2FA authentication page. |
|
|
|
|
|
//handleSignInFull(ctx, u, form.Remember, false) |
|
|
|
|
|
handleSignInFullNotRedirect(ctx, u, true, false) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// SignInPost response for sign in request |
|
|
// SignInPost response for sign in request |
|
|
func SignInPost(ctx *context.Context, form auth.SignInForm) { |
|
|
func SignInPost(ctx *context.Context, form auth.SignInForm) { |
|
|
ctx.Data["Title"] = ctx.Tr("sign_in") |
|
|
ctx.Data["Title"] = ctx.Tr("sign_in") |
|
|
@@ -518,6 +560,69 @@ func handleSignIn(ctx *context.Context, u *models.User, remember bool) { |
|
|
handleSignInFull(ctx, u, remember, true) |
|
|
handleSignInFull(ctx, u, remember, true) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func handleSignInFullNotRedirect(ctx *context.Context, u *models.User, remember bool, obeyRedirect bool) string { |
|
|
|
|
|
|
|
|
|
|
|
log.Info("enter here.") |
|
|
|
|
|
if remember { |
|
|
|
|
|
days := 86400 * setting.LogInRememberDays |
|
|
|
|
|
ctx.SetCookie(setting.CookieUserName, u.Name, days, setting.AppSubURL, setting.SessionConfig.Domain, setting.SessionConfig.Secure, true) |
|
|
|
|
|
ctx.SetSuperSecureCookie(base.EncodeMD5(u.Rands+u.Passwd), |
|
|
|
|
|
setting.CookieRememberName, u.Name, days, setting.AppSubURL, setting.SessionConfig.Domain, setting.SessionConfig.Secure, true) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
_ = ctx.Session.Delete("openid_verified_uri") |
|
|
|
|
|
_ = ctx.Session.Delete("openid_signin_remember") |
|
|
|
|
|
_ = ctx.Session.Delete("openid_determined_email") |
|
|
|
|
|
_ = ctx.Session.Delete("openid_determined_username") |
|
|
|
|
|
_ = ctx.Session.Delete("twofaUid") |
|
|
|
|
|
_ = ctx.Session.Delete("twofaRemember") |
|
|
|
|
|
_ = ctx.Session.Delete("u2fChallenge") |
|
|
|
|
|
_ = ctx.Session.Delete("linkAccount") |
|
|
|
|
|
if err := ctx.Session.Set("uid", u.ID); err != nil { |
|
|
|
|
|
log.Error("Error setting uid %d in session: %v", u.ID, err) |
|
|
|
|
|
} |
|
|
|
|
|
if err := ctx.Session.Set("uname", u.Name); err != nil { |
|
|
|
|
|
log.Error("Error setting uname %s session: %v", u.Name, err) |
|
|
|
|
|
} |
|
|
|
|
|
if err := ctx.Session.Release(); err != nil { |
|
|
|
|
|
log.Error("Unable to store session: %v", err) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// If the user does not have a locale set, we save the current one. |
|
|
|
|
|
if len(u.Language) == 0 { |
|
|
|
|
|
if len(ctx.GetCookie("lang")) != 0 { |
|
|
|
|
|
u.Language = ctx.GetCookie("lang") |
|
|
|
|
|
} else { |
|
|
|
|
|
u.Language = ctx.Locale.Language() |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if err := models.UpdateUserCols(u, "language"); err != nil { |
|
|
|
|
|
log.Error(fmt.Sprintf("Error updating user language [user: %d, locale: %s]", u.ID, u.Language)) |
|
|
|
|
|
return setting.AppSubURL + "/dashboard" |
|
|
|
|
|
} |
|
|
|
|
|
} else { |
|
|
|
|
|
// Language setting of the user use the one previously set |
|
|
|
|
|
if len(ctx.GetCookie("lang")) != 0 { |
|
|
|
|
|
u.Language = ctx.GetCookie("lang") |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
ctx.SetCookie("lang", u.Language, nil, setting.AppSubURL, setting.SessionConfig.Domain, setting.SessionConfig.Secure, true) |
|
|
|
|
|
|
|
|
|
|
|
// Clear whatever CSRF has right now, force to generate a new one |
|
|
|
|
|
ctx.SetCookie(setting.CSRFCookieName, "", -1, setting.AppSubURL, setting.SessionConfig.Domain, setting.SessionConfig.Secure, true) |
|
|
|
|
|
|
|
|
|
|
|
// Register last login |
|
|
|
|
|
u.SetLastLogin() |
|
|
|
|
|
if err := models.UpdateUserCols(u, "last_login_unix"); err != nil { |
|
|
|
|
|
ctx.ServerError("UpdateUserCols", err) |
|
|
|
|
|
return setting.AppSubURL + "/dashboard" |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return setting.AppSubURL + "/dashboard" |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
func handleSignInFull(ctx *context.Context, u *models.User, remember bool, obeyRedirect bool) string { |
|
|
func handleSignInFull(ctx *context.Context, u *models.User, remember bool, obeyRedirect bool) string { |
|
|
if remember { |
|
|
if remember { |
|
|
days := 86400 * setting.LogInRememberDays |
|
|
days := 86400 * setting.LogInRememberDays |
|
|
|