summaryrefslogtreecommitdiff
path: root/coip/apps/membership
diff options
context:
space:
mode:
Diffstat (limited to 'coip/apps/membership')
-rw-r--r--coip/apps/membership/models.py62
1 files changed, 61 insertions, 1 deletions
diff --git a/coip/apps/membership/models.py b/coip/apps/membership/models.py
index 9aec54f..6e5dbe5 100644
--- a/coip/apps/membership/models.py
+++ b/coip/apps/membership/models.py
@@ -13,6 +13,8 @@ from coip.settings import NOREPLY
from coip.extensions.templatetags.userdisplay import userdisplay
from coip.apps.userprofile.models import UserProfile
from actstream.signals import action
+from coip.apps.scim import types
+import logging
STATUS = {UserProfile.INTERNAL:'internal',
UserProfile.ENTITY:'entity',
@@ -115,4 +117,62 @@ def remove_member(name,member_name,actor=None):
def has_member(name,member_name):
return Membership.objects.filter(name=name,user=member_name)
-tagging.register(Membership) \ No newline at end of file
+tagging.register(Membership)
+
+from coip.apps.scim.schema import scim_simple_attribute, ScimAttribute
+from coip.apps.resource.models import object_for_uuid
+
+class GroupSchema():
+ URI = 'urn:scim:schemas:core:1.0'
+ ATTRIBUTES = ('externalId','displayName','members','parentId')
+
+ externalId = scim_simple_attribute('url')
+ displayName = scim_simple_attribute('display')
+
+ class MembersAttribute(ScimAttribute):
+
+ def __get__(self,o,objtype=None):
+ return [
+ {
+ 'display': userdisplay(m.user),
+ 'value': m.user.uuid
+ } for m in o.memberships.filter(hidden=False).all()
+ ]
+
+ def __set__(self,o,v):
+ o.memberships = []
+ for i in v:
+ member = object_for_uuid(v['value'])
+ add_member(o,member)
+
+ def __delete__(self,o):
+ o.memberships.clear()
+
+ def remove(self,o,v):
+ member = object_for_uuid(v['value'])
+ remove_member(o,member.username,actor="scim")
+
+ def add(self,o,v):
+ member = object_for_uuid(v['value'])
+ add_member(o,member.username,actor="scim")
+
+ class ParentAttribute(ScimAttribute):
+ def __get__(self,o,objtype=None):
+ if o.parent:
+ return o.parent.uuid
+ else:
+ return None
+
+ members = MembersAttribute()
+ parentId = ParentAttribute()
+
+class UserSchema():
+ URI = 'urn:scim:schemas:core:1.0'
+ ATTRIBUTES = ('externalId','userName')
+
+ externalId = scim_simple_attribute('username')
+ userName = scim_simple_attribute('username')
+
+
+types.register(Name, "Groups", [GroupSchema()])
+types.register(User,"Users",[UserSchema()])