예제 #1
0
def whoami(request):
    """
    Return a JSON object representing the current user, either
    authenticated or anonymous.
    """
    user = request.user
    if user.is_authenticated:
        data = {
            'username': user.username,
            'timezone': user.timezone,
            'is_authenticated': True,
            'is_staff': user.is_staff,
            'is_superuser': user.is_superuser,
            'is_beta_tester': user.is_beta_tester,
            'gravatar_url': {
                'small': gravatar_url(user.email, size=50),
                'large': gravatar_url(user.email, size=200),
            }
        }
    else:
        data = {
            'username': None,
            'timezone': settings.TIME_ZONE,
            'is_authenticated': False,
            'is_staff': False,
            'is_superuser': False,
            'is_beta_tester': False,
            'gravatar_url': {
                'small': None,
                'large': None,
            }
        }
    return JsonResponse(data)
예제 #2
0
def test_whoami(user_client, api_settings, wiki_user, beta_testers_group,
                timezone, is_staff, is_superuser, is_beta_tester):
    """Test responses for logged-in users."""
    wiki_user.timezone = timezone
    wiki_user.is_staff = is_staff
    wiki_user.is_superuser = is_superuser
    wiki_user.is_staff = is_staff
    if is_beta_tester:
        wiki_user.groups.add(beta_testers_group)
    wiki_user.save()
    url = reverse('api.v1.whoami')
    response = user_client.get(url, HTTP_HOST=api_settings.BETA_HOST)
    assert response.status_code == 200
    assert response['content-type'] == 'application/json'
    assert response.json() == {
        'username': wiki_user.username,
        'timezone': timezone,
        'is_authenticated': True,
        'is_staff': is_staff,
        'is_superuser': is_superuser,
        'is_beta_tester': is_beta_tester,
        'gravatar_url': {
            'small': gravatar_url(wiki_user.email, size=50),
            'large': gravatar_url(wiki_user.email, size=200),
        }
    }
    assert_no_cache_header(response)
예제 #3
0
파일: views.py 프로젝트: Elchi3/kuma
def whoami(request):
    """
    Return a JSON object representing the current user, either
    authenticated or anonymous.
    """
    user = request.user
    if user.is_authenticated:
        data = {
            'username': user.username,
            'timezone': user.timezone,
            'is_authenticated': True,
            'is_staff': user.is_staff,
            'is_superuser': user.is_superuser,
            'is_beta_tester': user.is_beta_tester,
            'gravatar_url': {
                'small': gravatar_url(user.email, size=50),
                'large': gravatar_url(user.email, size=200),
            }
        }
    else:
        data = {
            'username': None,
            'timezone': settings.TIME_ZONE,
            'is_authenticated': False,
            'is_staff': False,
            'is_superuser': False,
            'is_beta_tester': False,
            'gravatar_url': {
                'small': None,
                'large': None,
            }
        }
    return JsonResponse(data)
예제 #4
0
def whoami(request):
    """
    Return a JSON object representing the current user, either
    authenticated or anonymous.
    """
    user = request.user
    if user.is_authenticated:
        data = {
            'username': user.username,
            'timezone': user.timezone,
            'is_authenticated': True,
            'is_staff': user.is_staff,
            'is_superuser': user.is_superuser,
            'is_beta_tester': user.is_beta_tester,
            'gravatar_url': {
                'small': gravatar_url(user.email, size=50),
                'large': gravatar_url(user.email, size=200),
            }
        }
    else:
        data = {
            'username': None,
            'timezone': settings.TIME_ZONE,
            'is_authenticated': False,
            'is_staff': False,
            'is_superuser': False,
            'is_beta_tester': False,
            'gravatar_url': {
                'small': None,
                'large': None,
            }
        }

    # Add waffle data to the dict we're going to be returning.
    # This is what the waffle.wafflejs() template tag does, but we're
    # doing it via an API instead of hardcoding the settings into
    # the HTML page. See also from waffle.views._generate_waffle_js.
    #
    # Note that if we upgrade django-waffle, version 15 introduces a
    # pluggable flag model, and the approved way to get all flag
    # objects will then become:
    #    get_waffle_flag_model().get_all()
    #
    data['waffle'] = {
        'flags': {f.name: f.is_active(request)
                  for f in Flag.get_all()},
        'switches': {s.name: s.is_active()
                     for s in Switch.get_all()},
        'samples': {s.name: s.is_active()
                    for s in Sample.get_all()},
    }

    return JsonResponse(data)
