func (this *SocialAuthRouter) ConnectPost() { this.TplNames = "auth/connect.html" if this.CheckLoginRedirect(false) { return } var socialType social.SocialType if !this.canConnect(&socialType) { this.Redirect(setting.SocialAuth.LoginURL, 302) return } p, ok := social.GetProviderByType(socialType) if !ok { this.Redirect(setting.SocialAuth.LoginURL, 302) return } var form interface{} formL := auth.OAuthLoginForm{} this.SetFormSets(&formL) formR := auth.OAuthRegisterForm{Locale: this.Locale} this.SetFormSets(&formR) action := this.GetString("action") if action == "connect" { form = &formL } else { form = &formR } this.Data["Action"] = action this.Data["Social"] = socialType // valid form and put errors to template context if this.ValidFormSets(form) == false { return } var user models.User switch action { case "connect": key := "auth.login." + formL.UserName + this.Ctx.Input.IP() if times, ok := utils.TimesReachedTest(key, setting.LoginMaxRetries); ok { this.Data["ErrorReached"] = true } else if auth.VerifyUser(&user, formL.UserName, formL.Password) { goto connect } else { utils.TimesReachedSet(key, times, setting.LoginFailedBlocks) } default: if err := auth.RegisterUser(&user, formR.UserName, formR.Email, formR.Password, this.Locale); err == nil { auth.SendRegisterMail(this.Locale, &user) goto connect } else { beego.Error("Register: Failed ", err) } } failed: this.Data["Error"] = true return connect: if loginRedirect, _, err := setting.SocialAuth.ConnectAndLogin(this.Ctx, socialType, user.Id); err != nil { beego.Error("ConnectAndLogin:"******"connect": this.FlashRedirect("/settings/profile", 302, "ConnectSuccess", p.GetName()) default: this.FlashRedirect("/settings/profile", 302, "RegSuccess") } }
// Login implemented user login. func (this *LoginRouter) Login() { this.Data["IsLoginPage"] = true this.TplNames = "auth/login.html" // no need login if this.CheckLoginRedirect(false) { return } var user models.User var key string ajaxErrMsg := "auth.login_error_ajax" form := auth.LoginForm{} // valid form and put errors to template context if this.ValidFormSets(&form) == false { if this.IsAjax() { goto ajaxError } return } key = "auth.login." + form.UserName + this.Ctx.Input.IP() if times, ok := utils.TimesReachedTest(key, setting.LoginMaxRetries); ok { if this.IsAjax() { ajaxErrMsg = "auth.login_error_times_reached" goto ajaxError } this.Data["ErrorReached"] = true } else if auth.VerifyUser(&user, form.UserName, form.Password) { loginRedirect := this.LoginUser(&user, form.Remember) if this.IsAjax() { this.Data["json"] = map[string]interface{}{ "success": true, "message": this.Tr("auth.login_success_ajax"), "redirect": loginRedirect, } this.ServeJson() return } this.Redirect(loginRedirect, 302) return } else { utils.TimesReachedSet(key, times, setting.LoginFailedBlocks) if this.IsAjax() { goto ajaxError } } this.Data["Error"] = true return ajaxError: this.Data["json"] = map[string]interface{}{ "success": false, "message": this.Tr(ajaxErrMsg), "once": this.Data["once_token"], } this.ServeJson() }