def view_local_group(request):

    return_dict = {}
    try:
        if 'searchby' not in request.GET:
            raise Exception("Malformed request. Please use the menus.")
        if request.GET['searchby'] == 'grpname':
            if 'grpname' not in request.GET:
                raise Exception("Malformed request. Please use the menus.")
            gd, err = local_users.get_local_group(request.GET['grpname'])
        elif request.GET['searchby'] == 'gid':
            if 'gid' not in request.GET:
                raise Exception("Malformed request. Please use the menus.")
            gd, err = local_users.get_local_group(request.GET['grpname'],
                                                  False)

        if err:
            raise Exception(err)

        if not gd:
            raise Exception("Specified group not found. Please use the menus.")

        return_dict["group"] = gd

        if "ack" in request.GET:
            if request.GET["ack"] == "gid_changed":
                return_dict[
                    'ack_message'] = "Local user's group successfully updated"
            elif request.GET["ack"] == "changed_password":
                return_dict['ack_message'] = "Successfully update password"
            elif request.GET["ack"] == "set_membership":
                return_dict[
                    'ack_message'] = "Local group membership successfully modified"

        return django.shortcuts.render_to_response(
            'view_local_group.html',
            return_dict,
            context_instance=django.template.context.RequestContext(request))
    except Exception, e:
        return_dict['base_template'] = 'users-groups_base.html'
        return_dict["page_title"] = 'Local group details'
        return_dict['tab'] = 'view_local_groups_tab'
        return_dict["error"] = 'Error loading local group details '
        return_dict["error_details"] = str(e)
        return django.shortcuts.render_to_response(
            "logged_in_error.html",
            return_dict,
            context_instance=django.template.context.RequestContext(request))