예제 #5
0
파일: test_views.py 프로젝트: itai421/kuma
def test_whoami(user_client, api_settings, wiki_user, beta_testers_group,
                timezone, is_staff, is_superuser, is_beta_tester):
    """Test responses for logged-in users."""
    # Create some fake waffle objects
    Flag.objects.create(name='section_edit', authenticated=True)
    Flag.objects.create(name='flag_all', everyone=True)
    Flag.objects.create(name='flag_none', percent=0, superusers=False)
    Switch.objects.create(name="switch_on", active=True)
    Switch.objects.create(name="switch_off", active=False)
    Sample.objects.create(name="sample_never", percent=0)
    Sample.objects.create(name="sample_always", percent=100)

    wiki_user.timezone = timezone
    wiki_user.is_staff = is_staff
    wiki_user.is_superuser = is_superuser
    wiki_user.is_staff = is_staff
    if is_beta_tester:
        wiki_user.groups.add(beta_testers_group)
    wiki_user.save()
    url = reverse('api.v1.whoami')
    response = user_client.get(url, HTTP_HOST=api_settings.BETA_HOST)
    assert response.status_code == 200
    assert response['content-type'] == 'application/json'
    assert response.json() == {
        'username': wiki_user.username,
        'timezone': timezone,
        'is_authenticated': True,
        'is_staff': is_staff,
        'is_superuser': is_superuser,
        'is_beta_tester': is_beta_tester,
        'gravatar_url': {
            'small': gravatar_url(wiki_user.email, size=50),
            'large': gravatar_url(wiki_user.email, size=200),
        },
        'waffle': {
            'flags': {
                'section_edit': True,
                'flag_all': True,
                'flag_none': False,
            },
            'switches': {
                'switch_on': True,
                'switch_off': False
            },
            'samples': {
                'sample_always': True,
                'sample_never': False
            }
        }
    }
    assert_no_cache_header(response)
예제 #6
0
파일: test_views.py 프로젝트: mozilla/kuma
def test_whoami(user_client, api_settings, wiki_user, beta_testers_group,
                timezone, is_staff, is_superuser, is_beta_tester):
    """Test responses for logged-in users."""
    # Create some fake waffle objects
    Flag.objects.create(name='section_edit', authenticated=True)
    Flag.objects.create(name='flag_all', everyone=True)
    Flag.objects.create(name='flag_none', percent=0, superusers=False)
    Switch.objects.create(name="switch_on", active=True)
    Switch.objects.create(name="switch_off", active=False)
    Sample.objects.create(name="sample_never", percent=0)
    Sample.objects.create(name="sample_always", percent=100)

    wiki_user.timezone = timezone
    wiki_user.is_staff = is_staff
    wiki_user.is_superuser = is_superuser
    wiki_user.is_staff = is_staff
    if is_beta_tester:
        wiki_user.groups.add(beta_testers_group)
    wiki_user.save()
    url = reverse('api.v1.whoami')
    response = user_client.get(url, HTTP_HOST=api_settings.BETA_HOST)
    assert response.status_code == 200
    assert response['content-type'] == 'application/json'
    assert response.json() == {
        'username': wiki_user.username,
        'timezone': timezone,
        'is_authenticated': True,
        'is_staff': is_staff,
        'is_superuser': is_superuser,
        'is_beta_tester': is_beta_tester,
        'gravatar_url': {
            'small': gravatar_url(wiki_user.email, size=50),
            'large': gravatar_url(wiki_user.email, size=200),
        },
        'waffle': {
            'flags': {
                'section_edit': True,
                'flag_all': True,
                'flag_none': False,
            },
            'switches': {
                'switch_on': True,
                'switch_off': False
            },
            'samples': {
                'sample_always': True,
                'sample_never': False
            }
        }
    }
    assert_no_cache_header(response)
