예제 #1
0
    def __init__(self, error, username, ip, request):
        super().__init__(error=error, username=username, ip=ip, request=request)
        util = LoginBlockUtil(username, ip)
        times_remainder = util.get_remainder_times()
        block_time = settings.SECURITY_LOGIN_LIMIT_TIME

        default_msg = invalid_login_msg.format(
            times_try=times_remainder, block_time=block_time
        )
        if error == reason_password_failed:
            self.msg = default_msg
        else:
            self.msg = reason_choices.get(error, default_msg)
예제 #2
0
    def check_user_auth(self, valid_data=None):
        # pre check
        self.check_is_block()
        username, password, public_key, ip, auto_login = self.get_auth_data(
            valid_data)
        self._check_only_allow_exists_user_auth(username)

        # check auth
        user = self._check_auth_user_is_valid(username, password, public_key)

        # 校验login-acl规则
        self._check_login_acl(user, ip)

        # post check
        self._check_password_require_reset_or_not(user)
        self._check_passwd_is_too_simple(user, password)
        self._check_passwd_need_update(user)

        # 校验login-mfa, 如果登录页面上显示 mfa 的话
        self._check_login_page_mfa_if_need(user)

        # 标记密码验证成功
        self.mark_password_ok(user=user, auto_login=auto_login)
        LoginBlockUtil(user.username, ip).clean_failed_count()
        LoginIpBlockUtil(ip).clean_block_if_need()
        return user
예제 #3
0
 def login_blocked(self):
     from users.utils import LoginBlockUtil, MFABlockUtils
     if LoginBlockUtil.is_user_block(self.username):
         return True
     if MFABlockUtils.is_user_block(self.username):
         return True
     return False
예제 #4
0
 def _check_is_block(self, username, raise_exception=True):
     ip = self.get_request_ip()
     if LoginBlockUtil(username, ip).is_block():
         logger.warn('Ip was blocked' + ': ' + username + ':' + ip)
         exception = errors.BlockLoginError(username=username, ip=ip)
         if raise_exception:
             raise errors.BlockLoginError(username=username, ip=ip)
         else:
             return exception
예제 #5
0
 def check_is_block(self, raise_exception=True):
     if hasattr(self.request, 'data'):
         username = self.request.data.get("username")
     else:
         username = self.request.POST.get("username")
     ip = self.get_request_ip()
     if LoginBlockUtil(username, ip).is_block():
         logger.warn('Ip was blocked' + ': ' + username + ':' + ip)
         exception = errors.BlockLoginError(username=username, ip=ip)
         if raise_exception:
             raise errors.BlockLoginError(username=username, ip=ip)
         else:
             return exception
예제 #6
0
    def check_oauth2_auth(self, user: User, auth_backend):
        ip = self.get_request_ip()
        request = self.request

        self._set_partial_credential_error(user.username, ip, request)
        self._check_is_local_user(user)
        self._check_is_block(user.username)
        self._check_login_acl(user, ip)

        LoginBlockUtil(user.username, ip).clean_failed_count()
        MFABlockUtils(user.username, ip).clean_failed_count()

        request.session['auth_password'] = 1
        request.session['user_id'] = str(user.id)
        request.session['auth_backend'] = auth_backend
        return user
예제 #7
0
    def check_oauth2_auth(self, user: User, auth_backend):
        ip = self.get_request_ip()
        request = self.request

        self._set_partial_credential_error(user.username, ip, request)

        if user.is_expired:
            self.raise_credential_error(errors.reason_user_expired)
        elif not user.is_active:
            self.raise_credential_error(errors.reason_user_inactive)

        self._check_is_block(user.username)
        self._check_login_acl(user, ip)

        LoginBlockUtil(user.username, ip).clean_failed_count()
        LoginIpBlockUtil(ip).clean_block_if_need()
        MFABlockUtils(user.username, ip).clean_failed_count()

        self.mark_password_ok(user, False)
        return user
예제 #8
0
    def check_user_auth(self, decrypt_passwd=False):
        self.check_is_block()
        request = self.request
        username, password, public_key, ip, auto_login = self.get_auth_data(
            decrypt_passwd=decrypt_passwd)

        self._check_only_allow_exists_user_auth(username)
        user = self._check_auth_user_is_valid(username, password, public_key)
        # 校验login-acl规则
        self._check_login_acl(user, ip)
        self._check_password_require_reset_or_not(user)
        self._check_passwd_is_too_simple(user, password)

        LoginBlockUtil(username, ip).clean_failed_count()
        request.session['auth_password'] = 1
        request.session['user_id'] = str(user.id)
        request.session['auto_login'] = auto_login
        request.session['auth_backend'] = getattr(user, 'backend',
                                                  settings.AUTH_BACKEND_MODEL)
        return user
예제 #9
0
    def check_oauth2_auth(self, user: User, auth_backend):
        ip = self.get_request_ip()
        request = self.request

        self._set_partial_credential_error(user.username, ip, request)

        if user.is_expired:
            self.raise_credential_error(errors.reason_user_expired)
        elif not user.is_active:
            self.raise_credential_error(errors.reason_user_inactive)

        self._check_is_block(user.username)
        self._check_login_acl(user, ip)

        LoginBlockUtil(user.username, ip).clean_failed_count()
        MFABlockUtils(user.username, ip).clean_failed_count()

        request.session['auth_password'] = 1
        request.session['user_id'] = str(user.id)
        request.session['auth_backend'] = auth_backend
        return user
예제 #10
0
 def perform_update(self, serializer):
     user = self.get_object()
     username = user.username if user else ''
     LoginBlockUtil.unblock_user(username)
     MFABlockUtils.unblock_user(username)
예제 #11
0
 def __init__(self, *args, **kwargs):
     super().__init__(*args, **kwargs)
     LoginBlockUtil(self.username, self.ip).incr_failed_count()
예제 #12
0
파일: user.py 프로젝트: ZaXk/jumpserver
 def unblock_login(self):
     from users.utils import LoginBlockUtil, MFABlockUtils
     LoginBlockUtil.unblock_user(self.username)
     MFABlockUtils.unblock_user(self.username)