Example #1
0
def transfer_zone_to_user(modeladmin, request, queryset):
    """Action that transfers the zone to another user.
    
    This action first displays a page which provides an input box where a
    username must be set.
    
    It checks if the user has change permission.
    
    Based on: https://github.com/django/django/blob/1.4.2/django/contrib/admin/actions.py
    
    Important
    ---------
    In order to work requires some special form fields (see the template).
    
    """
    opts = modeladmin.model._meta
    app_label = opts.app_label
    
    # Check that the user has change permission for the Domain model
    if not modeladmin.has_change_permission(request):
        raise PermissionDenied
    
    # The user has selected a new domain type through the
    # forms.ZoneTransferForm form. Make the changes to the selected
    # objects and return a None to display the change list view again.
    #if request.method == 'POST':
    if request.POST.get('post'):
        form = ZoneTransferForm(request.POST)
        if form.is_valid():
            transfer_to_username = request.POST.get('transfer_to_username')
            
            # Get the user object. Validation has taken place in the form.
            User = get_user_model()
            owner = User.objects.get(username=transfer_to_username)
            
            n = queryset.count()
            
            if n and owner:
                for obj in queryset:
                    obj.created_by = owner
                    obj.update_serial()
                    obj.save()
                    obj_display = force_unicode(obj)
                    modeladmin.log_change(request, obj, obj_display)
                messages.info(request, 'Successfully transfered %d domain(s).' % n)
            # Return None to display the change list page again.
            return None
    else:
        form = ZoneTransferForm()
        
    info_dict = {
        'form': form,
        'queryset': queryset,
        'opts': opts,
        'app_label': app_label,
        'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME,
    }
    return render_to_response(
        'powerdns_manager/actions/transfer_zone.html', info_dict, context_instance=RequestContext(request))
Example #2
0
def zone_transfer_view(request, id_list):
    """Transfer zones to another user.
    
    Accepts a comma-delimited list of Domain object IDs.
    
    An intermediate page asking for the username of the target owner is used.
    
    """
    # Create a list from the provided comma-delimited list of IDs.
    id_list = id_list.split(',')

    # Permission check on models.
    if not request.user.has_perms([
            'powerdns_manager.change_domain',
    ]):
        messages.error(request, 'Insufficient permissions for this action.')
        return HttpResponseRedirect(
            reverse('admin:powerdns_manager_domain_changelist'))

    if request.method == 'POST':
        form = ZoneTransferForm(request.POST)
        if form.is_valid():
            transfer_to_username = request.POST.get('transfer_to_username')

            # Get the user object of the new owner.
            # We always have a valid user object as validation has taken place
            # in the ZoneTransferForm.
            User = get_user_model()
            owner = User.objects.get(username=transfer_to_username)
            owner_display = force_unicode(owner)

            Domain = get_model('powerdns_manager', 'Domain')

            for n, zone_id in enumerate(id_list):
                obj = Domain.objects.get(id=zone_id)
                obj_display = force_unicode(obj)

                # Check zone ownership.
                if request.user != obj.created_by:
                    messages.error(
                        request,
                        'Permission denied for domain: %s' % obj_display)
                else:
                    obj.created_by = owner
                    obj.update_serial()
                    obj.save()

                    # Create log entry


#                     LogEntry.objects.log_action(
#                         user_id         = request.user.pk,
#                         content_type_id = ContentType.objects.get_for_model(obj).pk,
#                         object_id       = obj.pk,
#                         object_repr     = obj_display,
#                         action_flag     = CHANGE
#                     )

            n += 1
            if n == 1:
                messages.info(
                    request, "Successfully transfered domain '%s' to '%s'" %
                    (obj_display, owner_display))
            elif n > 1:
                messages.info(request,
                              'Successfully transfered %d domains.' % n)

            # Redirect to the Domain changelist.
            return HttpResponseRedirect(
                reverse('admin:powerdns_manager_domain_changelist'))

    else:
        form = ZoneTransferForm()

    info_dict = {
        'form': form,
        'id_list': id_list,
    }
    return render_to_response('powerdns_manager/zone/transfer.html',
                              info_dict,
                              context_instance=RequestContext(request))
