def test_ua_item(pattern):
     parsed = ua_parse(pattern[0])
     if pattern[1]:
         eq_(parsed['browser'], pattern[1])
         eq_(parsed['version'], pattern[2])
         eq_(parsed['platform'], pattern[3])
     else:
         assert parsed is None
 def test_ua_item(pattern):
     parsed = ua_parse(pattern[0])
     if pattern[1]:
         eq_(parsed['browser'], pattern[1])
         eq_(parsed['version'], pattern[2])
         eq_(parsed['platform'], pattern[3])
     else:
         assert parsed is None
示例#3
0
        def wrapped(request, *args, **kwargs):
            # Validate User-Agent request header.
            ua = request.META.get('HTTP_USER_AGENT', None)
            parsed = ua_parse(ua)

            if not parsed:  # Unknown UA.
                if request.method == 'GET':
                    return http.HttpResponseRedirect(reverse(
                        'feedback.download',
                        channel='beta' if beta else 'release'))
                else:
                    return http.HttpResponseBadRequest(
                        _('User-Agent request header must be set.'))

            if not settings.ENFORCE_USER_AGENT:
                return f(request, ua=ua, *args, **kwargs)

            this_ver = Version(parsed['version'])
            # Enforce beta releases.
            if beta:
                if this_ver.is_release:  # Forward release to release feedback.
                    return http.HttpResponseRedirect(
                        reverse('feedback', channel='release'))
                elif not this_ver.is_beta:  # Not a beta? Upgrade to beta.
                    return http.HttpResponseRedirect(
                            reverse('feedback.download', channel='beta'))

                # Check for outdated beta.
                ref_ver = Version(input.LATEST_BETAS[parsed['browser']])
                if this_ver < ref_ver:
                    return http.HttpResponseRedirect(
                            reverse('feedback.download', channel='beta'))

            # Enforce release versions.
            else:
                if this_ver.is_beta:  # Forward betas to beta feedback.
                    return http.HttpResponseRedirect(
                        reverse('feedback', channel='beta'))
                elif not this_ver.is_release:  # Not a release? Upgrade.
                    return http.HttpResponseRedirect(
                            reverse('feedback.download', channel='beta'))

                ref_ver = Version(input.LATEST_RELEASE[parsed['browser']])

                # Bug 634324: Until Firefox 4 is released, show "download beta"
                # message to 3.6 and lower release users.
                ver4 = Version('4.0')
                if (parsed['browser'] == input.FIREFOX and this_ver < ver4):
                    return http.HttpResponseRedirect(
                            reverse('feedback.download', channel='beta'))

                # Check for outdated release.
                if this_ver < ref_ver:
                    return http.HttpResponseRedirect(
                            reverse('feedback.download', channel='release'))

            # If we made it here, it's a valid version.
            return f(request, ua=ua, *args, **kwargs)
def test_ua_parse():
    """Test user agent parser for Firefox."""
    patterns = (
        # valid Fx
        ('Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; de; rv:1.9.2.3) '
         'Gecko/20100401 Firefox/3.6.3',
         FIREFOX, '3.6.3', 'mac'),
        ('Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.4) '
         'Gecko/20100611 Firefox/3.6.4 (.NET CLR 3.5.30729)',
         FIREFOX, '3.6.4', 'winxp'),
        # additional parentheses (bug 578339)
        ('Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:2.0b1) '
         'Gecko/20100628 Firefox/4.0b1',
         FIREFOX, '4.0b1', 'linux'),
        # locale fallback (bug 578339)
        ('Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; fr-FR; rv:2.0b1) '
         'Gecko/20100628 Firefox/4.0b1',
         FIREFOX, '4.0b1', 'mac'),
        ('Mozilla/5.0 (X11; U; Linux x86_64; cs-CZ; rv:2.0b2pre) Gecko/20100630 '
         'Minefield/4.0b2pre',
         FIREFOX, '4.0b2pre', 'linux'),

        # valid Fennec
        ('Mozilla/5.0 (X11; U; Linux armv6l; fr; rv:1.9.1b1pre) Gecko/'
         '20081005220218 Gecko/2008052201 Fennec/0.9pre',
         MOBILE, '0.9pre', 'linux'),
        ('Mozilla/5.0 (X11; U; FreeBSD; en-US; rv:1.9.2a1pre) '
         'Gecko/20090626 Fennec/1.0b2',
         MOBILE, '1.0b2', 'other'),
        ('Mozilla/5.0 (Maemo; Linux armv71; rv:2.0b6pre) Gecko/'
         '20100924 Namoroka/4.0b7pre Fennec/2.0b1pre',
         MOBILE, '2.0b1pre', 'maemo'),
        ('Mozilla/5.0 (Android; Linux armv71; rv:2.0b6pre) Gecko/'
         '20100924 Namoroka/4.0b7pre Fennec/2.0b1pre',
         MOBILE, '2.0b1pre', 'android'),

        # invalid
        ('A completely bogus Firefox user agent string.', None),
        ('Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-us) '
         'AppleWebKit/531.22.7 (KHTML, like Gecko) Version/4.0.5 '
         'Safari/531.22.7', None),
        ('Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.2.6) '
         'Gecko/20100625 Firefox/ Anonymisiert durch AlMiSoft '
         'Browser-Anonymisierer 48771657', None),  # bug 629687
    )

    for pattern in patterns:
        parsed = ua_parse(pattern[0])
        if pattern[1]:
            eq_(parsed['browser'], pattern[1])
            eq_(parsed['version'], pattern[2])
            eq_(parsed['platform'], pattern[3])
        else:
            assert parsed is None
