1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
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]))
|