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))