Пример #1
0
 def create(self, validated_data):
     openid = validated_data['openid']
     platform = validated_data['platform']
     status, ret = AppPlatform().auth(**validated_data)
     if not status:
         raise serializers.ValidationError(ret['error_msg'])
     instance, _ = platform_model.objects.get_or_create(
         openid=openid, platform=platform, defaults={"extra_info": ret})
     user = None
     if instance.user_id:
         user = User.objects.filter(id=instance.user_id).first()
     if not user:
         is_send, code = CodeMsg("{}_{}".format(platform, openid),
                                 _type="platform_signup").get_new_code()
         return DictInstance(
             **validated_data, **{
                 "is_register": False,
                 "token": None,
                 "extra_info": ret,
                 "platform_code": code,
             })
     else:
         token = user.get_new_token()
         return DictInstance(
             **validated_data, **{
                 "is_register": True,
                 "token": token,
                 "extra_info": ret,
                 "platform_code": None,
             })
Пример #2
0
    def create(self, validated_data):
        platform = validated_data['platform']
        cls = MINIAPP_PLATFORM_MAP.get(platform)
        appid, _ = cls()._get_appinfo()
        # TODO: add other nimi app support, wechat miniapp only
        openid, extra_info = self.wxminiapp_decrypt(cls, validated_data, appid)

        instance, _ = platform_model.objects.get_or_create(
            openid=openid,
            platform=platform,
            defaults={"extra_info": extra_info})
        user = None
        if instance.user_id:
            user = User.objects.filter(id=instance.user_id).first()
        if not user:
            is_send, code = CodeMsg("{}_{}".format(platform, openid),
                                    _type="platform_signup").get_new_code()
            return DictInstance(
                **validated_data, **{
                    "is_register": False,
                    "token": None,
                    "extra_info": extra_info,
                    "platform_code": code,
                })
        else:
            token = user.get_new_token()
            return DictInstance(
                **validated_data, **{
                    "is_register": True,
                    "token": token,
                    "extra_info": extra_info,
                    "platform_code": None,
                })
Пример #3
0
    def test_signin_platform(self, rf, mocker, user_data_init):
        url = '{}/user/signin-platform/'.format(self.url)

        req_data = {
            'openid': 'test_openid',
            'access_token': 'test_token',
            'platform': 'wechat',
        }
        mocker.patch(
            "qx_platform_auth.socialapps.requests.get",
            return_value=DictInstance(text=json.dumps({"errcode": 0})))
        request = rf.post(url, data=req_data, content_type='application/json')
        response = self.viewset.as_view({'post': 'signin_platform'})(request)
        assert response.status_code == 200
        data = json.loads(response.content)
        assert not data['data']['is_register']

        user = User.objects.all().first()
        UserPlatform.objects.filter(openid='test_openid').update(
            user_id=user.id)

        request = rf.post(url, data=req_data, content_type='application/json')
        response = self.viewset.as_view({'post': 'signin_platform'})(request)
        data = json.loads(response.content)
        assert data['data']['token']
Пример #4
0
 def create(self, validated_data):
     _type = validated_data.get('type', None)
     if _type:
         UserMessage.objects.filter(
             type=_type,
             user_id=self.context['request'].user.id,
         ).update(is_read=True)
     else:
         UserMessage.objects.filter(
             user_id=self.context['request'].user.id, ).update(is_read=True)
     return DictInstance(data=validated_data)
Пример #5
0
    def create(self, validated_data):
        status, ret = AppPlatform().auth(**validated_data)
        if not status:
            raise serializers.ValidationError(ret['error_msg'])
        instance, _ = platform_model.objects.get_or_create(
            openid=validated_data['openid'],
            platform=validated_data['platform'],
            defaults={"extra_info": ret})

        instance.user_id = self.context['request'].user.id
        instance.save()
        return DictInstance(id=instance.id, **validated_data)
Пример #6
0
    def test_signup_platform(self, rf, mocker, user_data_init):
        url = '{}/user/signin-platform/'.format(self.url)

        req_data = {
            'openid': 'test_openid',
            'access_token': 'test_token',
            'platform': 'wechat',
        }
        mocker.patch(
            "qx_platform_auth.socialapps.requests.get",
            return_value=DictInstance(text=json.dumps({"errcode": 0})))
        request = rf.post(url, data=req_data, content_type='application/json')
        response = self.viewset.as_view({'post': 'signin_platform'})(request)
        data = json.loads(response.content)
        assert data['data']['platform_code']

        url = '{}/user/signup-platform/'.format(self.url)

        req_data = {
            "openid": "test_openid",
            "mobile": '18866668000',
            "password": "******",
            'platform': 'wechat',
            "platform_code": data['data']['platform_code'],
            "userinfo": {
                "name": "test_user",
                "age": 15,
            }
        }

        mocker.patch(
            "qx_platform_auth.socialapps.requests.get",
            return_value=DictInstance(text=json.dumps({"errcode": 0})))
        request = rf.post(url, data=req_data, content_type='application/json')
        # request = signin_request(url, "post", data=data)
        response = self.viewset.as_view({'post': 'signup_platform'})(request)
        assert response.status_code == 200
        data = json.loads(response.content)
        assert data['data']['token']
Пример #7
0
    def test_bind(self, mocker, signin_request):
        url = '{}/user/signin-platform/'.format(self.url)

        url = '{}/platform/'.format(self.url)

        req_data = {
            'openid': 'test_openid',
            'access_token': 'test_token',
            'platform': 'wechat',
        }

        mocker.patch(
            "qx_platform_auth.socialapps.requests.get",
            return_value=DictInstance(text=json.dumps({"errcode": 0})))
        request = signin_request(url, 'post', data=req_data)

        response = self.viewset.as_view({'post': 'create'})(request)
        data = json.loads(response.content)
        assert data['data']['id']

        request = signin_request(url, 'get')

        response = self.viewset.as_view({'get': 'list'})(request)
        data = json.loads(response.content)
        assert data['data'][0]

        del_url = '{}/platform/{}/'.format(self.url, data['data'][0]['id'])
        request = signin_request(del_url, 'delete')
        response = self.viewset.as_view({'delete':
                                         'destroy'})(request,
                                                     pk=data['data'][0]['id'])
        data = json.loads(response.content)
        assert data['code'] == 200

        request = signin_request(url, 'get')
        response = self.viewset.as_view({'get': 'list'})(request)
        data = json.loads(response.content)
        assert len(data['data']) == 0
Пример #8
0
QX_USERMESSAGE_SETTINGS = {
    "message_send_callback": lambda m: m,
    "message_object_map": None,
    "message_user_serializer": None,
    "has_userinfo": True,
}

_b_settings = QX_USERMESSAGE_SETTINGS

_settings = getattr(settings, 'QX_USERMESSAGE_SETTINGS',
                    QX_USERMESSAGE_SETTINGS)

if _settings:
    _b_settings.update(_settings)


def get_attr(key, val):
    if key in IMPORT_LIST:
        if val:
            if isinstance(val, str):
                return import_string(val)
            else:
                return val
    return val


usermessage_settings = DictInstance(**QX_USERMESSAGE_SETTINGS)
for key, val in _b_settings.items():
    setattr(usermessage_settings, key, get_attr(key, val))