def connect_device(request): try: user = request.user if not request.user.anonymously: user_agent = request.META.get("HTTP_USER_AGENT", "") device_uid = request.data.get("device_uid", "") if not device_uid: error = { "code": 400, "message": _("The device_uid field is required."), "fields": "device_uid" } return Response(error, status=400) if user_agent: if 'ios' in user_agent.lower(): try: device = APNSDevice.objects.get( registration_id=device_uid) device.user = user device.save() except APNSDevice.DoesNotExist, e: device = APNSDevice(user=user, name=user.email, registration_id=device_uid) device.save() else: try: device = GCMDevice.objects.get( registration_id=device_uid, cloud_message_type="FCM") device.user = user device.save() except GCMDevice.DoesNotExist, e: device = GCMDevice(user=user, name=user.email, registration_id=device_uid, cloud_message_type="FCM") device.save() return Response({'message': _('Connect device successful.')})
def register(request): logging.warn('register') os_type = get_request_var(request, 'os') username = get_request_var(request, 'username') registration_id = get_request_var(request, 'registration_id') if not username: response_dict = error_dict() response_dict['error_code'] = 100 response_dict['error_msg'] = 'Missing username' return render_json(request, response_dict) if not registration_id: response_dict = error_dict() response_dict['error_code'] = 200 response_dict['error_msg'] = 'Missing registration_id' return render_json(request, response_dict) if not os_type: response_dict = error_dict() response_dict['error_code'] = 300 response_dict['error_msg'] = 'Missing os_type' return render_json(request, response_dict) logging.warn('fetching user') user = User.objects.get(username=username) if not user: response_dict = error_dict() response_dict['error_code'] = 400 response_dict['error_msg'] = 'No user' return render_json(request, response_dict) if os_type == 'a': apns_device = None try: apns_device = APNSDevice.objects.get(user=user) logging.warn('apns device already registered') except: logging.exception('error getting apns device') logging.warn('no existing apns device') if apns_device: if registration_id != apns_device.registration_id: logging.warn('updating apns device with new registration_id') apns_device.registration_id = registration_id apns_device.save() else: logging.warn('creating apns device') try: apns_device = APNSDevice() apns_device.user = user apns_device.name = user.first_name apns_device.registration_id = registration_id apns_device.save() except: logging.exception('error creating apns device') response_dict = error_dict() response_dict['error_code'] = 500 response_dict['error_msg'] = 'Error creating apns device' return render_json(request, response_dict) elif os_type == 'g': gcm_device = None try: gcm_device = GCMDevice.objects.get(user=user) logging.warn('gcm device already registered') except: logging.exception('error getting gcm device') logging.warn('no existing gcm device') if gcm_device: if registration_id != gcm_device.registration_id: logging.warn('updating gcm device with new registration_id') gcm_device.registration_id = registration_id gcm_device.save() else: logging.warn('creating gcm device') try: gcm_device = GCMDevice() gcm_device.user = user gcm_device.name = user.first_name gcm_device.registration_id = registration_id gcm_device.save() except: logging.exception('error creating gcm device') response_dict = error_dict() response_dict['error_code'] = 500 response_dict['error_msg'] = 'Error creating gcm device' return render_json(request, response_dict) else: response_dict = error_dict() response_dict['error_code'] = 600 response_dict['error_msg'] = 'Unrecognized os_type' return render_json(request, response_dict) logging.warn('registration done') response_dict = success_dict() return render_json(request, response_dict)