예제 #7
0
파일: views.py 프로젝트: mozilla/kuma
def whoami(request):
    """
    Return a JSON object representing the current user, either
    authenticated or anonymous.
    """
    user = request.user
    if user.is_authenticated:
        data = {
            'username': user.username,
            'timezone': user.timezone,
            'is_authenticated': True,
            'is_staff': user.is_staff,
            'is_superuser': user.is_superuser,
            'is_beta_tester': user.is_beta_tester,
            'gravatar_url': {
                'small': gravatar_url(user.email, size=50),
                'large': gravatar_url(user.email, size=200),
            }
        }
    else:
        data = {
            'username': None,
            'timezone': settings.TIME_ZONE,
            'is_authenticated': False,
            'is_staff': False,
            'is_superuser': False,
            'is_beta_tester': False,
            'gravatar_url': {
                'small': None,
                'large': None,
            }
        }

    # Add waffle data to the dict we're going to be returning.
    # This is what the waffle.wafflejs() template tag does, but we're
    # doing it via an API instead of hardcoding the settings into
    # the HTML page. See also from waffle.views._generate_waffle_js.
    #
    # Note that if we upgrade django-waffle, version 15 introduces a
    # pluggable flag model, and the approved way to get all flag
    # objects will then become:
    #    get_waffle_flag_model().get_all()
    #
    data['waffle'] = {
        'flags': {f.name: f.is_active(request) for f in Flag.get_all()},
        'switches': {s.name: s.is_active() for s in Switch.get_all()},
        'samples': {s.name: s.is_active() for s in Sample.get_all()},
    }

    return JsonResponse(data)
예제 #8
0
파일: jobs.py 프로젝트: tsl143/kuma
    def fetch(self, pk):
        from .models import Document
        User = get_user_model()

        # first get a list of user ID recently authoring revisions
        document = Document.objects.get(pk=pk)
        recent_creator_ids = (document.revisions.order_by('-created')
                                                .values_list('creator_id',
                                                             flat=True))

        if not recent_creator_ids:
            return self.empty()

        # then return the ordered results given the ID list, MySQL only syntax
        select = collections.OrderedDict([
            ('ordered_ids',
             'FIELD(id,%s)' % ','.join(map(str, recent_creator_ids))),
        ])
        contributors = list(User.objects.filter(id__in=list(recent_creator_ids),
                                                is_active=True)
                                        .extra(select=select,
                                               order_by=['ordered_ids'])
                                        .values('id', 'username', 'email'))
        result = []
        for contributor in contributors:
            contributor['gravatar_34'] = gravatar_url(contributor['email'],
                                                      size=34)
            result.append(contributor)
        return result
예제 #9
0
파일: jobs.py 프로젝트: runt18/kuma
    def fetch(self, pk):
        from .models import Document
        User = get_user_model()

        # first get a list of user ID recently authoring revisions
        document = Document.objects.get(pk=pk)
        recent_creator_ids = (
            document.revisions.order_by('-created').values_list('creator_id',
                                                                flat=True))

        if not recent_creator_ids:
            return self.empty()

        # then return the ordered results given the ID list, MySQL only syntax
        select = collections.OrderedDict([
            ('ordered_ids',
             'FIELD(id,{0!s})'.format(','.join(map(str, recent_creator_ids)))),
        ])
        contributors = list(
            User.objects.filter(id__in=list(recent_creator_ids),
                                is_active=True).extra(select=select,
                                                      order_by=['ordered_ids'
                                                                ]).values(
                                                                    'id',
                                                                    'username',
                                                                    'email'))
        result = []
        for contributor in contributors:
            contributor['gravatar_34'] = gravatar_url(contributor['email'],
                                                      size=34)
            result.append(contributor)
        return result
예제 #10
0
파일: jobs.py 프로젝트: runt18/kuma
    def fetch(self, pk):
        from .models import Document

        User = get_user_model()

        # first get a list of user ID recently authoring revisions
        document = Document.objects.get(pk=pk)
        recent_creator_ids = document.revisions.order_by("-created").values_list("creator_id", flat=True)

        if not recent_creator_ids:
            return self.empty()

        # then return the ordered results given the ID list, MySQL only syntax
        select = collections.OrderedDict(
            [("ordered_ids", "FIELD(id,{0!s})".format(",".join(map(str, recent_creator_ids))))]
        )
        contributors = list(
            User.objects.filter(id__in=list(recent_creator_ids), is_active=True)
            .extra(select=select, order_by=["ordered_ids"])
            .values("id", "username", "email")
        )
        result = []
        for contributor in contributors:
            contributor["gravatar_34"] = gravatar_url(contributor["email"], size=34)
            result.append(contributor)
        return result
