Exemple #1
0
    def unsubscribe(self, topic, hub=None, **kwargs):
        if hub is None:
            hub = get_hub(topic)

        try:
            subscription = Subscription.objects.get(topic=topic, hub=hub)
        except self.model.DoesNotExist:
            return

        subscription.send_request(mode='unsubscribe', **kwargs)
Exemple #2
0
    def unsubscribe(self, topic, hub=None):
        if hub is None:
            hub = get_hub(topic)

        try:
            subscription = Subscription.objects.get(topic=topic, hub=hub)
        except self.model.DoesNotExist:
            return

        subscription.send_request(mode='unsubscribe')
Exemple #3
0
    def subscribe(self, topic, hub=None, **kwargs):
        if hub is None:
            hub = get_hub(topic)

        subscription, created = self.get_or_create(
            hub=hub,
            topic=topic,
            defaults={'secret': generate_random_string(),
                      }
        )

        if (not created and subscription.verified
                and not subscription.has_expired()):
            return subscription

        subscription.send_request(mode='subscribe', **kwargs)
        return subscription
Exemple #4
0
    def subscribe(self, topic, hub=None, lease_seconds=None):
        logger.debug(u'Subscription subscribe: %s | %s', topic, hub)
        if lease_seconds is None:
            lease_seconds = getattr(settings, 'PUSH_LEASE_SECONDS', None)

        if hub is None:
            hub = get_hub(topic)

        subscription, created = self.get_or_create(hub=hub, topic=topic)

        if not created:
            if subscription.verified and not subscription.has_expired():
                return subscription

        if subscription.secret:
            secret = subscription.secret
        else:
            chars = 'abcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*(-_=+)'
            secret = ''.join([random.choice(chars) for i in range(50)])

        params = {
            'mode': 'subscribe',
            'callback': subscription.callback_url,
            'topic': topic,
            'verify': ('async', 'sync'),
            'verify_token': subscription.generate_token('subscribe'),
            'secret': secret,
        }
        if lease_seconds is not None:
            params['lease_seconds'] = lease_seconds
            # If not present, the lease duration is decided by the hub
        response = self.subscription_request(hub, params)

        status = response.code
        logger.debug(u'Subscription subscribe response: %s', response)
        if status in (202, 204):  # 202: deferred verification
            logger.debug(u'Subscription subscribe verified!')
            subscription.verified = True
        else:
            error = response.read()
            logger.debug(u'Subscription subscribe error: %s', error)
            raise SubscriptionError(u'Subscription error on %s: %s' % (topic,
                                                                      error))
        subscription.secret = secret
        subscription.save()
        return subscription
Exemple #5
0
    def subscribe(self, topic, hub=None):
        if hub is None:
            hub = get_hub(topic)

        subscription, created = self.get_or_create(
            hub=hub,
            topic=topic,
            defaults={'secret': generate_random_string(),
                      }
        )

        if (not created and subscription.verified
                and not subscription.has_expired()):
            return subscription

        subscription.send_request(mode='subscribe')
        return subscription
Exemple #6
0
    def unsubscribe(self, topic, hub=None):
        if hub is None:
            hub = get_hub(topic)

        subscription = Subscription.objects.get(topic=topic, hub=hub)

        params = {
            'mode': 'unsubscribe',
            'callback': subscription.callback_url,
            'topic': topic,
            'verify': ('async', 'sync'),
            'verify_token': subscription.generate_token('unsubscribe'),
        }
        response = self.subscription_request(hub, params)

        if not response.code in (202, 204):
            error = response.read()
            raise SubscriptionError(u'Unsubscription error on %s: %s' % (topic,
                                                                        error))