def share(request, object_type, object_id): model = Network if object_type == 'network' else Host obj, edit = get_object_or_forbidden(model, object_id, request.user) user_id = request.POST.get('share') if user_id: user = User.objects.get(pk=user_id) grant_access(obj, user) return share_list(request, object_type, object_id)
def share_edit(request, object_type, object_id, user_id): model = Network if object_type == 'network' else Host obj, edit = get_object_or_forbidden(model, object_id, request.user) user = User.objects.get(pk=user_id) if edit: revoke_edit(obj, user) else: grant_edit(obj, user) return share_list(request, object_type, object_id)
def network_delete(request, object_id): network, edit = get_object_or_forbidden(Network, object_id, request.user) if network.user != request.user: raise Http404() return delete_object(request, object_id=object_id, model=Network, post_delete_redirect=reverse('network_list'))
def host_delete(request, object_id): host, edit = get_object_or_forbidden(Host, object_id, request.user) if host.user != request.user: raise Http404() return delete_object(request, object_id=object_id, model=Host, post_delete_redirect=reverse('host_list'))
def host_update(request, object_id): host, edit = get_object_or_forbidden(Host, object_id, request.user) if not edit: raise Http404() return update_object(request, object_id=object_id, form_class=HostUpdateForm, template_name='networks/host_update.html')
def host_detail(request, object_id): host, edit = get_object_or_forbidden(Host, object_id, request.user) extra_context = { 'can_edit': edit } return object_detail(request, Host.objects.all(), object_id, extra_context=extra_context)
def network_update(request, object_id): network, edit = get_object_or_forbidden(Network, object_id, request.user) if not edit: raise Http404() return update_object(request, object_id=object_id, form_class=NetworkUpdateForm, template_name='networks/network_update.html')
def share_list(request, object_type, object_id): model = Network if object_type == 'network' else Host obj, edit = get_object_or_forbidden(model, object_id, request.user) all_users = User.objects.exclude(pk=request.user.pk) other_users = [] for user in all_users: if not user_has_access(obj, user): other_users.append(user) extra_context = { 'object': obj, 'object_type': object_type, 'other_users': other_users } return direct_to_template(request, 'networks/share.html', extra_context)
def network_events(request, object_id): """Display events related to network""" network, edit = get_object_or_forbidden(Network, object_id, request.user) queryset = Network.objects.all() related_hosts = [nh.host.pk for nh in NetworkHost.objects.filter(network=network)] events = Event.objects.filter(source_host__pk__in=related_hosts) extra_context = { 'events': events, 'can_edit': edit } return object_detail(request, queryset, object_id, extra_context=extra_context, template_name='networks/network_events.html')
def network_detail(request, object_id): """ Network detail page has the following features: * displaying basic network info (name, description, etc.) * listing hosts related to network * creating relations between network and host * removing relations between network and host(s) """ network, edit = get_object_or_forbidden(Network, object_id, request.user) # remove relation between the network and selected host(s) if request.POST.getlist('remove_host'): if edit: hosts_pk = request.POST.getlist('remove_host') network_host = NetworkHost.objects.filter(network=network, host__pk__in=hosts_pk) network_host.delete() # create relation between the network and selected host if request.POST.get('add_host'): if edit: host = Host.objects.get(pk=request.POST.get('add_host')) network_host = NetworkHost(network=network, host=host) network_host.save() queryset = Network.objects.filter(user=request.user) if network.hosts(): hosts_ids = [host.pk for host in network.hosts()] hosts_other = Host.objects.exclude(pk__in=hosts_ids).filter(user=request.user) else: hosts_other = Host.objects.filter(user=request.user) extra_context = { 'hosts_other': hosts_other, 'can_edit': edit } return object_detail(request, queryset, object_id, extra_context=extra_context)