Ejemplo n.º 1
0
 async def receive(self, text_data):
     text_data_json = json.loads(text_data)
     profile = Profile.objects.get(pk=text_data_json['sender'])
     room = ChatRoom.objects.get(pk=text_data_json['room'])
     for user in room.user.all():
         if user.id != profile.id:
             for device in user.device_set.all():
                 send_fcm(device, {
                     'title': '메시지 알림',
                     'body': '채팅에 새로운 메시지가 있습니다.',
                     'icon': '/assets/logo.png',
                     'click_action': '/dashboard/chat/' + str(room.id)
                 },
                          data={
                              'type': 'message',
                              'room': room.id
                          })
     message = ChatMessage(room=room,
                           created=text_data_json['created'],
                           sender=profile,
                           content=text_data_json['content'])
     message.save()
     message_ser = getSerializer(ChatMessage)(message)
     profile_ser = getSerializer(Profile)(profile)
     out = message_ser.data
     out['sender'] = profile_ser.data
     await self.channel_layer.group_send(self.room_group_name, {
         'type': 'room_message',
         'message': out
     })
Ejemplo n.º 2
0
 def create(self, request, *args, **kwargs):
     sns = request.data['sns']
     uid = request.data['uid']
     token = request.data['token']
     name = request.data['name']
     username = request.data['email'] if 'email' in request.data else sns + '@' + uid
     if sns == 'google':
         r = requests.get('https://www.googleapis.com/oauth2/v1/userinfo?alt=json',headers={
             'Authorization': 'Bearer '+token})
     elif sns == 'facebook':
         r = requests.get('https://graph.facebook.com/v6.0/me/?access_token='+token)
     elif sns == 'naver':
         r = requests.get('https://openapi.naver.com/v1/nid/me', headers={
             'Authorization':'Bearer '+token})
     elif sns == 'kakao':
         r = requests.get('https://kapi.kakao.com/v2/user/me',headers={
             'Authorization':'Bearer '+token})
     if r.status_code != 200:
         return Response({'message':'fail to authenticate'}, status=status.HTTP_401_UNAUTHORIZED)
     user = User.objects.filter(username=username)
     if user.count() == 0:
         user = User(username=username)
         password = User.objects.make_random_password()
         user.set_password(password)
         user.is_active = True
         user.save()
         profile = Profile(user=user, name=name)
         profile.save()
     user = User.objects.get(username=username)
     jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
     jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER
     payload = jwt_payload_handler(user)
     token = jwt_encode_handler(payload)
     serializer = getSerializer(Profile)
     refresh_token = None
     fcm_token = 'noToken'
     if 'fcm_token' in request.data:
         fcm_token = request.data['fcm_token']
     if 'type' in request.data:
         type = request.data['type']
         devices = user.profile.device_set.filter(type=type)
         if devices.count() > 0:
             device = devices[0]
             device.fcm_token = fcm_token
             device.refresh_token = User.objects.make_random_password(length=20)
             device.save()
         else:
             device = Device(fcm_token=fcm_token,
                 profile=user.profile,
                 refresh_token=User.objects.make_random_password(length=20),
                 type=type)
             device.save()
         refresh_token = device.refresh_token
     return Response({
         'token':token, 
         'profile':serializer(user.profile).data,
         'refresh_token':refresh_token
     }, status=status.HTTP_200_OK)
Ejemplo n.º 3
0
 def from_celery(self, data):
     works = TaskWork.objects.filter(
         taskclient__channel_name=self.channel_name)
     if works.count() > 0:
         self.send(
             text_data=json.dumps(getSerializer(TaskWork)(works[0]).data))