Ejemplo n.º 1
0
    def authenticate(self, request=None, code=None, is_wechat=True):
        """
        is_wechat 参数是为了使得 WeixinBackend 与其他 Backend 参数个数不同,在框架选择
        认证 backend 时,快速定位
        """
        logger.debug(u"进入 WEIXIN 认证 Backend")
        if not code:
            return None

        result, user_info = self.verify_weixin_code(code)
        logger.debug(u"微信 CODE 验证结果,result:%s,user_info:%s" %
                     (result, user_info))

        if not result:
            return None

        user_model = get_user_model()
        try:
            user, _ = user_model.objects.get_or_create(
                username=user_info['username'])
            user.nickname = user_info['username']
            user.avatar_url = user_info['avatar']
            user.save()
        except Exception:
            logger.exception(u"自动创建 & 更新 User Model 失败")
        else:
            return user
Ejemplo n.º 2
0
    def authenticate(self, request=None):
        logger.debug(u"进入 BK_JWT 认证 Backend")

        try:
            verify_data = self.verify_bk_jwt_request(request)
        except Exception as e:
            logger.exception(u"[BK_JWT]校验异常: %s" % e)
            return None

        if not verify_data['result'] or not verify_data['data']:
            logger.error(u"BK_JWT 验证失败: %s" % (verify_data))
            return None

        user_info = verify_data['data']['user']
        user_model = get_user_model()
        try:
            user, _ = user_model.objects.get_or_create(
                username=user_info['bk_username'])
            user.nickname = user_info['bk_username']
            user.save()
        except Exception as e:
            logger.exception(u"自动创建 & 更新 User Model 失败: %s" % e)
            return None

        return user
Ejemplo n.º 3
0
    def authenticate(self, request=None):
        logger.debug(u"进入 BK_JWT 认证 Backend")

        try:
            verify_data = self.verify_bk_jwt_request(request)
        except Exception as err:  # pylint: disable=broad-except
            logger.exception(u"[BK_JWT]校验异常: %s" % err)
            return None

        if not verify_data["result"] or not verify_data["data"]:
            logger.error(u"BK_JWT 验证失败: %s" % verify_data)
            return None

        user_info = verify_data["data"]["user"]
        user_model = get_user_model()
        try:
            user, _ = user_model.objects.get_or_create(
                username=user_info["bk_username"])
            user.nickname = user_info["bk_username"]
            user.save()
        except Exception as err:  # pylint: disable=broad-except
            logger.exception(u"自动创建 & 更新 User Model 失败: %s" % err)
            return None

        return user
Ejemplo n.º 4
0
def get_bk_user(request):
    bkuser = None
    if request.weixin_user and not isinstance(request.weixin_user, AnonymousUser):
        user_model = get_user_model()
        try:
            user_property = UserProperty.objects.get(key='wx_userid', value=request.weixin_user.userid)
        except UserProperty.DoesNotExist:
            logger.warning('user[wx_userid=%s] not in UserProperty' % request.weixin_user.userid)
        else:
            bkuser = user_model.objects.get(username=user_property.user.username)
    return bkuser or AnonymousUser()
Ejemplo n.º 5
0
    def authenticate(self, request=None, bk_token=None):
        logger.debug(u"Enter in TokenBackend")
        # 判断是否传入验证所需的bk_token,没传入则返回None
        if not bk_token:
            return None

        verify_result, username = self.verify_bk_token(bk_token)
        # 判断bk_token是否验证通过,不通过则返回None
        if not verify_result:
            return None

        user_model = get_user_model()
        try:
            user, _ = user_model.objects.get_or_create(username=username)
            get_user_info_result, user_info = self.get_user_info(bk_token)
            # 判断是否获取到用户信息,获取不到则返回None
            if not get_user_info_result:
                return None
            user.set_property(key='qq', value=user_info.get('qq', ''))
            user.set_property(key='language',
                              value=user_info.get('language', ''))
            user.set_property(key='time_zone',
                              value=user_info.get('time_zone', ''))
            user.set_property(key='role', value=user_info.get('role', ''))
            user.set_property(key='phone', value=user_info.get('phone', ''))
            user.set_property(key='email', value=user_info.get('email', ''))
            user.set_property(key='wx_userid',
                              value=user_info.get('wx_userid', ''))
            user.set_property(key='chname', value=user_info.get('chname', ''))

            # 用户如果不是管理员,则需要判断是否存在平台权限,如果有则需要加上
            if not user.is_superuser and not user.is_staff:
                role = user_info.get('role', '')
                is_admin = True if str(role) == ROLE_TYPE_ADMIN else False
                user.is_superuser = is_admin
                user.is_staff = is_admin
                user.save()

            return user

        except IntegrityError:
            logger.exception(traceback.format_exc())
            logger.exception(
                u"get_or_create UserModel fail or update_or_create UserProperty"
            )
            return None
        except Exception:
            logger.exception(traceback.format_exc())
            logger.exception(u"Auto create & update UserModel fail")
            return None
Ejemplo n.º 6
0
def get_component_client_common_args():
    """
    获取ComponentClient需要的common_args
    @return:
    {
        bk_username = '******'
    }
    @rtype: dict
    """
    try:
        last_login_user = get_user_model().objects.all().order_by("-last_login")[0]
    except IndexError:
        logger.exception("There is not a last_login_user")
        raise IndexError("There is not a last_login_user")
    username = last_login_user.username
    return dict(bk_username=username)
Ejemplo n.º 7
0
def get_component_client_common_args():
    """
    获取ComponentClient需要的common_args
    @return:
    {
        access_token = 'xxx'
    }
    @rtype: dict
    """
    try:
        last_login_user = get_user_model().objects.all().order_by("-last_login")[0]
    except IndexError:
        logger.warn("There is not a last_login_user")
        raise IndexError("There is not a last_login_user")
    access_token = get_access_token_by_user(last_login_user.username).access_token
    return dict(access_token=access_token)
Ejemplo n.º 8
0
 def get_user(self, user_id):
     user_model = get_user_model()
     try:
         return user_model.objects.get(pk=user_id)
     except user_model.DoesNotExist:
         return None