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 ''
 | 
						|
 |