diff options
Diffstat (limited to 'coip/apps/membership/models.py')
-rw-r--r-- | coip/apps/membership/models.py | 62 |
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()]) |