mirror of https://github.com/jumpserver/jumpserver
				
				
				
			
		
			
				
	
	
		
			53 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Python
		
	
	
| from django.utils.translation import gettext_lazy as _
 | |
| from django.shortcuts import reverse
 | |
| 
 | |
| from .base import BaseMFA
 | |
| 
 | |
| 
 | |
| otp_failed_msg = _("OTP code invalid, or server time error")
 | |
| 
 | |
| 
 | |
| class MFAOtp(BaseMFA):
 | |
|     name = 'otp'
 | |
|     display_name = _('OTP')
 | |
|     placeholder = _('OTP verification code')
 | |
| 
 | |
|     def check_code(self, code):
 | |
|         from users.utils import check_otp_code
 | |
|         assert self.is_authenticated()
 | |
| 
 | |
|         ok = check_otp_code(self.user.otp_secret_key, code)
 | |
|         msg = '' if ok else otp_failed_msg
 | |
|         return ok, msg
 | |
| 
 | |
|     def is_active(self):
 | |
|         if not self.is_authenticated():
 | |
|             return True
 | |
|         return self.user.otp_secret_key
 | |
| 
 | |
|     @staticmethod
 | |
|     def global_enabled():
 | |
|         return True
 | |
| 
 | |
|     def get_enable_url(self) -> str:
 | |
|         return reverse('authentication:user-otp-enable-start')
 | |
| 
 | |
|     def disable(self):
 | |
|         assert self.is_authenticated()
 | |
|         self.user.otp_secret_key = ''
 | |
|         self.user.save(update_fields=['otp_secret_key'])
 | |
| 
 | |
|     def can_disable(self) -> bool:
 | |
|         return True
 | |
| 
 | |
|     def get_disable_url(self):
 | |
|         return reverse('authentication:user-otp-disable')
 | |
| 
 | |
|     @staticmethod
 | |
|     def help_text_of_enable():
 | |
|         return _("Virtual OTP based MFA")
 | |
| 
 | |
|     def help_text_of_disable(self):
 | |
|         return ''
 | |
| 
 |