예제 #1
0
    def clean(self):
        data = {
            prop: value for prop, value in self.cleaned_data.items()
            if prop in self.fields_to_akismet_comment_check}
        request_meta = getattr(self.request, 'META', {})

        # Find out if there is existing metadata that's been spam checked.
        addon_listed_versions = self.instance.versions.filter(
            channel=amo.RELEASE_CHANNEL_LISTED)
        if self.version:
            # If this is in the submission flow, exclude version in progress.
            addon_listed_versions = addon_listed_versions.exclude(
                id=self.version.id)
        existing_data = (
            fetch_existing_translations_from_addon(
                self.instance, self.fields_to_akismet_comment_check)
            if addon_listed_versions.exists() else ())

        reports = get_addon_akismet_reports(
            user=getattr(self.request, 'user', None),
            user_agent=request_meta.get('HTTP_USER_AGENT'),
            referrer=request_meta.get('HTTP_REFERER'),
            addon=self.instance,
            data=data,
            existing_data=existing_data)
        error_msg = ugettext('The text entered has been flagged as spam.')
        error_if_spam = waffle.switch_is_active('akismet-addon-action')
        for prop, report in reports:
            is_spam = report.is_spam
            if error_if_spam and is_spam:
                self.add_error(prop, forms.ValidationError(error_msg))
        return super(AkismetSpamCheckFormMixin, self).clean()
예제 #2
0
파일: forms.py 프로젝트: bqbn/addons-server
    def clean(self):
        data = {
            prop: value for prop, value in self.cleaned_data.items()
            if prop in self.fields_to_akismet_comment_check}
        request_meta = getattr(self.request, 'META', {})

        # Find out if there is existing metadata that's been spam checked.
        addon_listed_versions = self.instance.versions.filter(
            channel=amo.RELEASE_CHANNEL_LISTED)
        if self.version:
            # If this is in the submission flow, exclude version in progress.
            addon_listed_versions = addon_listed_versions.exclude(
                id=self.version.id)
        existing_data = (
            fetch_existing_translations_from_addon(
                self.instance, self.fields_to_akismet_comment_check)
            if addon_listed_versions.exists() else ())

        reports = get_addon_akismet_reports(
            user=getattr(self.request, 'user', None),
            user_agent=request_meta.get('HTTP_USER_AGENT'),
            referrer=request_meta.get('HTTP_REFERER'),
            addon=self.instance,
            data=data,
            existing_data=existing_data)
        error_msg = ugettext('The text entered has been flagged as spam.')
        error_if_spam = waffle.switch_is_active('akismet-addon-action')
        for prop, report in reports:
            is_spam = report.is_spam
            if error_if_spam and is_spam:
                self.add_error(prop, forms.ValidationError(error_msg))
        return super(AkismetSpamCheckFormMixin, self).clean()
예제 #3
0
 def test_addon_update(self):
     addon = addon_factory(summary=u'¡Ochó!', default_locale='es-AR')
     user = user_factory()
     existing_data = utils.fetch_existing_translations_from_addon(
         addon, ('summary', 'name', 'description'))
     # check fetch_existing_translations_from_addon worked okay
     assert existing_data == {text_type(addon.name), u'¡Ochó!'}
     cleaned_data = {
         'description': {
             'en-US': u'fóó',
             'fr': u'lé foo',
             'de': '',  # should be ignored because empty
             'es-ES': u'¡Ochó!'  # ignored because in exist_data
         },
         'name': {
             'en-GB': u'just one name',
             'fr': None,
         },
     }
     user_agent = 'Mr User/Agent'
     referrer = 'http://foo.baa/'
     reports = utils.get_addon_akismet_reports(user,
                                               user_agent,
                                               referrer,
                                               addon=addon,
                                               data=cleaned_data,
                                               existing_data=existing_data)
     assert len(reports) == 3
     assert self.create_for_addon_mock.call_count == 3
     calls = [
         mock.call(upload=None,
                   addon=addon,
                   user=user,
                   property_name='name',
                   property_value=u'just one name',
                   user_agent=user_agent,
                   referrer=referrer),
         mock.call(upload=None,
                   addon=addon,
                   user=user,
                   property_name='description',
                   property_value=u'fóó',
                   user_agent=user_agent,
                   referrer=referrer),
         mock.call(upload=None,
                   addon=addon,
                   user=user,
                   property_name='description',
                   property_value=u'lé foo',
                   user_agent=user_agent,
                   referrer=referrer)
     ]
     self.create_for_addon_mock.assert_has_calls(calls, any_order=True)
예제 #4
0
 def test_addon_update(self):
     addon = addon_factory(summary=u'¡Ochó!', default_locale='es-AR')
     user = user_factory()
     existing_data = utils.fetch_existing_translations_from_addon(
         addon, ('summary', 'name', 'description'))
     # check fetch_existing_translations_from_addon worked okay
     assert existing_data == {text_type(addon.name), u'¡Ochó!'}
     cleaned_data = {
         'description': {
             'en-US': u'fóó',
             'fr': u'lé foo',
             'de': '',  # should be ignored because empty
             'es-ES': u'¡Ochó!'  # ignored because in exist_data
         },
         'name': {
             'en-GB': u'just one name',
             'fr': None,
         },
     }
     user_agent = 'Mr User/Agent'
     referrer = 'http://foo.baa/'
     reports = utils.get_addon_akismet_reports(
         user, user_agent, referrer, addon=addon, data=cleaned_data,
         existing_data=existing_data)
     assert len(reports) == 3
     assert self.create_for_addon_mock.call_count == 3
     calls = [
         mock.call(
             upload=None, addon=addon, user=user,
             property_name='name', property_value=u'just one name',
             user_agent=user_agent, referrer=referrer),
         mock.call(
             upload=None, addon=addon, user=user,
             property_name='description', property_value=u'fóó',
             user_agent=user_agent, referrer=referrer),
         mock.call(
             upload=None, addon=addon, user=user,
             property_name='description', property_value=u'lé foo',
             user_agent=user_agent, referrer=referrer)]
     self.create_for_addon_mock.assert_has_calls(calls, any_order=True)