示例#5
0
def test_ua_parse():
    """Test user agent parser for Firefox."""
    patterns = (
        # valid Fx
        ('Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; de; rv:1.9.2.3) '
         'Gecko/20100401 Firefox/3.6.3', FIREFOX, '3.6.3', 'mac'),
        ('Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.4) '
         'Gecko/20100611 Firefox/3.6.4 (.NET CLR 3.5.30729)', FIREFOX, '3.6.4',
         'winxp'),
        # additional parentheses (bug 578339)
        ('Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:2.0b1) '
         'Gecko/20100628 Firefox/4.0b1', FIREFOX, '4.0b1', 'linux'),
        # locale fallback (bug 578339)
        ('Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; fr-FR; rv:2.0b1) '
         'Gecko/20100628 Firefox/4.0b1', FIREFOX, '4.0b1', 'mac'),
        ('Mozilla/5.0 (X11; U; Linux x86_64; cs-CZ; rv:2.0b2pre) Gecko/20100630 '
         'Minefield/4.0b2pre', FIREFOX, '4.0b2pre', 'linux'),

        # valid Fennec
        ('Mozilla/5.0 (X11; U; Linux armv6l; fr; rv:1.9.1b1pre) Gecko/'
         '20081005220218 Gecko/2008052201 Fennec/0.9pre', MOBILE, '0.9pre',
         'linux'),
        ('Mozilla/5.0 (X11; U; FreeBSD; en-US; rv:1.9.2a1pre) '
         'Gecko/20090626 Fennec/1.0b2', MOBILE, '1.0b2', 'other'),
        ('Mozilla/5.0 (Maemo; Linux armv71; rv:2.0b6pre) Gecko/'
         '20100924 Namoroka/4.0b7pre Fennec/2.0b1pre', MOBILE, '2.0b1pre',
         'maemo'),
        ('Mozilla/5.0 (Android; Linux armv71; rv:2.0b6pre) Gecko/'
         '20100924 Namoroka/4.0b7pre Fennec/2.0b1pre', MOBILE, '2.0b1pre',
         'android'),

        # invalid
        ('A completely bogus Firefox user agent string.', None),
        ('Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-us) '
         'AppleWebKit/531.22.7 (KHTML, like Gecko) Version/4.0.5 '
         'Safari/531.22.7', None),
        ('Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.2.6) '
         'Gecko/20100625 Firefox/ Anonymisiert durch AlMiSoft '
         'Browser-Anonymisierer 48771657', None),  # bug 629687
    )

    for pattern in patterns:
        parsed = ua_parse(pattern[0])
        if pattern[1]:
            eq_(parsed['browser'], pattern[1])
            eq_(parsed['version'], pattern[2])
            eq_(parsed['platform'], pattern[3])
        else:
            assert parsed is None
示例#6
0
    def save(self, terms=True, *args, **kwargs):
        # parse UA and stick it into separate fields
        parsed = ua_parse(self.user_agent)
        if parsed:
            self.product = parsed['browser'].id
            self.version = parsed['version']
            self.platform = parsed['platform']

        new = not self.pk
        super(Opinion, self).save(*args, **kwargs)

        # Extract terms from description text and save them if this is new.
        if new and terms:
            terms = (t for t in extract_terms(self.description) if
                     len(t) >= settings.MIN_TERM_LENGTH)
            for term in terms:
                this_term, created = Term.objects.get_or_create(term=term)
                this_term.save()
                self.terms.add(this_term)
