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, })
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, })
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']
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)
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)
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']
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
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))