summaryrefslogtreecommitdiff
path: root/coip
diff options
context:
space:
mode:
Diffstat (limited to 'coip')
-rw-r--r--coip/apps/activitystreams/urls.py4
-rw-r--r--coip/apps/activitystreams/views.py45
-rw-r--r--coip/apps/membership/models.py18
-rw-r--r--coip/apps/membership/views.py6
-rw-r--r--coip/apps/opensocial/activitystreams/__init__.py0
-rw-r--r--coip/apps/opensocial/activitystreams/managers.py (renamed from coip/apps/activitystreams/managers.py)0
-rw-r--r--coip/apps/opensocial/activitystreams/urls.py10
-rw-r--r--coip/apps/opensocial/activitystreams/views.py14
-rw-r--r--coip/apps/opensocial/people.py8
-rw-r--r--coip/settings.py2
-rw-r--r--coip/urls.py2
11 files changed, 92 insertions, 17 deletions
diff --git a/coip/apps/activitystreams/urls.py b/coip/apps/activitystreams/urls.py
index e5d0d94..edbab36 100644
--- a/coip/apps/activitystreams/urls.py
+++ b/coip/apps/activitystreams/urls.py
@@ -5,6 +5,6 @@ Created on Nov 7, 2011
'''
from django.conf.urls.defaults import patterns, url
-urlpatterns = patterns('',
- url(r'^@any/(?P<id>[0-9]+)', view='coip.apps.activitystreams.urls')
+urlpatterns = patterns('coip.apps.activitystreams.views',
+ url(r'^@any/(?P<id>[0-9]+)/?$', view='name')
) \ No newline at end of file
diff --git a/coip/apps/activitystreams/views.py b/coip/apps/activitystreams/views.py
index a99bec3..91ba957 100644
--- a/coip/apps/activitystreams/views.py
+++ b/coip/apps/activitystreams/views.py
@@ -6,9 +6,52 @@ Created on Nov 8, 2011
from django.shortcuts import get_object_or_404
from coip.apps.name.models import Name
from coip.multiresponse import json_response
+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
+
+def user_to_json(o):
+ return {
+ 'objectType': 'person',
+ 'id': o.username,
+ 'displayName': userdisplay(o)
+ }
+
+def name_to_json(o):
+ return {
+ 'objectType': 'group',
+ 'id': 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
@oauth2_required(scope='memberships')
def name(request,id):
name = get_object_or_404(Name,pk=id)
# check ownership
- return json_response(name.actor_actions.name_activities()) \ No newline at end of file
+ stream = Action.objects.stream_for_object_as_target(name)
+ if stream:
+ return json_response([activity_to_json(activity) for activity in stream])
+ else:
+ return HttpResponseNotFound() \ No newline at end of file
diff --git a/coip/apps/membership/models.py b/coip/apps/membership/models.py
index 68eda96..9aec54f 100644
--- a/coip/apps/membership/models.py
+++ b/coip/apps/membership/models.py
@@ -71,7 +71,7 @@ To view information about \'%s\' open this link in your browser:
fail_silently=False)
return
-def add_member(name,member_name,hidden=False):
+def add_member(name,member_name,hidden=False,actor=None):
(m,created) = Membership.objects.get_or_create(user=member_name,name=name)
if created or not m.enabled or m.hidden != hidden:
m.enabled = True
@@ -82,30 +82,30 @@ def add_member(name,member_name,hidden=False):
name.nmembers = -1
name.save()
- if not m.hidden:
- action.send(m.user,verb='added to',target=m.name)
+ if not m.hidden and actor:
+ action.send(actor,action_object=m.user,verb='added to',target=m.name)
return m.send_notification("added to")
-def disable_member(name,member_name):
+def disable_member(name,member_name,actor=None):
m = Membership.objects.get(name=name,user=member_name)
if m:
m.enabled = False
m.save()
m.send_notification("temporarily removed from")
- if not m.hidden:
- action.send(m.user,verb='temporarily removed from',target=m.name)
+ if not m.hidden and actor:
+ action.send(actor,action_object=m.user,verb='temporarily removed from',target=m.name)
if name.nmembers != -1:
name.nmembers = -1
name.save()
-def remove_member(name,member_name):
+def remove_member(name,member_name,actor=None):
m = Membership.objects.get(name=name,user=member_name)
if m:
m.send_notification("removed from")
- if not m.hidden:
- action.send(m.user,verb='removed from',target=m.name)
+ if not m.hidden and actor:
+ action.send(actor,action_object=m.user,verb='removed from',target=m.name)
m.delete()
if name.nmembers != -1:
diff --git a/coip/apps/membership/views.py b/coip/apps/membership/views.py
index 3d5a178..c1f3afb 100644
--- a/coip/apps/membership/views.py
+++ b/coip/apps/membership/views.py
@@ -33,7 +33,7 @@ def join(request,id,membername=None):
m = Membership(name=name,enabled=True)
form = MembershipForm(request.POST,instance=m)
if form.is_valid():
- add_member(name,form.cleaned_data['user'])
+ add_member(name,form.cleaned_data['user'],actor=request.user)
return HttpResponseRedirect(name.url())
else:
return respond_to(request,
@@ -42,7 +42,7 @@ def join(request,id,membername=None):
else:
if membername:
user = get_object_or_404(User,username=membername)
- add_member(name, user)
+ add_member(name, user,actor=request.user)
return HttpResponseRedirect(name.url())
else:
form = MembershipForm()
@@ -55,5 +55,5 @@ def leave(request,id,membername=None):
name = get_object_or_404(Name,pk=id)
if membername:
user = get_object_or_404(User,username=membername)
- remove_member(name, user)
+ remove_member(name, user,actor=request.user)
return HttpResponseRedirect(name.url())
diff --git a/coip/apps/opensocial/activitystreams/__init__.py b/coip/apps/opensocial/activitystreams/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/coip/apps/opensocial/activitystreams/__init__.py
diff --git a/coip/apps/activitystreams/managers.py b/coip/apps/opensocial/activitystreams/managers.py
index aaa73f9..aaa73f9 100644
--- a/coip/apps/activitystreams/managers.py
+++ b/coip/apps/opensocial/activitystreams/managers.py
diff --git a/coip/apps/opensocial/activitystreams/urls.py b/coip/apps/opensocial/activitystreams/urls.py
new file mode 100644
index 0000000..e5d0d94
--- /dev/null
+++ b/coip/apps/opensocial/activitystreams/urls.py
@@ -0,0 +1,10 @@
+'''
+Created on Nov 7, 2011
+
+@author: leifj
+'''
+from django.conf.urls.defaults import patterns, url
+
+urlpatterns = patterns('',
+ url(r'^@any/(?P<id>[0-9]+)', view='coip.apps.activitystreams.urls')
+) \ No newline at end of file
diff --git a/coip/apps/opensocial/activitystreams/views.py b/coip/apps/opensocial/activitystreams/views.py
new file mode 100644
index 0000000..a99bec3
--- /dev/null
+++ b/coip/apps/opensocial/activitystreams/views.py
@@ -0,0 +1,14 @@
+'''
+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
+
+@oauth2_required(scope='memberships')
+def name(request,id):
+ name = get_object_or_404(Name,pk=id)
+ # check ownership
+ return json_response(name.actor_actions.name_activities()) \ No newline at end of file
diff --git a/coip/apps/opensocial/people.py b/coip/apps/opensocial/people.py
index bf814e2..613ef68 100644
--- a/coip/apps/opensocial/people.py
+++ b/coip/apps/opensocial/people.py
@@ -17,6 +17,8 @@ from django.shortcuts import get_object_or_404
import logging
from pprint import pformat
from coip.apps.opensocial.common import OpenSocialResource
+from tastypie.authentication import OAuthAuthentication
+from tastypie.authorization import DjangoAuthorization
class GroupResource(OpenSocialResource):
@@ -25,6 +27,8 @@ class GroupResource(OpenSocialResource):
serializer = OpenSocialSerializer()
resource_name = 'groups'
fields = ['short','description','id']
+ authentication = OAuthAuthentication()
+ authorization = DjangoAuthorization()
def override_urls(self):
return [
@@ -68,6 +72,8 @@ class MembershipResource(OpenSocialResource):
class Meta:
queryset = Membership.objects.all()
serializer = OpenSocialSerializer()
+ authentication = OAuthAuthentication()
+ authorization = DjangoAuthorization()
resource_name = 'membership'
fields = ['user','name']
filtering = {
@@ -86,6 +92,8 @@ class PersonResource(OpenSocialResource):
class Meta:
queryset = User.objects.all()
+ authentication = OAuthAuthentication()
+ authorization = DjangoAuthorization()
fields = ['username']
resource_name = 'people'
serializer = OpenSocialSerializer()
diff --git a/coip/settings.py b/coip/settings.py
index 9357607..9586b5a 100644
--- a/coip/settings.py
+++ b/coip/settings.py
@@ -105,7 +105,6 @@ INSTALLED_APPS = (
'ghettoq',
'djkombu',
'tastypie',
- 'actstream',
'django_oauth2_lite',
'coip.extensions',
'coip.apps.name',
@@ -113,6 +112,7 @@ INSTALLED_APPS = (
'coip.apps.invitation',
'coip.apps.userprofile',
'coip.apps.link',
+ 'actstream',
'coip.apps.activitystreams'
)
diff --git a/coip/urls.py b/coip/urls.py
index e41a47a..d74a332 100644
--- a/coip/urls.py
+++ b/coip/urls.py
@@ -71,7 +71,7 @@ urlpatterns = patterns('',
(r'^rtree.json$', 'coip.apps.name.views.rtree'),
(r'^rtree/(?P<id>[0-9]+).json$', 'coip.apps.name.views.rtree'),
# APIs
- (r'^api/activitystreams', include('coip.apps.activitystreams.urls')),
+ (r'^api/activitystreams/', include('coip.apps.activitystreams.urls')),
(r'^api/opensocial/1.0/rpc', 'coip.apps.opensocial.common.system'),
#(r'^opensocial/2.0/activitystreams', include(opensocial_v2_as.urls)),
(r'^api/opensocial/', include(opensocial_v1.urls)),