1919from u2flib_server import u2f
2020from .forms import *
2121
22-
2322class OriginMixin (object ):
2423def get_origin (self ):
2524return '{scheme}://{host}' .format (
@@ -92,6 +91,7 @@ def _generate_cookie_salt(user):
9291try :
9392otp_ = UserOTP .objects .get (user = user )
9493except UserOTP .DoesNotExist :
94+ # TODO: probably needs to be return ''. Can't remember why though
9595return None
9696# out of paranoia only use half the secret to generate the salt
9797uselen = int (len (otp_ .secret_key )/ 2 )
@@ -156,7 +156,7 @@ def disable_mfa(request):
156156user_mfa .delete ()
157157messages .success (
158158request ,"You have successfully disabled multi-factor authentication on your account." )
159- response = redirect (reverse ( 'mfa:configure_mfa' ) )
159+ response = redirect (settings . LOGIN_REDIRECT_URL )
160160return delete_rmb_cookie (request ,response )
161161return render (request ,'django_mfa/disable_mfa.html' )
162162
@@ -206,7 +206,7 @@ def verify_second_factor_totp(request):
206206
207207def generate_user_recovery_codes (user_id ):
208208no_of_recovery_codes = 10
209- size_of_recovery_code = 16
209+ size_of_recovery_code = MFA_RECOVERY_CODE_LENGTH
210210recovery_codes_list = []
211211chars = string .ascii_uppercase + string .digits + string .ascii_lowercase
212212while (no_of_recovery_codes > 0 ):
@@ -231,7 +231,7 @@ def recovery_codes(request):
231231user = UserOTP .objects .get (user = request .user .id ))
232232else :
233233codes = generate_user_recovery_codes (request .user .id )
234- next_url = settings .LOGIN_REDIRECT_URL
234+ next_url = resolve_url ( settings .LOGIN_REDIRECT_URL )
235235return render (request ,"django_mfa/recovery_codes.html" , {"codes" :codes ,"next_url" :next_url })
236236else :
237237return HttpResponse ("please enable twofactor_authentication!" )
@@ -242,9 +242,12 @@ def verify_second_factor(request):
242242if request .method == "GET" :
243243twofactor_enabled = is_mfa_enabled (request .user )
244244u2f_enabled = is_u2f_enabled (request .user )
245- if twofactor_enabled or u2f_enabled :
245+ if twofactor_enabled and u2f_enabled :
246246return render (request ,'django_mfa/verify_second_factor.html' , {"u2f_enabled" :u2f_enabled ,"twofactor_enabled" :twofactor_enabled })
247-
247+ if u2f_enabled :
248+ return redirect ("mfa:verify_second_factor_u2f" )
249+ if twofactor_enabled :
250+ return redirect ("mfa:verify_second_factor_totp" )
248251
249252@login_required
250253def recovery_codes_download (request ):