Exemplo n.º 1
0
    def post(self, request, largs, name):
        """
        Add a sub-group.
        """
        if not request.user.has_perm('Groups.group_add_group'):
            return HttpResponseForbidden()

        # If BadRequest: 400 Bad Request
        subname = self._parse_post(request).lower()

        # If GroupNotFound: 404 Not Found
        group = group_backend.get(service=request.user, name=name)
        subgroup = group_backend.get(service=request.user, name=subname)

        group_backend.add_subgroup(group=group, subgroup=subgroup)

        self.log.info('Add subgroup "%s"', subname, extra=largs)
        return HttpResponseNoContent()
def save_groups(groups, args, parser):
    if groups:
        print("Groups:")

    subgroups = {}
    for name, data in six.iteritems(groups):
        service = data.pop('service', None)
        if service:
            service = Service.objects.get(username=service)

        try:
            group = group_backend.create(service=service, name=name)
            print("* %s: created." % name)
        except GroupExists:
            if args.skip_existing_groups:
                print("* %s: Already exists, skipping." % name)
                continue
            else:
                print("* %s: Already exists, adding memberships." % name)
                group = group_backend.get(service=service, name=name)

        for username in data.get('users', []):
            user = user_backend.get(username=username)
            group_backend.add_user(group=group, user=user)

        if 'subgroups' in data:
            subgroups[group] = data.pop('subgroups')

    # add group-memberships *after* we created all groups to make sure
    # groups already exist.
    for group, subgroups_data in six.iteritems(subgroups):
        for subgroup_data in subgroups_data:
            name = subgroup_data['name']
            service = subgroup_data.get('service')
            if service:
                service = Service.objects.get(username=service)

            subgroup = group_backend.get(name=name, service=service)
            group_backend.add_subgroup(group=group, subgroup=subgroup)
def main(args=None):
    # parse arguments
    args = parser.parse_args(args=args)

    # Actions that do not act on an existing group:
    if args.action == 'add':
        try:
            group_backend.create(name=args.group, service=args.service)
        except GroupExists:
            parser.error('Group already exists.')
    elif args.action in ['list', 'ls']:
        groups = group_backend.list(service=args.service)

        for name in sorted(groups):
            print(name)
    elif args.action == 'view':
        group = get_group(parser, args.group, args.service)

        explicit_users = sorted(group_backend.members(group, depth=0))
        effective_users = sorted(group_backend.members(group))
        parent_groups = sorted(group_backend.parents(group))
        sub_groups = sorted(group_backend.subgroups(group, filter=False))

        if explicit_users:
            print('* Explicit members: %s' % ', '.join(explicit_users))
        else:
            print('* No explicit members')
        if effective_users:
            print('* Effective members: %s' % ', '.join(effective_users))
        else:
            print('* No effective members')
        if parent_groups:
            print('* Parent groups:')
            print_by_service(parent_groups, '    ')
        else:
            print('* No parent groups')
        if sub_groups:
            print('* Subgroups:')
            print_by_service(sub_groups, '    ')
        else:
            print('* No subgroups')
    elif args.action == 'set-service':
        group = get_group(parser, args.group, args.service)
        group_backend.set_service(group, args.new_service)
    elif args.action == 'add-user':
        group = get_group(parser, args.group, args.service)
        group_backend.add_user(group, args.user)
    elif args.action == 'add-group':
        group = get_group(parser, args.group, args.service)
        subgroup = get_group(parser, args.subgroup, args.sub_service)

        group_backend.add_subgroup(group, subgroup)
    elif args.action in ['delete', 'del', 'rm']:
        group = get_group(parser, args.group, args.service)
        group_backend.remove(group)
    elif args.action in ['remove-user', 'rm-user', 'del-user']:
        group = get_group(parser, args.group, args.service)
        try:
            group_backend.rm_user(group, args.user)
        except UserNotFound:
            parser.error('User "%s" not member of group "%s".' %
                         (args.user.username, group.name))
    elif args.action == 'rename':
        group = get_group(parser, args.group, args.service)
        try:
            group_backend.rename(group, args.name)
        except GroupExists as e:
            parser.error("%s: %s" % (_d(args.name), e))
    elif args.action in ['remove-group', 'rm-group',
                         'del-group']:  # pragma: no branch
        group = get_group(parser, args.group, args.service)
        subgroup = get_group(parser, args.subgroup, args.sub_service)

        try:
            group_backend.rm_subgroup(group, subgroup)
        except GroupNotFound:
            parser.error('Group "%s" is not a subgroup of "%s".' %
                         (subgroup.name, group.name))