Example #1
0
def clear_old_picture(request):
    """
        Функция для выполнения в cron
        Удаляет изображения старше * дней (значение берется из настроек в БД)
    """
    try:
        days = Settings.all().get().days_for_old_picture
    except:
        days = getattr(settings, 'DAYS_FOR_OLD_PICTURE', 30)
    query = Picture.all().filter(
        "submitted_date <",
        datetime.datetime.today() - datetime.timedelta(days=days))
    response = HttpResponse()
    for pic in query:
        response.write("<br/>Delete: " + str(pic.name))

        # код для контролирования кол-ва занимаемого места
        user_free_size = User.get(pic.submitter.key())
        user_free_size.free_size = user_free_size.free_size + len(
            pic.data) + len(pic.data_small) + len(pic.data_cover)
        user_free_size.put()

        pic.delete()
    response.write("<br/>Delete END: " + str(len(query)))
    return response
Example #2
0
def settings(request):

  if request.method == 'POST': # If the form has been submitted...
    form = UserForm(request.POST) # A form bound to the POST data


    if form.is_valid(): # All validation rules pass
      update_user = User.get(form.cleaned_data['user_id'])
      if update_user != request.user:
        return render_to_response('error.html',
        {'error': "You are not allowed to edit this user"})

      update_user.get_profile().timezone = str(form.cleaned_data['timezone'])
      update_user.get_profile().use_imperial = form.cleaned_data['use_imperial']
      update_user.get_profile().default_public = \
          form.cleaned_data['default_public']
      update_user.put()
      update_user.get_profile().put()
      return HttpResponseRedirect('/a/') # Redirect after POST
  else:
    data = {'username' : request.user.username,
            'timezone' : request.user.get_profile().timezone,
            'use_imperial' : request.user.get_profile().use_imperial,
            'default_public' : request.user.get_profile().default_public,
            'user_id': str(request.user.key()),
           }
    form = UserForm(data) # An unbound form

  return render_to_response('user/settings.html',
      {
       'form': form,
       'data': data,
      }
  )
Example #3
0
def staff_purchase(request):
    user = request.REQUEST.get('user')
    if user:
        purchases = get_merged_purchases(User.get(pk=user))
    else:
        purchases = Purchase.objects.all()

    book = request.REQUEST.get('book')
    if book:
        purchases = purchases.filter(publication__book=Book.get(pk=book))
        
    status = request.REQUEST.get('status') or 'RSX'
    purchases = purchases.filter(status__in=status)
    
    sort = request.REQUEST.get('sort')
    if sort:
        purchases = purchases.annotate(downloads=Count('download')).order_by(sort.strip("+"))
        
    purchasepager = Pager(request, purchases.count(), pagesize=50)
    purchases = purchases[purchasepager.slice]
    
    toggle_pending = request.GET.copy()
    toggle_pending["status"] = ['RSX', 'PRSCX'][status == 'RSX']
    toggle_pending = '?' + toggle_pending.urlencode()

    return render_to_response("bookstore/staff_purchases.html", locals())
Example #4
0
            def save(self):
                picture = super(AddPictureForm, self).save(commit=False)
                picture.submitter = request.user  # при сохранение, поле заполняем данными из request

                if not len(request.META["HTTP_USER_AGENT"]) > 4:
                    if not imghdr.what(None,
                                       h=picture.data):  # проверяем тип файла
                        raise forms.ValidationError(
                            u'Filetype is not png format')

                try:
                    width_samll = Settings.all().get().width_for_small_picture
                    width_cover = Settings.all().get().width_for_cover_album
                except:
                    width_samll = getattr(settings, 'WIDTH_FOR_SMALL_PICTURE',
                                          400)
                    width_cover = getattr(settings, 'WIDTH_FOR_COVER_ALBUM',
                                          200)
                picture.data_small = images.resize(picture.data,
                                                   width=width_samll)
                picture.data_cover = images.resize(picture.data,
                                                   width=width_cover)

                # код для контролирования кол-ва занимаемого места
                user_free_size = User.get(request.user.key())
                user_free_size.free_size = user_free_size.free_size - len(
                    picture.data) - len(picture.data_small) - len(
                        picture.data_cover)
                user_free_size.put()

                picture.save()
                return picture
Example #5
0
 def __get__(self, request, obj_type=None):
     if not hasattr(request, '_cached_user'):
         try:
             request._cached_user = User.get(request.session[SESSION_KEY]) or AnonymousUser() 
         except KeyError:
             request._cached_user = AnonymousUser()
     return request._cached_user