def view_local_group(request):

  return_dict = {}
  try:
    if 'searchby' not in request.GET:
      raise Exception("Malformed request. Please use the menus.")
    if request.GET['searchby'] == 'grpname':
      if 'grpname' not in request.GET:
        raise Exception("Malformed request. Please use the menus.")
      gd,err = local_users.get_local_group(request.GET['grpname'])
    elif request.GET['searchby'] == 'gid':
      if 'gid' not in request.GET:
        raise Exception("Malformed request. Please use the menus.")
      gd,err = local_users.get_local_group(request.GET['grpname'], False)

    if err:
      raise Exception(err)

    if not gd:
      raise Exception("Specified group not found. Please use the menus.")
      
    return_dict["group"] = gd
  
    if "action" in request.GET:
      conf = ''
      '''
      if request.GET["action"] == "gid_changed":
        conf = "Local user's group successfully updated"
      elif request.GET["action"] == "changed_password":
        conf = "Successfully update password"
      return_dict["conf"] = conf
      '''
  
    return django.shortcuts.render_to_response('view_local_group.html', return_dict, context_instance=django.template.context.RequestContext(request))
  except Exception, e:
    return_dict['base_template'] = 'users-groups_base.html'
    return_dict["page_title"] = 'Local group details'
    return_dict['tab'] = 'view_local_groups_tab'
    return_dict["error"] = 'Error loading local group details '
    return_dict["error_details"] = str(e)
    return django.shortcuts.render_to_response("logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def delete_local_group(request):
    return_dict = {}
    try:
        if "grpname" not in request.REQUEST:
            raise Exception("Invalid request. No group name specified.")

        gd, err = local_users.get_local_group(request.REQUEST['grpname'])
        if err or (not gd):
            if err:
                raise Exception(err)
            else:
                raise Exception("Could not retrieve group information")

        if gd['members']:
            raise Exception(
                "Cannot delete this group as it has the following members : %s"
                % (','.join(gd['members'])))

        if request.method == "GET":
            #Return the form
            return_dict["grpname"] = request.GET["grpname"]
            return django.shortcuts.render_to_response(
                "delete_local_group_conf.html",
                return_dict,
                context_instance=django.template.context.RequestContext(
                    request))
        else:
            #Form submission so create
            return_dict = {}
            ret, err = local_users.delete_local_group(request.POST["grpname"])
            if not ret:
                if err:
                    raise Exception('Error deleting group : %s' % err)
                else:
                    raise Exception('Error deleting group')
            audit_str = "Deleted a local group %s" % request.POST["grpname"]
            audit.audit("delete_local_group", audit_str, request.META)
            url = '/view_local_groups?ack=deleted'
            return django.http.HttpResponseRedirect(url)
    except Exception, e:
        return_dict['base_template'] = 'users-groups_base.html'
        return_dict["page_title"] = 'Delete a local user group'
        return_dict['tab'] = 'view_local_groups_tab'
        return_dict["error"] = 'Error deleting a local user group'
        return_dict["error_details"] = str(e)
        return django.shortcuts.render_to_response(
            "logged_in_error.html",
            return_dict,
            context_instance=django.template.context.RequestContext(request))
def delete_local_group(request):
  return_dict = {}
  try:
    if "grpname" not in request.REQUEST:
      raise Exception("Invalid request. No group name specified.")
    
    gd, err = local_users.get_local_group(request.REQUEST['grpname'])
    if err or (not gd):
      if err:
        raise Exception(err)
      else:
        raise Exception("Could not retrieve group information")

    if gd['members']:
      raise Exception("Cannot delete this group as it has the following members : %s"%(','.join(gd['members'])))

    if request.method == "GET":
      #Return the form
      return_dict["grpname"] = request.GET["grpname"]
      return django.shortcuts.render_to_response("delete_local_group_conf.html", return_dict, context_instance = django.template.context.RequestContext(request))
    else:
      #Form submission so create
      return_dict = {}
      ret, err = local_users.delete_local_group(request.POST["grpname"])
      if not ret:
        if err:
          raise Exception('Error deleting group : %s'%err)
        else:
          raise Exception('Error deleting group')
      audit_str = "Deleted a local group %s"%request.POST["grpname"]
      audit.audit("delete_local_group", audit_str, request.META["REMOTE_ADDR"])
      url = '/view_local_groups?action=deleted'
      return django.http.HttpResponseRedirect(url)
  except Exception, e:
    return_dict['base_template'] = 'users-groups_base.html'
    return_dict["page_title"] = 'Delete a local user group'
    return_dict['tab'] = 'view_local_groups_tab'
    return_dict["error"] = 'Error deleting a local user group'
    return_dict["error_details"] = str(e)
    return django.shortcuts.render_to_response("logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def modify_group_membership(request):
    return_dict = {}
    try:
        if "ack" in request.GET:
            if request.GET["ack"] == "created":
                return_dict['ack_message'] = "Local group successfully created"

        if "grpname" not in request.REQUEST:
            raise Exception("Invalid request. No group name specified.")

        gd, err = local_users.get_local_group(request.REQUEST['grpname'])
        if err or (not gd):
            if err:
                raise Exception(err)
            else:
                raise Exception("Could not retrieve group information")

        print 'gd - ', gd

        user_list, err = local_users.get_local_users()
        if err:
            raise Exception(err)

        print 'user_list', user_list

        users = []
        primary_users = []
        permitted_users = []
        for u in user_list:
            if u['gid'] != gd['gid']:
                permitted_users.append(u)
            else:
                primary_users.append(u['username'])
            if u['username'] in gd['members']:
                users.append(u['username'])
        print 'users', users
        #return_dict['primary_users'] = primary_users

        if request.method == "GET":
            #Return the form
            initial = {}
            initial['grpname'] = request.GET['grpname']
            initial['users'] = users
            form = local_user_forms.ModifyGroupMembershipForm(
                initial=initial, user_list=permitted_users)
            return_dict['form'] = form
            return django.shortcuts.render_to_response(
                "modify_group_membership.html",
                return_dict,
                context_instance=django.template.context.RequestContext(
                    request))
        else:
            form = local_user_forms.ModifyGroupMembershipForm(
                request.POST, user_list=permitted_users)
            return_dict["form"] = form
            if form.is_valid():
                cd = form.cleaned_data
                users = cd['users']
                print users

                audit_str = 'Modified group membership for group "%s". ' % cd[
                    'grpname']
                deleted_users = []
                for existing_user in gd['members']:
                    if existing_user not in users and existing_user not in primary_users:
                        deleted_users.append(existing_user)
                        print 'delete user %s' % existing_user
                added_users = []
                for user in users:
                    if user not in gd['members'] and user not in primary_users:
                        added_users.append(user)
                        print 'add user %s' % user
                if added_users:
                    audit_str += 'Added user(s) %s. ' % (','.join(added_users))
                if deleted_users:
                    audit_str += 'Removed user(s) %s.' % (
                        ','.join(deleted_users))
                print audit_str
                #assert False
                ret, err = local_users.set_group_membership(
                    cd['grpname'], cd['users'])
                if err:
                    raise Exception('Error setting group membership: %s' % err)
                #assert False
                audit.audit("set_group_membership", audit_str, request.META)
                url = '/view_local_group?grpname=%s&searchby=grpname&ack=set_membership' % cd[
                    'grpname']
                return django.http.HttpResponseRedirect(url)
            else:
                return django.shortcuts.render_to_response(
                    "modify_group_membership.html",
                    return_dict,
                    context_instance=django.template.context.RequestContext(
                        request))
    except Exception, e:
        return_dict['base_template'] = 'users-groups_base.html'
        return_dict["page_title"] = 'Modify group membership'
        return_dict['tab'] = 'view_local_groups_tab'
        return_dict["error"] = 'Error modifying group membership'
        return_dict["error_details"] = str(e)
        return django.shortcuts.render_to_response(
            "logged_in_error.html",
            return_dict,
            context_instance=django.template.context.RequestContext(request))