예제 #11
0
파일: feeds.py 프로젝트: rohanraj7316/kuma
    def write(self, outfile, encoding):
        request = self.feed['request']

        # Check for a callback param, validate it before use
        callback = request.GET.get('callback', None)
        if callback is not None:
            if not valid_jsonp_callback_value(callback):
                callback = None

        items_out = []
        for item in self.items:
            document = item['obj']

            # Include some of the simple elements from the preprocessed item
            item_out = dict((x, item[x]) for x in (
                'link',
                'title',
                'pubdate',
                'author_name',
                'author_link',
            ))

            # HACK: DocumentFeed is the superclass of RevisionFeed. In this
            # case, current_revision is the revision itself.
            # TODO: Refactor this out into separate DocumentFeed and
            # RevisionFeed subclasses of Feed.
            if hasattr(document, 'current_revision'):
                revision = document.current_revision
            else:
                revision = document

            if revision.creator.email:
                item_out['author_avatar'] = gravatar_url(
                    revision.creator.email)

            summary = getattr(revision, 'summary', None)
            if summary:
                item_out['summary'] = summary

            # Linkify the tags used in the feed item
            categories = dict((x,
                               request.build_absolute_uri(
                                   reverse('wiki.tag', kwargs={'tag': x})))
                              for x in item['categories'])
            if categories:
                item_out['categories'] = categories

            items_out.append(item_out)

        data = items_out

        if callback:
            outfile.write('%s(' % callback)
        outfile.write(json.dumps(data, default=self._encode_complex))
        if callback:
            outfile.write(')')
예제 #12
0
파일: feeds.py 프로젝트: fritexvz/kuma
    def write(self, outfile, encoding):
        request = self.feed['request']

        # Check for a callback param, validate it before use
        callback = request.GET.get('callback', None)
        if callback is not None:
            if not valid_jsonp_callback_value(callback):
                callback = None

        items_out = []
        for item in self.items:

            # Include some of the simple elements from the preprocessed feed item
            item_out = dict((x, item[x]) for x in (
                'link', 'title', 'pubdate', 'author_name', 'author_link',
            ))

            if item['obj'].creator.email:
                item_out['author_avatar'] = gravatar_url(item['obj'].creator.email)

            # Linkify the tags used in the feed item
            item_out['categories'] = dict(
                (x, request.build_absolute_uri(reverse('demos_tag', kwargs={'tag': x})))
                for x in item['categories']
            )

            # Include a few more, raw from the submission object itself.
            item_out.update((x, unicode(getattr(item['obj'], x))) for x in (
                'summary', 'description',
            ))

            item_out['featured'] = item['obj'].featured

            # Include screenshot as an absolute URL.
            item_out['screenshot'] = request.build_absolute_uri(
                item['obj'].screenshot_url(1))

            # HACK: This .replace() should probably be done in the model
            item_out['thumbnail'] = request.build_absolute_uri(
                item['obj'].thumbnail_url(1))

            # TODO: What else might be useful in a JSON feed of demo submissions?
            # Comment, like, view counts may change too much for caching to be useful

            items_out.append(item_out)

        data = items_out

        if callback:
            outfile.write('%s(' % callback)
        outfile.write(json.dumps(data, default=self._encode_complex))
        if callback:
            outfile.write(')')
예제 #13
0
파일: feeds.py 프로젝트: runt18/kuma
    def write(self, outfile, encoding):
        request = self.feed['request']

        # Check for a callback param, validate it before use
        callback = request.GET.get('callback', None)
        if callback is not None:
            if not valid_jsonp_callback_value(callback):
                callback = None

        items_out = []
        for item in self.items:
            document = item['obj']

            # Include some of the simple elements from the preprocessed item
            item_out = dict((x, item[x]) for x in (
                'link', 'title', 'pubdate', 'author_name', 'author_link',
            ))

            # HACK: DocumentFeed is the superclass of RevisionFeed. In this
            # case, current_revision is the revision itself.
            # TODO: Refactor this out into separate DocumentFeed and
            # RevisionFeed subclasses of Feed.
            if hasattr(document, 'current_revision'):
                revision = document.current_revision
            else:
                revision = document

            if revision.creator.email:
                item_out['author_avatar'] = gravatar_url(revision.creator.email)

            summary = revision.summary
            if summary:
                item_out['summary'] = summary

            # Linkify the tags used in the feed item
            categories = dict(
                (x, request.build_absolute_uri(
                    reverse('wiki.tag', kwargs={'tag': x})))
                for x in item['categories']
            )
            if categories:
                item_out['categories'] = categories

            items_out.append(item_out)

        data = items_out

        if callback:
            outfile.write('{0!s}('.format(callback))
        outfile.write(json.dumps(data, default=self._encode_complex))
        if callback:
            outfile.write(')')