示例#7
0
文件: views.py 项目: x1B/reporter
    def wrapped(request, *args, **kwargs):
        # Validate User-Agent request header.
        ua = request.META.get("HTTP_USER_AGENT", None)
        parsed = ua_parse(ua)

        if not parsed:  # Unknown UA.
            if request.method == "GET":
                return http.HttpResponseRedirect(reverse("feedback.download"))
            else:
                return http.HttpResponseBadRequest(_("User-Agent request header must be set."))

        if not settings.ENFORCE_USER_AGENT:
            return f(request, ua=ua, *args, **kwargs)

        this_ver = Version(parsed["version"])
        ref_ver = Version(input.LATEST_RELEASE[parsed["browser"]])
        # Check for outdated release.
        if this_ver < ref_ver:
            return http.HttpResponseRedirect(reverse("feedback.download"))

        # If we made it here, it's a valid version.
        return f(request, ua=ua, *args, **kwargs)
示例#8
0
    def wrapped(request, *args, **kwargs):
        # Validate User-Agent request header.
        ua = request.META.get('HTTP_USER_AGENT', None)
        parsed = ua_parse(ua)

        if not parsed:  # Unknown UA.
            if request.method == 'GET':
                return http.HttpResponseRedirect(reverse('feedback.download'))
            else:
                return http.HttpResponseBadRequest(
                    _('User-Agent request header must be set.'))

        if not settings.ENFORCE_USER_AGENT:
            return f(request, ua=ua, *args, **kwargs)

        this_ver = Version(parsed['version'])
        ref_ver = Version(input.LATEST_RELEASE[parsed['browser']])
        # Check for outdated release.
        if this_ver < ref_ver:
            return http.HttpResponseRedirect(reverse('feedback.download'))

        # If we made it here, it's a valid version.
        return f(request, ua=ua, *args, **kwargs)
示例#9
0
    def wrapped(request, *args, **kwargs):
        # Validate User-Agent request header.
        ua = request.META.get('HTTP_USER_AGENT', None)
        parsed = ua_parse(ua)

        if not parsed:  # Unknown UA.
            if request.method == 'GET':
                return http.HttpResponseRedirect(
                        reverse('feedback.download'))
            else:
                return http.HttpResponseBadRequest(
                    _('User-Agent request header must be set.'))

        if not settings.ENFORCE_USER_AGENT:
            return f(request, ua=ua, *args, **kwargs)

        this_ver = Version(parsed['version'])
        ref_ver = Version(parsed['browser'].min_version)
        # Check for outdated release.
        if this_ver < ref_ver:
            return http.HttpResponseRedirect(reverse('feedback.download'))

        # If we made it here, it's a valid version.
        return f(request, ua=ua, *args, **kwargs)
示例#10
0
    def wrapped(request, *args, **kwargs):
        # Validate User-Agent request header.
        ua = request.META.get('HTTP_USER_AGENT', None)
        parsed = ua_parse(ua)

        if not parsed:  # Unknown UA.
            if request.method == 'GET':
                return http.HttpResponseRedirect(
                        reverse('feedback.download'))
            else:
                return http.HttpResponseBadRequest(
                    _('User-Agent request header must be set.'))

        if not settings.ENFORCE_USER_AGENT:
            return f(request, ua=ua, *args, **kwargs)

        this_ver = Version(parsed['version'])
        ref_ver = Version(input.LATEST_RELEASE[parsed['browser']])

        this_date = datetime.now()
        try:
            # Try to get the release date
            ref_date = datetime.strptime(input.RELEASE_DATES[parsed['browser']][input.LATEST_RELEASE[parsed['browser']]],
                                         '%Y-%m-%d')
        except KeyError:
            # Default to released today if issues are found
            ref_date = this_date

        delta = this_date - ref_date

        # Check for outdated release, allow old versions for 3 days after a release
        if this_ver < ref_ver and delta.days > 3:
            return http.HttpResponseRedirect(reverse('feedback.download'))

        # If we made it here, it's a valid version.
        return f(request, ua=ua, *args, **kwargs)
示例#11
0
def parse_user_agent(sender, instance, **kw):
    parsed = ua_parse(instance.user_agent)
    if parsed:
        instance.product = parsed['browser'].id
        instance.version = parsed['version']
        instance.platform = parsed['platform']
示例#12
0
def parse_user_agent(sender, instance, **kw):
    parsed = ua_parse(instance.user_agent)
    if parsed:
        instance.product = parsed["browser"].id
        instance.version = parsed["version"]
        instance.platform = parsed["platform"]