Skip to content

Commit 2bdc146

Browse files
author
AJ ONeal
committed
treat register like sign in, even oauth
1 parent 378af8e commit 2bdc146

File tree

3 files changed

+59
-56
lines changed

3 files changed

+59
-56
lines changed

modules/auth/user_form.go

+1
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ type RegisterForm struct {
7676
Email string `binding:"Required;Email;MaxSize(254)"`
7777
Password string `binding:"Required;MaxSize(255)"`
7878
Retype string
79+
Remember bool
7980
GRecaptchaResponse string `form:"g-recaptcha-response"`
8081
}
8182

routers/user/auth.go

+51-56
Original file line numberDiff line numberDiff line change
@@ -497,6 +497,37 @@ func handleSignInFull(ctx *context.Context, u *models.User, remember bool, obeyR
497497
return setting.AppSubURL + "/"
498498
}
499499

500+
func handleRegister(ctx *context.Context, u *models.User, remember bool, obeyRedirect bool) {
501+
// Auto-set admin for the only user.
502+
if models.CountUsers() == 1 {
503+
u.IsAdmin = true
504+
u.IsActive = true
505+
u.SetLastLogin()
506+
if err := models.UpdateUserCols(u, "is_admin", "is_active", "last_login_unix"); err != nil {
507+
ctx.ServerError("UpdateUser", err)
508+
return
509+
}
510+
}
511+
512+
// Send confirmation email
513+
if setting.Service.RegisterEmailConfirm && u.ID > 1 {
514+
models.SendActivateAccountMail(ctx.Context, u)
515+
ctx.Data["IsSendRegisterMail"] = true
516+
ctx.Data["Email"] = u.Email
517+
ctx.Data["ActiveCodeLives"] = base.MinutesToFriendly(setting.Service.ActiveCodeLives, ctx.Locale.Language())
518+
ctx.HTML(200, TplActivate)
519+
520+
if err := ctx.Cache.Put("MailResendLimit_"+u.LowerName, u.LowerName, 180); err != nil {
521+
log.Error(4, "Set cache(MailResendLimit) fail: %v", err)
522+
}
523+
return
524+
}
525+
526+
ctx.Flash.Success(ctx.Tr("auth.sign_up_successful"))
527+
// Complete the signin without logging in again
528+
handleSignInFull(ctx, u, remember, true)
529+
}
530+
500531
// SignInOAuth handles the OAuth2 login buttons
501532
func SignInOAuth(ctx *context.Context) {
502533
provider := ctx.Params(":provider")
@@ -800,14 +831,20 @@ func LinkAccountPostRegister(ctx *context.Context, cpt *captcha.Captcha, form au
800831
ctx.ServerError("CreateUser", err)
801832
}
802833

834+
// TODO LoginName should come from form.UserName... shouldn't it?
803835
u := &models.User{
804-
Name: form.UserName,
805-
Email: form.Email,
806-
Passwd: form.Password,
807-
IsActive: !setting.Service.RegisterEmailConfirm,
808-
LoginType: models.LoginOAuth2,
809-
LoginSource: loginSource.ID,
810-
LoginName: gothUser.(goth.User).UserID,
836+
Name: form.UserName,
837+
Email: form.Email,
838+
Passwd: form.Password,
839+
IsActive: !setting.Service.RegisterEmailConfirm,
840+
}
841+
842+
// This will link the account in such a way that it cannot be removed
843+
// TODO why is this different from normal linking?
844+
if setting.Service.AllowOnlyExternalRegistration {
845+
u.LoginType = models.LoginOAuth2
846+
u.LoginSource = loginSource.ID
847+
u.LoginName = gothUser.(goth.User).UserID
811848
}
812849

813850
if err := models.CreateUser(u); err != nil {
@@ -831,32 +868,16 @@ func LinkAccountPostRegister(ctx *context.Context, cpt *captcha.Captcha, form au
831868
}
832869
log.Trace("Account created: %s", u.Name)
833870

834-
// Auto-set admin for the only user.
835-
if models.CountUsers() == 1 {
836-
u.IsAdmin = true
837-
u.IsActive = true
838-
u.SetLastLogin()
839-
if err := models.UpdateUserCols(u, "is_admin", "is_active", "last_login_unix"); err != nil {
840-
ctx.ServerError("UpdateUser", err)
871+
// This will link the account in such a way that it can be removed
872+
if !setting.Service.AllowOnlyExternalRegistration {
873+
err = models.LinkAccountToUser(u, gothUser.(goth.User))
874+
if err != nil {
875+
ctx.ServerError("UserLinkAccount", err)
841876
return
842877
}
843878
}
844879

845-
// Send confirmation email
846-
if setting.Service.RegisterEmailConfirm && u.ID > 1 {
847-
models.SendActivateAccountMail(ctx.Context, u)
848-
ctx.Data["IsSendRegisterMail"] = true
849-
ctx.Data["Email"] = u.Email
850-
ctx.Data["ActiveCodeLives"] = base.MinutesToFriendly(setting.Service.ActiveCodeLives, ctx.Locale.Language())
851-
ctx.HTML(200, TplActivate)
852-
853-
if err := ctx.Cache.Put("MailResendLimit_"+u.LowerName, u.LowerName, 180); err != nil {
854-
log.Error(4, "Set cache(MailResendLimit) fail: %v", err)
855-
}
856-
return
857-
}
858-
859-
ctx.Redirect(setting.AppSubURL + "/user/login")
880+
handleRegister(ctx, u, form.Remember, true)
860881
}
861882

862883
// SignOut sign out from login status
@@ -964,33 +985,7 @@ func SignUpPost(ctx *context.Context, cpt *captcha.Captcha, form auth.RegisterFo
964985
}
965986
log.Trace("Account created: %s", u.Name)
966987

967-
// Auto-set admin for the only user.
968-
if models.CountUsers() == 1 {
969-
u.IsAdmin = true
970-
u.IsActive = true
971-
u.SetLastLogin()
972-
if err := models.UpdateUserCols(u, "is_admin", "is_active", "last_login_unix"); err != nil {
973-
ctx.ServerError("UpdateUser", err)
974-
return
975-
}
976-
}
977-
978-
// Send confirmation email, no need for social account.
979-
if setting.Service.RegisterEmailConfirm && u.ID > 1 {
980-
models.SendActivateAccountMail(ctx.Context, u)
981-
ctx.Data["IsSendRegisterMail"] = true
982-
ctx.Data["Email"] = u.Email
983-
ctx.Data["ActiveCodeLives"] = base.MinutesToFriendly(setting.Service.ActiveCodeLives, ctx.Locale.Language())
984-
ctx.HTML(200, TplActivate)
985-
986-
if err := ctx.Cache.Put("MailResendLimit_"+u.LowerName, u.LowerName, 180); err != nil {
987-
log.Error(4, "Set cache(MailResendLimit) fail: %v", err)
988-
}
989-
return
990-
}
991-
992-
ctx.Flash.Success(ctx.Tr("auth.sign_up_successful"))
993-
handleSignInFull(ctx, u, false, true)
988+
handleRegister(ctx, u, form.Remember, true)
994989
}
995990

996991
// Activate render activate user page

templates/user/auth/signup_inner.tmpl

+7
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,13 @@
4545
</div>
4646
{{end}}
4747

48+
<div class="inline field">
49+
<label></label>
50+
<div class="ui checkbox">
51+
<label>{{.i18n.Tr "auth.remember_me"}}</label>
52+
<input name="remember" type="checkbox">
53+
</div>
54+
</div>
4855
<div class="inline field">
4956
<label></label>
5057
<button class="ui green button">{{.i18n.Tr "auth.create_new_account"}}</button>

0 commit comments

Comments
 (0)