Beispiel #1
0
def store_article_access(request, article, access_type, galley_type='view'):

    try:
        user_agent = parse_ua_string(request.META.get('HTTP_USER_AGENT', None))
    except TypeError:
        user_agent = None

    ip = shared.get_ip_address(request)
    iso_country_code = get_iso_country_code(ip)
    country = iso_to_country_object(iso_country_code)
    counter_tracking_id = request.session.get('counter_tracking')
    identifier = counter_tracking_id if counter_tracking_id else ip

    if user_agent and not user_agent.is_bot:

        # check if the current IP has accessed this article recently.
        time_to_check = timezone.now() - timedelta(seconds=30)
        check = models.ArticleAccess.objects.filter(
            identifier=identifier,
            accessed__gte=time_to_check,
            type=access_type,
            galley_type=galley_type,
        ).count()

        if not check:

            new_access = models.ArticleAccess.objects.create(
                article=article,
                type=access_type,
                identifier=identifier,
                galley_type=galley_type,
                country=country,
            )

            return new_access

        else:
            # get the most recent access attempt and reset its accessed to now.
            with transaction.atomic():
                access = models.ArticleAccess.objects.select_for_update(
                    # Avoid concurrent writes
                    skip_locked=True, ).filter(
                        identifier=identifier,
                        accessed__gte=time_to_check,
                        type=access_type,
                        galley_type=galley_type,
                    ).order_by('-accessed')[0]

                if access:
                    access.accessed = timezone.now()
                    access.save()

                    return access

                else:
                    return None

    else:

        return None
Beispiel #2
0
    def add_entry(types,
                  description,
                  level,
                  actor=None,
                  request=None,
                  target=None,
                  is_email=False,
                  to=None,
                  message_id=None,
                  subject=None):

        if actor is not None and callable(getattr(actor, "is_anonymous",
                                                  None)):
            if actor.is_anonymous():
                actor = None

        kwargs = {
            'types': types,
            'description': description,
            'level': level,
            # if no actor is supplied, assume anonymous
            'actor': actor if actor else None,
            'ip_address': get_ip_address(request),
            'target': target,
            'is_email': is_email,
            'to': to,
            'message_id': message_id,
            'subject': subject,
        }

        new_entry = LogEntry.objects.create(**kwargs).save()

        return new_entry
Beispiel #3
0
def contact(request):
    subject = request.GET.get('subject', '')
    contact_form = forms.ContactForm(subject=subject)

    if request.POST:
        contact_form = forms.ContactForm(request.POST)

        if contact_form.is_valid():
            new_contact = contact_form.save(commit=False)
            new_contact.client_ip = shared.get_ip_address(request)
            new_contact.content_type = request.model_content_type
            new_contact.object_ic = request.site_type.pk
            new_contact.save()

            logic.send_contact_message(new_contact, request)
            messages.add_message(request, messages.SUCCESS,
                                 'Your message has been sent.')
            return redirect(reverse('contact'))

    template = 'journal/contact.html'
    context = {
        'contact_form':
        contact_form,
        'contacts':
        core_models.Contacts.objects.filter(
            content_type=request.model_content_type,
            object_id=request.site_type.pk)
    }

    return render(request, template, context)
Beispiel #4
0
def store_article_access(request, article, access_type, galley_type='view'):

    user_agent = parse_ua_string(request.META.get('HTTP_USER_AGENT', None))
    counter_tracking_id = request.session.get('counter_tracking')
    identifier = counter_tracking_id if counter_tracking_id else shared.get_ip_address(
        request)

    if user_agent and not user_agent.is_bot:

        # check if the current IP has accessed this article recently.
        time_to_check = timezone.now() - timedelta(seconds=30)
        check = models.ArticleAccess.objects.filter(
            identifier=identifier,
            accessed__gte=time_to_check,
            type=access_type,
            galley_type=galley_type).count()

        if not check:

            new_access = models.ArticleAccess.objects.create(
                article=article,
                type=access_type,
                identifier=identifier,
                galley_type=galley_type)

            return new_access

        else:
            # get the most recent access attempt and reset its accessed to now.
            access = models.ArticleAccess.objects.filter(
                identifier=identifier,
                accessed__gte=time_to_check,
                type=access_type,
                galley_type=galley_type).order_by('-accessed')[0]

            if access:
                access.accessed = timezone.now()
                access.save()

                return access

            else:
                return None
    else:

        return None
Beispiel #5
0
    def add_entry(types,
                  description,
                  level,
                  actor=None,
                  request=None,
                  target=None,
                  is_email=False,
                  to=None,
                  message_id=None,
                  subject=None):

        if actor is not None and callable(getattr(actor, "is_anonymous",
                                                  None)):
            if actor.is_anonymous():
                actor = None

        kwargs = {
            'types': types,
            'description': description,
            'level': level,
            # if no actor is supplied, assume anonymous
            'actor': actor if actor else None,
            'ip_address': get_ip_address(request),
            'target': target,
            'is_email': is_email,
            'to': to,
            'message_id': message_id,
            'subject': subject,
        }

        new_entry = LogEntry.objects.create(**kwargs).save()

        if request and request.journal:
            if request.journal.slack_logging_enabled:
                notify.notification(
                    **{
                        'slack_message':
                        '[{0}] {1}'.format(kwargs['ip_address'], description),
                        'action': ['slack_admins'],
                        'request':
                        request
                    })

        return new_entry
Beispiel #6
0
    def add_book_access(self, request, access_type='download'):
        try:
            user_agent = parse_ua_string(request.META.get('HTTP_USER_AGENT', None))
        except TypeError:
            user_agent = None

        ip = get_ip_address(request)
        iso_country_code = get_iso_country_code(ip)
        identifier = request.session.session_key

        try:
            country = core_models.Country.objects.get(
                code=iso_country_code,
            )
        except core_models.Country.DoesNotExist:
            country = None

        if user_agent and not user_agent.is_bot:

            # check if the current IP has accessed this article recently.
            time_to_check = timezone.now() - timedelta(seconds=10)
            check = BookAccess.objects.filter(
                book=self.book,
                chapter=self,
                accessed__gte=time_to_check,
                type=access_type,
                identifier=identifier,
            ).count()

            if not check:
                BookAccess.objects.create(
                    book=self.book,
                    chapter=self,
                    type=access_type,
                    country=country,
                    identifier=identifier,
                )
Beispiel #7
0
def get_ua_and_ip(request):
    user_agent = request.META.get('HTTP_USER_AGENT', None)
    ip_address = shared.get_ip_address(request)

    return user_agent, ip_address