コード例 #1
0
ファイル: test_schemas.py プロジェクト: gs-gs/libtrustbridge
def test_form__when_callback_missing__should_return_error():
    with pytest.raises(ValidationError) as exc:
        SubscriptionForm().load({
            "hub.topic": "topic",
            "hub.mode": "subscribe",
        })
    assert exc.value.messages == {'hub.callback': ['Missing data for required field.']}
コード例 #2
0
ファイル: test_schemas.py プロジェクト: gs-gs/libtrustbridge
def test_form_lease_seconds__when_missing__should_be_5_days():
    loaded = SubscriptionForm().load({
        "hub.callback": "http://callback.com",
        "hub.topic": "topic",
        "hub.mode": "subscribe",
    })
    assert loaded['lease_seconds'] == 5 * 24 * 3600
コード例 #3
0
ファイル: test_schemas.py プロジェクト: gs-gs/libtrustbridge
def test_form__when_invalid_mode__should_return_error():
    with pytest.raises(ValidationError) as exc:
        SubscriptionForm().load({
            "hub.callback": "https://callback.com",
            "hub.topic": "topic",
            "hub.mode": "please subscribe me",
        })
    assert exc.value.messages == {'hub.mode': ['Must be one of: subscribe, unsubscribe.']}
コード例 #4
0
ファイル: test_schemas.py プロジェクト: gs-gs/libtrustbridge
def test_form__when_callback_invalid_url__should_return_error(url):
    with pytest.raises(ValidationError) as exc:
        SubscriptionForm().load({
            "hub.callback": url,
            "hub.topic": "topic",
            "hub.mode": "subscribe",
        })
    assert exc.value.messages == {'hub.callback': ['Not a valid URL.']}
コード例 #5
0
    def dispatch_request(self):
        try:
            form_data = SubscriptionForm().load(request.form.to_dict())
        except marshmallow.ValidationError as e:  # TODO integrate marshmallow and libtrustbridge.errors.handlers
            return JsonResponse(e.messages, status=HTTPStatus.BAD_REQUEST)

        current_app.logger.info("Subscription request received: %s", form_data)

        topic = self.get_topic(form_data)
        callback = form_data['callback']
        mode = form_data['mode']
        lease_seconds = form_data['lease_seconds']
        try:
            self.verify(callback, mode, topic, lease_seconds)
        except IntentVerificationFailure:
            current_app.logger.error("Intent verification failed for the %s",
                                     form_data.get("callback"))
            return JsonResponse({'error': 'Intent verification failed'},
                                status=HTTPStatus.BAD_REQUEST)

        if mode == MODE_ATTR_SUBSCRIBE_VALUE:
            current_app.logger.info("Subscribed %s to %s",
                                    form_data.get("callback"),
                                    form_data.get("topic"))
            self._subscribe(callback, topic, lease_seconds)
        else:
            current_app.logger.info("Unsubscribed %s from %s",
                                    form_data.get("callback"),
                                    form_data.get("topic"))
            self._unsubscribe(callback, topic)

        return JsonResponse(status=HTTPStatus.ACCEPTED)
コード例 #6
0
ファイル: test_schemas.py プロジェクト: gs-gs/libtrustbridge
def test_form__when_too_big_secret__should_return_error():
    with pytest.raises(ValidationError) as exc:
        SubscriptionForm().load({
            "hub.callback": "https://callback.com",
            "hub.topic": "topic",
            "hub.mode": "subscribe",
            "hub.secret": "x" * 201,
        })
    assert exc.value.messages == {'hub.secret': ['Longer than maximum length 200.']}
コード例 #7
0
ファイル: test_schemas.py プロジェクト: gs-gs/libtrustbridge
def test_form__when_additional_params__should_ignore():
    loaded = SubscriptionForm().load({
        "hub.callback": "http://callback.com",
        "hub.topic": "topic",
        "hub.mode": "unsubscribe",
        "ignore": "me",

    })

    assert "ignore" not in loaded
コード例 #8
0
ファイル: test_schemas.py プロジェクト: gs-gs/libtrustbridge
def test_form__when_valid__should_return_loaded_data():
    loaded = SubscriptionForm().load({
        "hub.callback": "http://callback.com",
        "hub.topic": "topic",
        "hub.mode": "subscribe",
        "hub.lease_seconds": 3600,
    })

    assert loaded == {
        'callback': 'http://callback.com',
        'lease_seconds': 3600,
        'mode': 'subscribe',
        'topic': 'topic'
    }
コード例 #9
0
ファイル: use_cases.py プロジェクト: sambacha/sappling
 def execute(self, websub_form_data: dict = None, topic_prefix: str = None):
     try:
         data = Box(SubscriptionForm().load(websub_form_data))
     except MarshmallowValidationError as e:
         raise BadParametersError(detail=str(e)) from e
     data.topic = self.canonical_url_topic_verification.execute(
         data.topic, topic_prefix)
     if data.mode == MODE_ATTR_SUBSCRIBE_VALUE:
         self.subscription_callback_verification.execute(
             callback=data.callback,
             topic=data.topic,
             mode=data.mode,
             lease_seconds=data.lease_seconds)
         self.subscribe.execute(callback=data.callback,
                                topic=data.topic,
                                expiration=data.lease_seconds)
     else:
         self.unsubscribe.execute(callback=data.callback, topic=data.topic)