@@ -21,13 +21,15 @@ type Handlers struct {
21
21
AuthService * services.AuthService
22
22
PermissionService * services.PermissionService
23
23
MailGunService * services.MailgunService
24
+ UserService * services.UserService
24
25
}
25
26
26
- func NewAuthHandlers (authService * services.AuthService , permissionService * services.PermissionService , MailGunService * services.MailgunService ) * Handlers {
27
+ func NewAuthHandlers (authService * services.AuthService , permissionService * services.PermissionService , MailGunService * services.MailgunService , userService * services. UserService ) * Handlers {
27
28
return & Handlers {
28
29
AuthService : authService ,
29
30
PermissionService : permissionService ,
30
31
MailGunService : MailGunService ,
32
+ UserService : userService ,
31
33
}
32
34
}
33
35
@@ -135,9 +137,11 @@ func validateEmail(email, suffix string) error {
135
137
}
136
138
137
139
func (h * Handlers ) Login (c * gin.Context ) {
138
- var loginRequest models.User
139
-
140
- log .Println ("before bind json" )
140
+ var loginRequest struct {
141
+ Username string `json:"username"`
142
+ Password string `json:"password"`
143
+ Passcode * string `json:"passcode"`
144
+ }
141
145
142
146
if err := c .BindJSON (& loginRequest ); err != nil {
143
147
c .JSON (http .StatusBadRequest , gin.H {"success" : false , "message" : []string {err .Error ()}})
@@ -153,6 +157,29 @@ func (h *Handlers) Login(c *gin.Context) {
153
157
return
154
158
}
155
159
160
+ // If there is no passcode, but 2FA is enabled, return otp required
161
+ if loginRequest .Passcode == nil {
162
+
163
+ if user .TwoFAEnabled {
164
+ c .JSON (http .StatusUnauthorized , gin.H {"success" : false , "message" : "Two Factor Authentication Required" })
165
+ return
166
+ }
167
+ }
168
+
169
+ if loginRequest .Passcode != nil {
170
+ if ! user .TwoFAEnabled {
171
+ c .JSON (http .StatusBadRequest , gin.H {"success" : false , "message" : "2FA is not enabled for this account" })
172
+ return
173
+ }
174
+
175
+ _ , err := h .UserService .VerifyTwoFA (user .ID , * loginRequest .Passcode )
176
+ if err != nil {
177
+ c .JSON (http .StatusBadRequest , gin.H {"success" : false , "message" : "Invalid 2FA Code" })
178
+ return
179
+ }
180
+
181
+ }
182
+
156
183
// Check if the usernameOrEmail is an email
157
184
if utils .IsEmail (loginRequest .Username ) {
158
185
if err := h .AuthService .ValidateEmail (loginRequest .Username ); err != nil {
0 commit comments