@@ -20,66 +20,66 @@ import (
20
20
)
21
21
22
22
// UserSignIn validates user name and password.
23
- func UserSignIn (username , password string ) (* models.User , error ) {
23
+ func UserSignIn (username , password string ) (* models.User , * models. LoginSource , error ) {
24
24
var user * models.User
25
25
if strings .Contains (username , "@" ) {
26
26
user = & models.User {Email : strings .ToLower (strings .TrimSpace (username ))}
27
27
// check same email
28
28
cnt , err := models .Count (user )
29
29
if err != nil {
30
- return nil , err
30
+ return nil , nil , err
31
31
}
32
32
if cnt > 1 {
33
- return nil , models.ErrEmailAlreadyUsed {
33
+ return nil , nil , models.ErrEmailAlreadyUsed {
34
34
Email : user .Email ,
35
35
}
36
36
}
37
37
} else {
38
38
trimmedUsername := strings .TrimSpace (username )
39
39
if len (trimmedUsername ) == 0 {
40
- return nil , models.ErrUserNotExist {Name : username }
40
+ return nil , nil , models.ErrUserNotExist {Name : username }
41
41
}
42
42
43
43
user = & models.User {LowerName : strings .ToLower (trimmedUsername )}
44
44
}
45
45
46
46
hasUser , err := models .GetUser (user )
47
47
if err != nil {
48
- return nil , err
48
+ return nil , nil , err
49
49
}
50
50
51
51
if hasUser {
52
52
source , err := models .GetLoginSourceByID (user .LoginSource )
53
53
if err != nil {
54
- return nil , err
54
+ return nil , nil , err
55
55
}
56
56
57
57
if ! source .IsActive {
58
- return nil , models .ErrLoginSourceNotActived
58
+ return nil , nil , models .ErrLoginSourceNotActived
59
59
}
60
60
61
61
authenticator , ok := source .Cfg .(PasswordAuthenticator )
62
62
if ! ok {
63
- return nil , models .ErrUnsupportedLoginType
63
+ return nil , nil , models .ErrUnsupportedLoginType
64
64
}
65
65
66
66
user , err := authenticator .Authenticate (user , username , password )
67
67
if err != nil {
68
- return nil , err
68
+ return nil , nil , err
69
69
}
70
70
71
71
// WARN: DON'T check user.IsActive, that will be checked on reqSign so that
72
72
// user could be hint to resend confirm email.
73
73
if user .ProhibitLogin {
74
- return nil , models.ErrUserProhibitLogin {UID : user .ID , Name : user .Name }
74
+ return nil , nil , models.ErrUserProhibitLogin {UID : user .ID , Name : user .Name }
75
75
}
76
76
77
- return user , nil
77
+ return user , source , nil
78
78
}
79
79
80
80
sources , err := models .AllActiveLoginSources ()
81
81
if err != nil {
82
- return nil , err
82
+ return nil , nil , err
83
83
}
84
84
85
85
for _ , source := range sources {
@@ -97,7 +97,7 @@ func UserSignIn(username, password string) (*models.User, error) {
97
97
98
98
if err == nil {
99
99
if ! authUser .ProhibitLogin {
100
- return authUser , nil
100
+ return authUser , source , nil
101
101
}
102
102
err = models.ErrUserProhibitLogin {UID : authUser .ID , Name : authUser .Name }
103
103
}
@@ -109,5 +109,5 @@ func UserSignIn(username, password string) (*models.User, error) {
109
109
}
110
110
}
111
111
112
- return nil , models.ErrUserNotExist {Name : username }
112
+ return nil , nil , models.ErrUserNotExist {Name : username }
113
113
}
0 commit comments