Example #3
0
def zone_transfer_view(request, id_list):
    """Transfer zones to another user.
    
    Accepts a comma-delimited list of Domain object IDs.
    
    An intermediate page asking for the username of the target owner is used.
    
    """
    # Create a list from the provided comma-delimited list of IDs.
    id_list = id_list.split(',')
    
    # Permission check on models.
    if not request.user.has_perms([
            'powerdns_manager.change_domain',
        ]):
        messages.error(request, 'Insufficient permissions for this action.')
        return HttpResponseRedirect(reverse('admin:powerdns_manager_domain_changelist'))
    
    if request.method == 'POST':
        form = ZoneTransferForm(request.POST)
        if form.is_valid():
            transfer_to_username = request.POST.get('transfer_to_username')
            
            # Get the user object of the new owner.
            # We always have a valid user object as validation has taken place
            # in the ZoneTransferForm.
            User = get_user_model()
            owner = User.objects.get(username=transfer_to_username)
            owner_display = force_unicode(owner)
            
            Domain = cache.get_model('powerdns_manager', 'Domain')
            
            for n, zone_id in enumerate(id_list):
                obj = Domain.objects.get(id=zone_id)
                obj_display = force_unicode(obj)
                
                # Check zone ownership.
                if request.user != obj.created_by:
                    messages.error(request, 'Permission denied for domain: %s' % obj_display)
                else:
                    obj.created_by = owner
                    obj.update_serial()
                    obj.save()
                    
                    # Create log entry
#                     LogEntry.objects.log_action(
#                         user_id         = request.user.pk, 
#                         content_type_id = ContentType.objects.get_for_model(obj).pk,
#                         object_id       = obj.pk,
#                         object_repr     = obj_display, 
#                         action_flag     = CHANGE
#                     )
            
            n += 1
            if n == 1:
                messages.info(request, "Successfully transfered domain '%s' to '%s'" % (obj_display, owner_display))
            elif n > 1:
                messages.info(request, 'Successfully transfered %d domains.' % n)
                
            # Redirect to the Domain changelist.
            return HttpResponseRedirect(reverse('admin:powerdns_manager_domain_changelist'))
        
    else:
        form = ZoneTransferForm()
        
    info_dict = {
        'form': form,
        'id_list': id_list,
    }
    return render_to_response(
        'powerdns_manager/zone/transfer.html', info_dict, context_instance=RequestContext(request))
Example #4
0
def transfer_zone_to_user(modeladmin, request, queryset):
    """Action that transfers the zone to another user.
    
    This action first displays a page which provides an input box where a
    username must be set.
    
    It checks if the user has change permission.
    
    Based on: https://github.com/django/django/blob/1.4.2/django/contrib/admin/actions.py
    
    Important
    ---------
    In order to work requires some special form fields (see the template).
    
    """
    opts = modeladmin.model._meta
    app_label = opts.app_label

    # Check that the user has change permission for the Domain model
    if not modeladmin.has_change_permission(request):
        raise PermissionDenied

    # The user has selected a new domain type through the
    # forms.ZoneTransferForm form. Make the changes to the selected
    # objects and return a None to display the change list view again.
    #if request.method == 'POST':
    if request.POST.get('post'):
        form = ZoneTransferForm(request.POST)
        if form.is_valid():
            transfer_to_username = request.POST.get('transfer_to_username')

            # Get the user object. Validation has taken place in the form.
            User = get_user_model()
            owner = User.objects.get(username=transfer_to_username)

            n = queryset.count()

            if n and owner:
                for obj in queryset:
                    obj.created_by = owner
                    obj.update_serial()
                    obj.save()
                    obj_display = force_unicode(obj)
                    modeladmin.log_change(request, obj, obj_display)
                messages.info(request,
                              'Successfully transfered %d domain(s).' % n)
            # Return None to display the change list page again.
            return None
    else:
        form = ZoneTransferForm()

    info_dict = {
        'form': form,
        'queryset': queryset,
        'opts': opts,
        'app_label': app_label,
        'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME,
    }
    return render_to_response('powerdns_manager/actions/transfer_zone.html',
                              info_dict,
                              context_instance=RequestContext(request))