@@ -182,45 +182,6 @@ func LoginResolver(ctx context.Context, params model.LoginInput) (*model.AuthRes
182182 }
183183 return otpData , nil
184184 }
185- // If mfa enabled and also totp enabled
186- // first priority is given to totp
187- if refs .BoolValue (user .IsMultiFactorAuthEnabled ) && ! isMFADisabled && ! isTOTPLoginDisabled {
188- expiresAt := time .Now ().Add (3 * time .Minute ).Unix ()
189- if err := setOTPMFaSession (expiresAt ); err != nil {
190- log .Debug ("Failed to set mfa session: " , err )
191- return nil , err
192- }
193- authenticator , err := db .Provider .GetAuthenticatorDetailsByUserId (ctx , user .ID , constants .EnvKeyTOTPAuthenticator )
194- // Check if it's the first time user or if their TOTP is not verified
195- if err != nil || ((authenticator == nil ) || (authenticator != nil && authenticator .VerifiedAt == nil )) {
196- // Generate a base64 URL and initiate the registration for TOTP
197- authConfig , err := authenticators .Provider .Generate (ctx , user .ID )
198- if err != nil {
199- log .Debug ("error while generating base64 url: " , err )
200- return nil , err
201- }
202- recoveryCodes := []* string {}
203- for _ , code := range authConfig .RecoveryCodes {
204- recoveryCodes = append (recoveryCodes , refs .NewStringRef (code ))
205- }
206- // when user is first time registering for totp
207- res = & model.AuthResponse {
208- Message : `Proceed to totp verification screen` ,
209- ShouldShowTotpScreen : refs .NewBoolRef (true ),
210- AuthenticatorScannerImage : refs .NewStringRef (authConfig .ScannerImage ),
211- AuthenticatorSecret : refs .NewStringRef (authConfig .Secret ),
212- AuthenticatorRecoveryCodes : recoveryCodes ,
213- }
214- return res , nil
215- } else {
216- //when user is already register for totp
217- res = & model.AuthResponse {
218- Message : `Proceed to totp screen` ,
219- ShouldShowTotpScreen : refs .NewBoolRef (true ),
220- }
221- return res , nil
222- }
223- }
224185 // If multi factor authentication is enabled and is email based login and email otp is enabled
225186 if refs .BoolValue (user .IsMultiFactorAuthEnabled ) && ! isMFADisabled && ! isMailOTPDisabled && isEmailServiceEnabled && isEmailLogin {
226187 expiresAt := time .Now ().Add (1 * time .Minute ).Unix ()
@@ -275,6 +236,44 @@ func LoginResolver(ctx context.Context, params model.LoginInput) (*model.AuthRes
275236 ShouldShowMobileOtpScreen : refs .NewBoolRef (isMobileLogin ),
276237 }, nil
277238 }
239+ // If mfa enabled and also totp enabled
240+ if refs .BoolValue (user .IsMultiFactorAuthEnabled ) && ! isMFADisabled && ! isTOTPLoginDisabled {
241+ expiresAt := time .Now ().Add (3 * time .Minute ).Unix ()
242+ if err := setOTPMFaSession (expiresAt ); err != nil {
243+ log .Debug ("Failed to set mfa session: " , err )
244+ return nil , err
245+ }
246+ authenticator , err := db .Provider .GetAuthenticatorDetailsByUserId (ctx , user .ID , constants .EnvKeyTOTPAuthenticator )
247+ // Check if it's the first time user or if their TOTP is not verified
248+ if err != nil || ((authenticator == nil ) || (authenticator != nil && authenticator .VerifiedAt == nil )) {
249+ // Generate a base64 URL and initiate the registration for TOTP
250+ authConfig , err := authenticators .Provider .Generate (ctx , user .ID )
251+ if err != nil {
252+ log .Debug ("error while generating base64 url: " , err )
253+ return nil , err
254+ }
255+ recoveryCodes := []* string {}
256+ for _ , code := range authConfig .RecoveryCodes {
257+ recoveryCodes = append (recoveryCodes , refs .NewStringRef (code ))
258+ }
259+ // when user is first time registering for totp
260+ res = & model.AuthResponse {
261+ Message : `Proceed to totp verification screen` ,
262+ ShouldShowTotpScreen : refs .NewBoolRef (true ),
263+ AuthenticatorScannerImage : refs .NewStringRef (authConfig .ScannerImage ),
264+ AuthenticatorSecret : refs .NewStringRef (authConfig .Secret ),
265+ AuthenticatorRecoveryCodes : recoveryCodes ,
266+ }
267+ return res , nil
268+ } else {
269+ //when user is already register for totp
270+ res = & model.AuthResponse {
271+ Message : `Proceed to totp screen` ,
272+ ShouldShowTotpScreen : refs .NewBoolRef (true ),
273+ }
274+ return res , nil
275+ }
276+ }
278277
279278 code := ""
280279 codeChallenge := ""
0 commit comments