@@ -810,49 +810,8 @@ func LinkAccountPostRegister(ctx *context.Context, cpt *captcha.Captcha, form au
810
810
LoginName : gothUser .(goth.User ).UserID ,
811
811
}
812
812
813
- if err := models .CreateUser (u ); err != nil {
814
- switch {
815
- case models .IsErrUserAlreadyExist (err ):
816
- ctx .Data ["Err_UserName" ] = true
817
- ctx .RenderWithErr (ctx .Tr ("form.username_been_taken" ), tplLinkAccount , & form )
818
- case models .IsErrEmailAlreadyUsed (err ):
819
- ctx .Data ["Err_Email" ] = true
820
- ctx .RenderWithErr (ctx .Tr ("form.email_been_used" ), tplLinkAccount , & form )
821
- case models .IsErrNameReserved (err ):
822
- ctx .Data ["Err_UserName" ] = true
823
- ctx .RenderWithErr (ctx .Tr ("user.form.name_reserved" , err .(models.ErrNameReserved ).Name ), tplLinkAccount , & form )
824
- case models .IsErrNamePatternNotAllowed (err ):
825
- ctx .Data ["Err_UserName" ] = true
826
- ctx .RenderWithErr (ctx .Tr ("user.form.name_pattern_not_allowed" , err .(models.ErrNamePatternNotAllowed ).Pattern ), tplLinkAccount , & form )
827
- default :
828
- ctx .ServerError ("CreateUser" , err )
829
- }
830
- return
831
- }
832
- log .Trace ("Account created: %s" , u .Name )
833
-
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 )
841
- return
842
- }
843
- }
844
-
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
- }
813
+ if ! createAndHandleCreatedUser (ctx , tplLinkAccount , form , u ) {
814
+ // error already handled
856
815
return
857
816
}
858
817
@@ -943,27 +902,64 @@ func SignUpPost(ctx *context.Context, cpt *captcha.Captcha, form auth.RegisterFo
943
902
Passwd : form .Password ,
944
903
IsActive : ! setting .Service .RegisterEmailConfirm ,
945
904
}
905
+
906
+ if ! createAndHandleCreatedUser (ctx , tplSignUp , form , u ) {
907
+ // error already handled
908
+ return
909
+ }
910
+
911
+ ctx .Flash .Success (ctx .Tr ("auth.sign_up_successful" ))
912
+ handleSignInFull (ctx , u , false , true )
913
+ }
914
+
915
+ // CreateAndHandleCreatedUser calls createUserInContext and
916
+ // then handleUserCreated.
917
+ func createAndHandleCreatedUser (ctx * context.Context , tpl base.TplName , form interface {}, u * models.User ) (ok bool ) {
918
+ ok = createUserInContext (ctx , tpl , form , u )
919
+ if ! ok {
920
+ return
921
+ }
922
+ ok = handleUserCreated (ctx , u )
923
+ return
924
+ }
925
+
926
+ // CreateUserInContext creates a user and handles errors within a given context.
927
+ // Optionaly a template can be specified.
928
+ func createUserInContext (ctx * context.Context , tpl base.TplName , form interface {}, u * models.User ) (ok bool ) {
946
929
if err := models .CreateUser (u ); err != nil {
930
+ // handle error without template
931
+ if len (tpl ) == 0 {
932
+ ctx .ServerError ("CreateUser" , err )
933
+ return
934
+ }
935
+
936
+ // handle error with template
947
937
switch {
948
938
case models .IsErrUserAlreadyExist (err ):
949
939
ctx .Data ["Err_UserName" ] = true
950
- ctx .RenderWithErr (ctx .Tr ("form.username_been_taken" ), tplSignUp , & form )
940
+ ctx .RenderWithErr (ctx .Tr ("form.username_been_taken" ), tpl , & form )
951
941
case models .IsErrEmailAlreadyUsed (err ):
952
942
ctx .Data ["Err_Email" ] = true
953
- ctx .RenderWithErr (ctx .Tr ("form.email_been_used" ), tplSignUp , & form )
943
+ ctx .RenderWithErr (ctx .Tr ("form.email_been_used" ), tpl , & form )
954
944
case models .IsErrNameReserved (err ):
955
945
ctx .Data ["Err_UserName" ] = true
956
- ctx .RenderWithErr (ctx .Tr ("user.form.name_reserved" , err .(models.ErrNameReserved ).Name ), tplSignUp , & form )
946
+ ctx .RenderWithErr (ctx .Tr ("user.form.name_reserved" , err .(models.ErrNameReserved ).Name ), tpl , & form )
957
947
case models .IsErrNamePatternNotAllowed (err ):
958
948
ctx .Data ["Err_UserName" ] = true
959
- ctx .RenderWithErr (ctx .Tr ("user.form.name_pattern_not_allowed" , err .(models.ErrNamePatternNotAllowed ).Pattern ), tplSignUp , & form )
949
+ ctx .RenderWithErr (ctx .Tr ("user.form.name_pattern_not_allowed" , err .(models.ErrNamePatternNotAllowed ).Pattern ), tpl , & form )
960
950
default :
961
951
ctx .ServerError ("CreateUser" , err )
962
952
}
963
953
return
964
954
}
965
955
log .Trace ("Account created: %s" , u .Name )
956
+ return true
957
+ }
966
958
959
+ // HandleUserCreated does additional steps after a new user is created.
960
+ // It auto-sets admin for the only user and
961
+ // sends a confirmation email if required.
962
+ func handleUserCreated (ctx * context.Context , u * models.User ) (ok bool ) {
967
963
// Auto-set admin for the only user.
968
964
if models .CountUsers () == 1 {
969
965
u .IsAdmin = true
@@ -975,8 +971,8 @@ func SignUpPost(ctx *context.Context, cpt *captcha.Captcha, form auth.RegisterFo
975
971
}
976
972
}
977
973
978
- // Send confirmation email, no need for social account.
979
- if setting . Service . RegisterEmailConfirm && u .ID > 1 {
974
+ // Send confirmation email
975
+ if ! u . IsActive && u .ID > 1 {
980
976
models .SendActivateAccountMail (ctx .Context , u )
981
977
ctx .Data ["IsSendRegisterMail" ] = true
982
978
ctx .Data ["Email" ] = u .Email
@@ -989,8 +985,7 @@ func SignUpPost(ctx *context.Context, cpt *captcha.Captcha, form auth.RegisterFo
989
985
return
990
986
}
991
987
992
- ctx .Flash .Success (ctx .Tr ("auth.sign_up_successful" ))
993
- handleSignInFull (ctx , u , false , true )
988
+ return true
994
989
}
995
990
996
991
// Activate render activate user page
0 commit comments