From 74371d3fcb6731726564f554956f62ff29cab067 Mon Sep 17 00:00:00 2001 From: rubenwardy Date: Thu, 16 Jul 2020 14:35:12 +0100 Subject: [PATCH] Check user-agent for crawlers before incrementing counters --- app/blueprints/packages/packages.py | 2 +- app/blueprints/packages/releases.py | 2 +- app/utils.py | 6 +++++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/app/blueprints/packages/packages.py b/app/blueprints/packages/packages.py index bacbbe1..716e79e 100644 --- a/app/blueprints/packages/packages.py +++ b/app/blueprints/packages/packages.py @@ -53,7 +53,7 @@ def list_all(): subqueryload(Package.tags)) ip = request.headers.get("X-Forwarded-For") or request.remote_addr - if ip is not None: + if ip is not None and not is_user_bot(): edited = False for tag in qb.tags: edited = True diff --git a/app/blueprints/packages/releases.py b/app/blueprints/packages/releases.py index 1d11477..278f9aa 100644 --- a/app/blueprints/packages/releases.py +++ b/app/blueprints/packages/releases.py @@ -130,7 +130,7 @@ def download_release(package, id): abort(404) ip = request.headers.get("X-Forwarded-For") or request.remote_addr - if ip is not None: + if ip is not None and not is_user_bot(): key = make_download_key(ip, release.package) if not has_key(key): set_key(key, "true") diff --git a/app/utils.py b/app/utils.py index 38f7ccc..ec5fa3a 100644 --- a/app/utils.py +++ b/app/utils.py @@ -20,7 +20,7 @@ from flask_user import * from flask_login import login_user, logout_user from .models import * from . import app -import random, string, os, imghdr +import random, string, os, imghdr, user_agents from urllib.parse import urljoin from werkzeug.datastructures import MultiDict @@ -64,6 +64,10 @@ def get_int_or_abort(v, default=None): except ValueError: abort(400) +def is_user_bot(): + user_agent = user_agents.parse(request.headers.get('User-Agent')) + return user_agent.is_bot + def getExtension(filename): return filename.rsplit(".", 1)[1].lower() if "." in filename else None