summaryrefslogtreecommitdiff
path: root/coip/apps/opensocial/views.py
blob: ff045058a7ff4db2fff688a3e6a31b8363c65b56 (plain)
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]))