@@ -23,19 +23,23 @@ import (
23
23
// UserSignIn validates user name and password.
24
24
func UserSignIn (username , password string ) (* user_model.User , * auth.Source , error ) {
25
25
var user * user_model.User
26
+ isEmail := false
26
27
if strings .Contains (username , "@" ) {
28
+ isEmail = true
27
29
emailAddress := user_model.EmailAddress {LowerEmail : strings .ToLower (strings .TrimSpace (username ))}
28
30
// check same email
29
- has , err := db .GetEngine (db .DefaultContext ).Where ( "is_activated=?" , true ). Get (& emailAddress )
31
+ has , err := db .GetEngine (db .DefaultContext ).Get (& emailAddress )
30
32
if err != nil {
31
33
return nil , nil , err
32
34
}
33
- if ! has {
34
- return nil , nil , user_model.ErrEmailAddressNotExist {
35
- Email : username ,
35
+ if has {
36
+ if ! emailAddress .IsActivated {
37
+ return nil , nil , user_model.ErrEmailAddressNotExist {
38
+ Email : username ,
39
+ }
36
40
}
41
+ user = & user_model.User {ID : emailAddress .UID }
37
42
}
38
- user = & user_model.User {ID : emailAddress .UID }
39
43
} else {
40
44
trimmedUsername := strings .TrimSpace (username )
41
45
if len (trimmedUsername ) == 0 {
@@ -45,38 +49,40 @@ func UserSignIn(username, password string) (*user_model.User, *auth.Source, erro
45
49
user = & user_model.User {LowerName : strings .ToLower (trimmedUsername )}
46
50
}
47
51
48
- hasUser , err := user_model .GetUser (user )
49
- if err != nil {
50
- return nil , nil , err
51
- }
52
-
53
- if hasUser {
54
- source , err := auth .GetSourceByID (user .LoginSource )
52
+ if user != nil {
53
+ hasUser , err := user_model .GetUser (user )
55
54
if err != nil {
56
55
return nil , nil , err
57
56
}
58
57
59
- if ! source .IsActive {
60
- return nil , nil , oauth2 .ErrAuthSourceNotActived
61
- }
58
+ if hasUser {
59
+ source , err := auth .GetSourceByID (user .LoginSource )
60
+ if err != nil {
61
+ return nil , nil , err
62
+ }
62
63
63
- authenticator , ok := source .Cfg .(PasswordAuthenticator )
64
- if ! ok {
65
- return nil , nil , smtp .ErrUnsupportedLoginType
66
- }
64
+ if ! source .IsActive {
65
+ return nil , nil , oauth2 .ErrAuthSourceNotActived
66
+ }
67
67
68
- user , err := authenticator . Authenticate ( user , user . LoginName , password )
69
- if err != nil {
70
- return nil , nil , err
71
- }
68
+ authenticator , ok := source . Cfg .( PasswordAuthenticator )
69
+ if ! ok {
70
+ return nil , nil , smtp . ErrUnsupportedLoginType
71
+ }
72
72
73
- // WARN: DON'T check user.IsActive, that will be checked on reqSign so that
74
- // user could be hint to resend confirm email.
75
- if user .ProhibitLogin {
76
- return nil , nil , user_model.ErrUserProhibitLogin {UID : user .ID , Name : user .Name }
77
- }
73
+ user , err := authenticator .Authenticate (user , user .LoginName , password )
74
+ if err != nil {
75
+ return nil , nil , err
76
+ }
78
77
79
- return user , source , nil
78
+ // WARN: DON'T check user.IsActive, that will be checked on reqSign so that
79
+ // user could be hint to resend confirm email.
80
+ if user .ProhibitLogin {
81
+ return nil , nil , user_model.ErrUserProhibitLogin {UID : user .ID , Name : user .Name }
82
+ }
83
+
84
+ return user , source , nil
85
+ }
80
86
}
81
87
82
88
sources , err := auth .AllActiveSources ()
@@ -111,5 +117,9 @@ func UserSignIn(username, password string) (*user_model.User, *auth.Source, erro
111
117
}
112
118
}
113
119
120
+ if isEmail {
121
+ return nil , nil , user_model.ErrEmailAddressNotExist {Email : username }
122
+ }
123
+
114
124
return nil , nil , user_model.ErrUserNotExist {Name : username }
115
125
}
0 commit comments