summaryrefslogtreecommitdiff
path: root/coip/apps/opensocial/views.py
diff options
context:
space:
mode:
Diffstat (limited to 'coip/apps/opensocial/views.py')
-rw-r--r--coip/apps/opensocial/views.py77
1 files changed, 77 insertions, 0 deletions
diff --git a/coip/apps/opensocial/views.py b/coip/apps/opensocial/views.py
new file mode 100644
index 0000000..ff04505
--- /dev/null
+++ b/coip/apps/opensocial/views.py
@@ -0,0 +1,77 @@
+'''
+Created on Nov 8, 2011
+
+@author: leifj
+'''
+import re
+from django.contrib.auth.models import User
+from coip.multiresponse import json_response
+from coip.apps.activitystreams.views import object_to_json
+from django_oauth2_lite.decorators import oauth2_required
+from django.http import HttpResponseNotFound, HttpResponseBadRequest
+from coip.apps.name.models import Name
+import json
+from django.utils import simplejson
+
+def _resolve_user(request,uid):
+ if uid == '@me':
+ return request.user
+
+ if re.match('^[0-9]+$',uid):
+ try:
+ return User.objects.get(id=uid)
+ except User.DoesNotExist:
+ return None
+
+ try:
+ return User.objects.get(username=uid)
+ except User.DoesNotExist:
+ return None
+
+def _resolve_group(request,user,gid):
+ if gid == '@self':
+ return user.get_profile().home
+
+ if re.match('^[0-9]+$',gid):
+ try:
+ return Name.objects.get(id=gid)
+ except User.DoesNotExist:
+ return None
+ try:
+ return Name.objects.get(username=gid)
+ except User.DoesNotExist:
+ return None
+
+
+def _opensocial_response(lst):
+ return {
+ "startIndex": 0,
+ "totalResults": len(lst),
+ "entry": [
+ object_to_json(o) for o in lst
+ ]
+ }
+
+def rpc(request):
+ if request.method == 'POST' and request.META['CONTENT_TYPE'] == 'application/json':
+ rpc_request = simplejson.load(request)
+ if rpc_request['method'] == 'system.listMethods':
+ return json_response(['people.get','groups.get','system.listMethods'])
+ else:
+ return HttpResponseBadRequest()
+
+@oauth2_required(scope='opensocial')
+def person(request,uid,gid='@self'):
+ user = _resolve_user(request,uid)
+
+ if not user:
+ return HttpResponseNotFound()
+
+ name = _resolve_group(request,user,gid)
+
+ if not name:
+ return HttpResponseNotFound()
+
+ ##TODO - implement listing people based on group memberships
+ return json_response(_opensocial_response([user]))
+