Example #6
0
 def test_activation(self):
     """
     Test that user activation actually activates the user and
     properly resets the activation key, and fails for an
     already-active or expired user, or an invalid key.
     
     """
     # Activating a valid user returns the user.
     self.failUnlessEqual(RegistrationProfile.objects.activate_user(RegistrationProfile.all().filter('user ='******'user ='******'user ='******'t a SHA1 hash returns False.
     self.failIf(RegistrationProfile.objects.activate_user('foo'))
     
     # Activating from a key that doesn't exist returns False.
     self.failIf(RegistrationProfile.objects.activate_user(sha.new('foo').hexdigest()))
Example #7
0
    class TestViews(TestCase):
        def setUp(self):
            self.user = User()

        def test_user_list(self):
            response = self.user.get(reverse(users_list))

            self.assertEqual(response.status_code, 200)
            self.assertTemplateUsed(response, 'users_list.html')
Example #8
0
def delete_picture_ok(request, key):
    """ при успешном удаление картинки, освобождаем свободное место пользователя """
    if request.user.is_authenticated():
        # код для контролирования кол-ва занимаемого места
        user_free_size = User.get(request.user.key())
        user_free_size.free_size = user_free_size.free_size + int(key)
        user_free_size.put()
        return HttpResponseRedirect('/gallery')
    else:
        return HttpResponseRedirect('/account/login/')
Example #9
0
def delete_picture_ok(request, key):
    """ при успешном удаление картинки, освобождаем свободное место пользователя """
    if request.user.is_authenticated():
        # код для контролирования кол-ва занимаемого места
        user_free_size = User.get(request.user.key())
        user_free_size.free_size = user_free_size.free_size + int(key)
        user_free_size.put()
        return HttpResponseRedirect('/gallery')
    else:
        return HttpResponseRedirect('/account/login/')
    def __get__(self, request, obj_type=None):
        if not hasattr(request, "_cached_user"):
            if settings.DEBUG:
                if request.session.get('logindebug',False):
                    self._cached_user = User.get("ag1tdXNpY2thbGVuZGFycgoLEgRVc2VyGAIM")
                else:
                    self._cached_user = AnonymousUser()
                return self._cached_user

            request._cached_user = FacebookProfile.get_djangouser(request)

        return request._cached_user
Example #11
0
 def get_user(self, id):    
     """Required method for authentication backends. """
     if not id:
         raise ValueError
     
     try: 
         return User.get(id) # Returns None if not found
     except db.KindError:
         self.logger.error('RpxBackend: Entity with ID ' + str(id) + ' id was not of type User!')
         return None
     except db.BadKeyError:
         self.logger.error('RpxBackend: Id ' + str(id) + ' seems malformed')
         return None
Example #12
0
def user_info(request):
    if request.user.is_authenticated():
        user = User.get(request.user.key())
        user_info = {}
        user_info['free_size'] = user.free_size
        user_info['username'] = user.username
        user_info['last_login'] = user.last_login.strftime("%A, %d. %B %Y %I:%M%p")
        user_info['date_joined'] = user.date_joined.strftime("%A, %d. %B %Y %I:%M%p")
        response = HttpResponse(mimetype='text/javascript')
        response.write(json.dumps(user_info))
        return response
    else:
        return HttpResponseRedirect('/account/login/')
Example #13
0
def user_info(request):
    if request.user.is_authenticated():
        user = User.get(request.user.key())
        user_info = {}
        user_info['free_size'] = user.free_size
        user_info['username'] = user.username
        user_info['last_login'] = user.last_login.strftime(
            "%A, %d. %B %Y %I:%M%p")
        user_info['date_joined'] = user.date_joined.strftime(
            "%A, %d. %B %Y %I:%M%p")
        response = HttpResponse(mimetype='text/javascript')
        response.write(json.dumps(user_info))
        return response
    else:
        return HttpResponseRedirect('/account/login/')
Example #14
0
def delete_album_ok(request, key):
    """ при успешном удаление альбома, освобождаем свободное место пользователя """
    if request.user.is_authenticated():
        pictures = Picture.all().filter('album', db.Key(key)).fetch(999)
        size = 0
        for pic in pictures:
            size = size + len(pic.data) + len(pic.data_cover) + len(pic.data_small)
            pic.delete()
        # код для контролирования кол-ва занимаемого места
        user_free_size = User.get(request.user.key())
        user_free_size.free_size = user_free_size.free_size + size
        user_free_size.put()
        return HttpResponseRedirect('/gallery')
    else:
        return HttpResponseRedirect('/account/login/')
Example #15
0
def idp_sso(request, provider_id, user_id=None):
    '''Initiate an SSO toward provider_id without a prior AuthnRequest
    '''
    assert provider_id, 'You must call idp_initiated_sso with a provider_id parameter'
    server = create_idff12_server(request, reverse(metadata))
    login = lasso.Login(server)
    liberty_provider = load_provider(request, provider_id, server=login.server)
    service_provider = liberty_provider.service_provider
    binding = service_provider.prefered_assertion_consumer_binding
    nid_policy = service_provider.default_name_id_format
    if user_id:
        user = User.get(id=user_id)
        if not check_delegated_authentication_permission(request):
            logging.warning(
                'ID-FFv1.2: %r tried to log as %r on %r but was forbidden' %
                (request.user, user, provider_id))
            return HttpResponseForbidden(
                'You must be superuser to log as another user')
    else:
        user = request.user
    load_federation(request, login, user)
    if not liberty_provider:
        message = _('ID-FFv1.2: provider %r unknown') % provider_id
        logging.warning('ID-FFv1.2: provider %r unknown' % provider_id)
        return HttpResponseForbidden(message)
    login.initIdpInitiatedAuthnRequest(provider_id)
    if binding == 'art':
        login.request.protocolProfile = lasso.LIB_PROTOCOL_PROFILE_BRWS_ART
    elif binding == 'post':
        login.request.protocolProfile = lasso.LIB_PROTOCOL_PROFILE_BRWS_POST
    else:
        raise Exception('Unsupported binding %r' % binding)
    if nid_policy == 'persistent':
        login.request.nameIdPolicy = lasso.LIB_NAMEID_POLICY_TYPE_FEDERATED
    elif nid_policy == 'transient':
        login.request.nameIdPolicy = lasso.LIB_NAMEID_POLICY_TYPE_ONE_TIME
    else:
        message = _(
            'ID-FFv1.2: default nameIdPolicy unsupported %r') % nid_policy
        logging.error(message)
        raise Exception(message)
    login.processAuthnRequestMsg(None)

    return sso_after_process_request(request,
                                     login,
                                     consent_obtained=True,
                                     user=user,
                                     save=False)
Example #16
0
def delete_album_ok(request, key):
    """ при успешном удаление альбома, освобождаем свободное место пользователя """
    if request.user.is_authenticated():
        pictures = Picture.all().filter('album', db.Key(key)).fetch(999)
        size = 0
        for pic in pictures:
            size = size + len(pic.data) + len(pic.data_cover) + len(
                pic.data_small)
            pic.delete()
        # код для контролирования кол-ва занимаемого места
        user_free_size = User.get(request.user.key())
        user_free_size.free_size = user_free_size.free_size + size
        user_free_size.put()
        return HttpResponseRedirect('/gallery')
    else:
        return HttpResponseRedirect('/account/login/')
Example #17
0
def idp_sso(request, provider_id, user_id = None):
    '''Initiate an SSO toward provider_id without a prior AuthnRequest
    '''
    assert provider_id, 'You must call idp_initiated_sso with a provider_id parameter'
    server = create_idff12_server(request, reverse(metadata))
    login = lasso.Login(server)
    liberty_provider = load_provider(request, provider_id, server=login.server)
    service_provider = liberty_provider.service_provider
    binding = service_provider.prefered_assertion_consumer_binding
    nid_policy = service_provider.default_name_id_format
    if user_id:
        user = User.get(id = user_id)
        if not check_delegated_authentication_permission(request):
            logging.warning('ID-FFv1.2: %r tried to log as %r on %r but was forbidden' % (
                                    request.user, user, provider_id))
            return HttpResponseForbidden('You must be superuser to log as another user')
    else:
        user = request.user
    load_federation(request, login, user)
    if not liberty_provider:
        message = _('ID-FFv1.2: provider %r unknown') % provider_id
        logging.warning('ID-FFv1.2: provider %r unknown' % provider_id)
        return HttpResponseForbidden(message)
    login.initIdpInitiatedAuthnRequest(provider_id)
    if binding == 'art':
        login.request.protocolProfile = lasso.LIB_PROTOCOL_PROFILE_BRWS_ART
    elif binding == 'post':
        login.request.protocolProfile = lasso.LIB_PROTOCOL_PROFILE_BRWS_POST
    else:
        raise Exception('Unsupported binding %r' % binding)
    if nid_policy == 'persistent':
        login.request.nameIdPolicy = lasso.LIB_NAMEID_POLICY_TYPE_FEDERATED
    elif nid_policy == 'transient':
        login.request.nameIdPolicy = lasso.LIB_NAMEID_POLICY_TYPE_ONE_TIME
    else:
        message = _('ID-FFv1.2: default nameIdPolicy unsupported %r') % nid_policy
        logging.error(message)
        raise Exception(message)
    login.processAuthnRequestMsg(None)

    return sso_after_process_request(request, login,
            consent_obtained = True, user = user, save = False)
Example #18
0
def change_password(request):
    """Process the reset_password Form to reset the user's password"""
    email = request.POST['email']
    old_password = request.POST['old_password']
    new_password = request.POST['new_password']
    confirm_password = request.POST['confirm_password']

    # Validation
    required_fields = [email, old_password, new_password, confirm_password]
    trimmed = [i.strip() for i in required_fields]
    if "" in trimmed:
        return render(request, 'reset_password.html', {
            'email': email,
            'message': 'Missing Required Fields'})

    # Password matching
    if new_password != confirm_password:
        return render(request, 'reset_password.html', {
            'email': email,
            'message': 'New Password is different from Confirm Password'})

    # Email validation
    if not re.match(r"[^@]+@[^@]+\.[^@]+", email):
        return render(request, 'reset_password.html', {
            'email': email,
            'message': 'Invalid Email'})

    user = authenticate(username=email, password=old_password)

    if user is not None:
        login(request, user)
        userget = User.get(username=email)
        userget.set_password(new_password)
        userget.save()
        logout(request)
        return redirect('news:user_login')
    else:
        return render(request, 'reset_password.html', {
            'email': email,
            'message': 'Incorrect Password to Email or Email does not exist'})
Example #19
0
def clear_old_picture(request):
    """
        Функция для выполнения в cron
        Удаляет изображения старше * дней (значение берется из настроек в БД)
    """
    try:
        days = Settings.all().get().days_for_old_picture
    except:
        days = getattr(settings, 'DAYS_FOR_OLD_PICTURE', 30)
    query = Picture.all().filter("submitted_date <", datetime.datetime.today() - datetime.timedelta(days=days))
    response = HttpResponse()
    for pic in query:
        response.write("<br/>Delete: "+str(pic.name))

        # код для контролирования кол-ва занимаемого места
        user_free_size = User.get(pic.submitter.key())
        user_free_size.free_size = user_free_size.free_size + len(pic.data) + len(pic.data_small) + len(pic.data_cover)
        user_free_size.put()

        pic.delete()
    response.write("<br/>Delete END: "+str(len(query)))
    return response
Example #20
0
    def test_activation(self):
        """
        Test that user activation actually activates the user and
        properly resets the activation key, and fails for an
        already-active or expired user, or an invalid key.
        
        """
        # Activating a valid user returns the user.
        self.failUnlessEqual(
            RegistrationProfile.objects.activate_user(
                RegistrationProfile.all().filter(
                    'user ='******'user ='******'user ='******'t a SHA1 hash returns False.
        self.failIf(RegistrationProfile.objects.activate_user('foo'))

        # Activating from a key that doesn't exist returns False.
        self.failIf(
            RegistrationProfile.objects.activate_user(
                sha.new('foo').hexdigest()))
Example #21
0
            def save(self):
                picture = super(AddPictureForm, self).save(commit=False)
                picture.submitter = request.user # при сохранение, поле заполняем данными из request

                if not len(request.META["HTTP_USER_AGENT"])>4:
                    if not imghdr.what(None, h=picture.data): # проверяем тип файла
                        raise forms.ValidationError(u'Filetype is not png format')

                try:
                    width_samll = Settings.all().get().width_for_small_picture
                    width_cover = Settings.all().get().width_for_cover_album
                except:
                    width_samll = getattr(settings, 'WIDTH_FOR_SMALL_PICTURE', 400)
                    width_cover = getattr(settings, 'WIDTH_FOR_COVER_ALBUM', 200)
                picture.data_small = images.resize( picture.data, width=width_samll)
                picture.data_cover = images.resize( picture.data, width=width_cover)

                # код для контролирования кол-ва занимаемого места
                user_free_size = User.get(request.user.key())
                user_free_size.free_size = user_free_size.free_size - len(picture.data) - len(picture.data_small) - len(picture.data_cover)
                user_free_size.put()

                picture.save()
                return picture
Example #22
0
 def get_user(self, user_id):
     try:
         return User.get(user_id)
     except:
         return None
Example #23
0
def getUserProjectList(User):
    user = User.get()
    userprojectrole = user.userroleproject_set.all()[0]
    projectlist = [x.code for x in  userprojectrole.project.all()]
    return projectlist
Example #24
0
def getUserProjectRole(User):
    user = User.get()
    userprojectrole = user.userroleproject_set.all()[0]
    return userprojectrole.role.role
Example #25
0
def load_user(user_id):
    return User.get(user_id)
Example #26
0
class Listing(BaseBackend):
	name = "Listing"
	def __init__(self):
		BaseBackend.__init__(self, models.Listing)
		self.ip = IP()
		self.sensor = Sensor()
		self.host = Host()
		self.reason = Reason()
		self.duration = Duration()
		self.user = User()
		self.historylisting = HistoryListing()
		self.config = Config()
		self.ipcalc = IPCalc()

	def add(self, *args, **kwargs):
		(result, ip) = self.ip.get(ip=kwargs['ip'])
		if not result:
			(result, ip) = self.ip.add(ip=kwargs['ip'])
			if not result:
				return (False, ip)

		(result, listing) = self.get(ip=ip)
		if result:
			return (False, "IP is already blacklisted")

		(result, sensor) = self.sensor.get(name=kwargs['sensor'])
		if not result:
			(result, sensor) = self.sensor.add(name=kwargs['sensor'])
			if not result:
				return (False, sensor)

		(result, sensor_host) = self.host.get(hostname=kwargs['sensor_host'])
		if not result:
			(result, sensor_host) = self.host.add(hostname=kwargs['sensor_host'], user=kwargs['reporter'])
			if not result:
				return (False, sensor_host)

		(result, reason) = self.reason.get(reason=kwargs['reason'], sensor=sensor)
		if not result:
			(result, reason) = self.reason.add(reason=kwargs['reason'], sensor=sensor)
			if not result:
				return (False, reason)

		(result, user) = self.user.get(username=kwargs['reporter'])
		if not result:
			(result, user) = self.user.add(username=kwargs['reporter'])
			if not result:
				return (False, user)

		(result, historylistings) = self.historylisting.filter(ip=ip)
		if result and len(historylistings) != 0:
			occurrences = len(historylistings)
		else:
			occurrences = 1

		(result, duration) = self.duration.get(duration=occurrences*self.config["blacklist.multiplier"])
		if not result:
			(result, duration) = self.duration.add(duration=occurrences*self.config["blacklist.multiplier"])
			if not result:
				return (False, duration)

		listing = models.Listing(
			ip=ip,
			reason=reason,
			sensor=sensor,
			sensor_host=sensor_host,
			timestamp=datetime.now(),
			duration=duration,
			reporter=user,
		)
		listing.save()

		historylisting = self.historylisting.add(
			ip=ip,
			reason=reason,
			sensor=sensor,
			sensor_host=sensor_host,
			timestamp=listing.timestamp,
			duration=duration,
			reporter=user
		)

		return (True, listing)

	def delete(self, *args, **kwargs):
		try:
			return BaseBackend.delete(self, *args, **kwargs)
		except:
			(result, ip) = self.ip.get(ip=kwargs['ip'])
			if not result:
				return (False, ip)
			kwargs['ip'] = ip
			return BaseBackend.delete(self, *args, **kwargs)
Example #27
0
 def get_user(self, key_name):
   actor_ref = User.get(key_name)
   return actor_ref
Example #28
0
def payments(request):

    print("reached here")
    if request.method == 'GET':
        pass

    elif request.method == 'POST':
        print("reached here")
        serializer = TransactionSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()

            user_info = User.get(user=request.data["user"])
            user_card = CardProfile.objects.get(user=user_info).card_no
            user_exp = CardProfile.objects.get(user=user_info).expiration

            OUTPUT_JSON = {"clientReferenceInformation": {
                "code": "TC50171_3"
            },
                "processingInformation": {
                    "commerceIndicator": "internet"
                },
                "aggregatorInformation": {
                    "subMerchant": {
                        "cardAcceptorID": "1234567890",
                        "country": "US",
                        "phoneNumber": "650-432-0000",
                        "address1": "900 Metro Center",
                        "postalCode": "94404-2775",
                        "locality": "Foster City",
                        "name": "Visa Inc",
                        "administrativeArea": "CA",
                        "region": "PEN",
                        "email": "*****@*****.**"
                    },
                    "name": "V-Internatio",
                    "aggregatorID": "123456789"
                },
                "orderInformation": {
                    "billTo": {
                        "country": "US",
                        "lastName": "VDP",
                        "address2": "Address 2",
                        "address1": "201 S. Division St.",
                        "postalCode": "48104-2201",
                        "locality": "Ann Arbor",
                        "administrativeArea": "MI",
                        "firstName": "RTS",
                        "phoneNumber": "999999999",
                        "district": "MI",
                        "buildingNumber": "123",
                        "company": "Visa",
                        "email": "*****@*****.**"
                    },
                    "amountDetails": {
                        "totalAmount": "102.21",
                        "currency": "USD"
                    }
                },
                "paymentInformation": {
                    "card": {
                        "expirationYear": str(user_exp),
                        "number": str(user_card),
                        "securityCode": "123",
                        "expirationMonth": "12",
                        "type": "002"
                    }
                }
            }

            url = "http://localhost:3000/api/payment"
            r = requests.post(url, OUTPUT_JSON)
            json_object = r.json()
            if r.status_code == 200:
                return Response(json_object, status=status.HTTP_200_OK)
            else:
                return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Example #29
0
	def get_user(self, user_id):
		return User.get(user_id)
Example #30
0
class Listing(BaseBackend):
    name = "Listing"

    def __init__(self):
        BaseBackend.__init__(self, models.Listing)
        self.ip = IP()
        self.sensor = Sensor()
        self.host = Host()
        self.reason = Reason()
        self.duration = Duration()
        self.user = User()
        self.historylisting = HistoryListing()
        self.config = Config()
        self.ipcalc = IPCalc()

    def add(self, *args, **kwargs):
        (result, ip) = self.ip.get(ip=kwargs['ip'])
        if not result:
            (result, ip) = self.ip.add(ip=kwargs['ip'])
            if not result:
                return (False, ip)

        (result, listing) = self.get(ip=ip)
        if result:
            return (False, "IP is already blacklisted")

        (result, sensor) = self.sensor.get(name=kwargs['sensor'])
        if not result:
            (result, sensor) = self.sensor.add(name=kwargs['sensor'])
            if not result:
                return (False, sensor)

        (result, sensor_host) = self.host.get(hostname=kwargs['sensor_host'])
        if not result:
            (result,
             sensor_host) = self.host.add(hostname=kwargs['sensor_host'],
                                          user=kwargs['reporter'])
            if not result:
                return (False, sensor_host)

        (result, reason) = self.reason.get(reason=kwargs['reason'],
                                           sensor=sensor)
        if not result:
            (result, reason) = self.reason.add(reason=kwargs['reason'],
                                               sensor=sensor)
            if not result:
                return (False, reason)

        (result, user) = self.user.get(username=kwargs['reporter'])
        if not result:
            (result, user) = self.user.add(username=kwargs['reporter'])
            if not result:
                return (False, user)

        (result, historylistings) = self.historylisting.filter(ip=ip)
        if result and len(historylistings) != 0:
            occurrences = len(historylistings)
        else:
            occurrences = 1

        (result,
         duration) = self.duration.get(duration=occurrences *
                                       self.config["blacklist.multiplier"])
        if not result:
            (result,
             duration) = self.duration.add(duration=occurrences *
                                           self.config["blacklist.multiplier"])
            if not result:
                return (False, duration)

        listing = models.Listing(
            ip=ip,
            reason=reason,
            sensor=sensor,
            sensor_host=sensor_host,
            timestamp=datetime.now(),
            duration=duration,
            reporter=user,
        )
        listing.save()

        historylisting = self.historylisting.add(ip=ip,
                                                 reason=reason,
                                                 sensor=sensor,
                                                 sensor_host=sensor_host,
                                                 timestamp=listing.timestamp,
                                                 duration=duration,
                                                 reporter=user)

        return (True, listing)

    def delete(self, *args, **kwargs):
        try:
            return BaseBackend.delete(self, *args, **kwargs)
        except:
            (result, ip) = self.ip.get(ip=kwargs['ip'])
            if not result:
                return (False, ip)
            kwargs['ip'] = ip
            return BaseBackend.delete(self, *args, **kwargs)