From fa157a3368420b6f5e23f62b799834c0c6c891ec Mon Sep 17 00:00:00 2001 From: Michael DeHaan Date: Sun, 24 Mar 2013 14:23:37 -0400 Subject: [PATCH] Add a /api/v1/me URL, which is a quick way to find your user record. --- lib/main/tests/users.py | 20 ++++++++++++++++++-- lib/main/views.py | 13 +++++++++++++ lib/urls.py | 4 ++-- 3 files changed, 33 insertions(+), 4 deletions(-) diff --git a/lib/main/tests/users.py b/lib/main/tests/users.py index e07f0d6e7d..6206d00ded 100644 --- a/lib/main/tests/users.py +++ b/lib/main/tests/users.py @@ -140,8 +140,24 @@ class UsersTest(BaseTest): data = self.delete(url3, expect=403, auth=self.get_other_credentials()) def test_there_exists_an_obvious_url_where_a_user_may_find_his_user_record(self): - #self.assertTrue(False) - pass + url = '/api/v1/me/' + data = self.get(url, expect=401, auth=None) + data = self.get(url, expect=401, auth=self.get_invalid_credentials()) + data = self.get(url, expect=200, auth=self.get_normal_credentials()) + self.assertEquals(data['results'][0]['username'], 'normal') + self.assertEquals(data['count'], 1) + data = self.get(url, expect=200, auth=self.get_other_credentials()) + self.assertEquals(data['results'][0]['username'], 'other') + self.assertEquals(data['count'], 1) + data = self.get(url, expect=200, auth=self.get_super_credentials()) + self.assertEquals(data['results'][0]['username'], 'admin') + self.assertEquals(data['count'], 1) + + # TODO: + # possibly nice to have, some quick lookup functions that are not postable: + # /users/2/organizations + # /users/2/projects + # /users/2/teams diff --git a/lib/main/views.py b/lib/main/views.py index 7067ae21f1..3f726c87d5 100644 --- a/lib/main/views.py +++ b/lib/main/views.py @@ -180,6 +180,19 @@ class UsersList(BaseList): same_team = base.filter(teams__in = self.request.user.teams.all()).distinct() return mine | admin_of | same_team +class UsersMeList(BaseList): + + model = User + serializer_class = UserSerializer + permission_classes = (CustomRbac,) + + def post(self, request, *args, **kwargs): + raise PermissionDenied() + + def _get_queryset(self): + ''' a quick way to find my user record ''' + return User.objects.filter(pk=self.request.user.pk) + class UsersDetail(BaseDetail): model = User diff --git a/lib/urls.py b/lib/urls.py index bfd8746fb3..1b2a28e41e 100644 --- a/lib/urls.py +++ b/lib/urls.py @@ -31,6 +31,7 @@ views_OrganizationsTagsList = views.OrganizationsTagsList.as_view() # users service views_UsersList = views.UsersList.as_view() views_UsersDetail = views.UsersDetail.as_view() +views_UsersMeList = views.UsersMeList.as_view() # projects service views_ProjectsDetail = views.OrganizationsDetail.as_view() @@ -67,11 +68,10 @@ urlpatterns = patterns('', url(r'^api/v1/organizations/(?P[0-9]+)/projects/$', views_OrganizationsProjectsList), url(r'^api/v1/organizations/(?P[0-9]+)/tags/$', views_OrganizationsTagsList), - # FIXME: implement: - # users service url(r'^api/v1/users/$', views_UsersList), url(r'^api/v1/users/(?P[0-9]+)/$', views_UsersDetail), + url(r'^api/v1/me/$', views_UsersMeList), # projects service url(r'^api/v1/projects/(?P[0-9]+)/$', views_ProjectsDetail),