Example #1
0
    def create(self):
        """POST /repository/users: Create a new item"""
        if not request.environ.get('REPOSITORY_USER_ADMIN'):
            abort(403, "403 Forbidden")

        params = validate_new_user(request.params)

        new_user = User(client_dn=params['client_dn'],
                        name=params['name'],
                        email=params['email'])
        new_uuid = h.user_uuid(params['client_dn'])
        new_user.uuid = new_uuid

        # Deal with user groups
        if not params.get('groups'):
            groups = ['users']
        else:
            groups = groups.rstrip(',').split(',')
            # Check for default user group
            if 'users' not in groups:
                groups.append('users')

        # Do group membership
        #TODO: change from group name to group uuid for membership?
        group_q = meta.Session.query(Group)
        groups = [group_q.filter(Group.name==g).first() for g in groups]
        if None in groups:
            # abort if any specified group does not exist
            abort(400, '400 Bad Request - groups')
        else:
            [new_user.groups.append(g) for g in groups]

        # Update the database
        meta.Session.add(new_user)
        meta.Session.commit()
Example #2
0
 def _to_python(self, value, state):
     user_q = meta.Session.query(model.User)
     uuid = h.user_uuid(value)
     if user_q.filter(model.User.client_dn==value).first():
         state = 'CONFLICT'
         raise formencode.Invalid('conflict', value, state)
     elif user_q.filter(model.User.uuid==uuid).first():
         state = 'CONFLICT'
         raise formencode.Invalid('conflict', value, state)
     else:
         return value