~widelands-dev/widelands-website/django_staticfiles

« back to all changes in this revision

Viewing changes to check_input/models.py

  • Committer: franku
  • Date: 2017-11-30 15:53:56 UTC
  • mfrom: (476.1.12 spam_fight)
  • Revision ID: somal@arcor.de-20171130155356-gcx9f8krnkvf6v0y
mergedĀ theĀ anti_spam_app

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
from django.db import models
 
2
from django.contrib.auth.models import User
 
3
from django.contrib.contenttypes.models import ContentType
 
4
from django.contrib.contenttypes.fields import GenericForeignKey
 
5
from django.conf import settings
 
6
import re
 
7
 
 
8
 
 
9
class SuspiciousInput(models.Model):
 
10
    """Model for collecting suspicios user input.
 
11
 
 
12
    Call the check_input method with this attributes:
 
13
    content_object = Model instance of a saved(!) object
 
14
    user = user
 
15
    text = text to check for suspicious content
 
16
 
 
17
    Example:
 
18
    is_suspicous = SuspiciousInput.check_input(content_object=post, 
 
19
user=post.user, text=post.body)
 
20
 
 
21
    """
 
22
 
 
23
    text = models.CharField(
 
24
        max_length=200, verbose_name='suspicious user input')
 
25
    user = models.ForeignKey(User, verbose_name='related user')
 
26
    content_type = models.ForeignKey(ContentType, verbose_name='related model')
 
27
    object_id = models.PositiveIntegerField()
 
28
    content_object = GenericForeignKey('content_type', 'object_id')
 
29
 
 
30
    class Meta:
 
31
        ordering = ['content_type_id']
 
32
        default_permissions = ('change', 'delete',)
 
33
 
 
34
    def __unicode__(self):
 
35
        return self.text
 
36
 
 
37
    def is_suspicious(self):
 
38
        if any(x in self.text.lower() for x in settings.ANTI_SPAM_KWRDS):
 
39
            return True
 
40
        if re.search(settings.ANTI_SPAM_PHONE_NR, self.text):
 
41
            return True
 
42
        return False
 
43
 
 
44
    @classmethod
 
45
    def check_input(cls, *args, **kwargs):
 
46
        user_input = cls(*args, **kwargs)
 
47
        is_spam = user_input.is_suspicious()
 
48
        if is_spam:
 
49
            user_input.save()
 
50
        return is_spam