summaryrefslogtreecommitdiff
path: root/coip/apps/activitystreams/views.py
blob: e0c76a72dafef3f2dbe696efa6316b0322ff27c4 (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
'''
Created on Nov 8, 2011

@author: leifj
'''
from django.shortcuts import get_object_or_404
from coip.apps.name.models import Name
from coip.multiresponse import json_response, render403
from django_oauth2_lite.decorators import oauth2_required
from actstream.models import Action
from django.http import HttpResponseNotFound
from coip.extensions.templatetags.userdisplay import userdisplay
import socket

def domain():
    return socket.getfqdn(socket.gethostname())

def user_to_json(o):
    return {
        'objectType': 'person',
        'id': "%s:%s" % (domain(),o.username),
        'displayName': userdisplay(o)
    }

def name_to_json(o):
    return {
         'objectType': 'group',
         'id': "%s:%d" % (domain(),o.id),
         'url': o.url(),
         'displayName': o.shortname()
    }

def object_to_json(o):
    if o:
        n = o.__class__.__name__
        if n == 'User':
            return user_to_json(o)
        if n == 'Name':
            return name_to_json(o)
    else:
        return "none"

def activity_to_json(activity):
    r = {
        "published": activity.timestamp.isoformat(),
        "actor": object_to_json(activity.actor),
        "verb": activity.verb,
        "object": object_to_json(activity.action_object),
        "target": object_to_json(activity.target)
     }
    return r

def collection_to_json(lst):
    return {
            'totalItems': len(lst),
            'items': lst
    }

@oauth2_required(scope='memberships')
def name(request,id):
    name = get_object_or_404(Name,pk=id)
    if not name.has_permission(request.user,'r'):
        return render403(request,"You do not have permission to view membership information for %s" % (name))
    # check ownership
    stream = Action.objects.stream_for_object_as_target(name)
    if stream:
        return json_response(collection_to_json([activity_to_json(activity) for activity in stream]))
    else:
        return HttpResponseNotFound()