From fb10cb35ad13da4272f1f75a5f8b05a9fc174761 Mon Sep 17 00:00:00 2001 From: "Renato \"Lond\" Cerqueira" Date: Wed, 30 Dec 2020 12:35:11 +0100 Subject: [PATCH] Add BookWyrm user-agent to http requests This allows other software to identify BookWyrm in calls, as well as will allow BookWyrm to differentiate between calls done from other fediverse software and BookWyrm to answer with specific BookWyrm data. --- bookwyrm/broadcast.py | 3 ++- bookwyrm/connectors/abstract_connector.py | 11 +++++++++-- bookwyrm/settings.py | 6 ++++++ 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/bookwyrm/broadcast.py b/bookwyrm/broadcast.py index a98b6774..f4186c4d 100644 --- a/bookwyrm/broadcast.py +++ b/bookwyrm/broadcast.py @@ -3,7 +3,7 @@ import json from django.utils.http import http_date import requests -from bookwyrm import models +from bookwyrm import models, settings from bookwyrm.activitypub import ActivityEncoder from bookwyrm.tasks import app from bookwyrm.signatures import make_signature, make_digest @@ -79,6 +79,7 @@ def sign_and_send(sender, data, destination): 'Digest': digest, 'Signature': make_signature(sender, destination, now, digest), 'Content-Type': 'application/activity+json; charset=utf-8', + 'User-Agent': settings.USER_AGENT, }, ) if not response.ok: diff --git a/bookwyrm/connectors/abstract_connector.py b/bookwyrm/connectors/abstract_connector.py index ce1184d8..706f5bb9 100644 --- a/bookwyrm/connectors/abstract_connector.py +++ b/bookwyrm/connectors/abstract_connector.py @@ -8,7 +8,7 @@ import requests from requests import HTTPError from requests.exceptions import SSLError -from bookwyrm import activitypub, models +from bookwyrm import activitypub, models, settings class ConnectorException(HTTPError): @@ -42,6 +42,7 @@ class AbstractMinimalConnector(ABC): '%s%s' % (self.search_url, query), headers={ 'Accept': 'application/json; charset=utf-8', + 'User-Agent': settings.USER_AGENT, }, ) if not resp.ok: @@ -196,6 +197,7 @@ def get_data(url): url, headers={ 'Accept': 'application/json; charset=utf-8', + 'User-Agent': settings.USER_AGENT, }, ) except RequestError: @@ -213,7 +215,12 @@ def get_data(url): def get_image(url): ''' wrapper for requesting an image ''' try: - resp = requests.get(url) + resp = requests.get( + url, + headers={ + 'User-Agent': settings.USER_AGENT, + }, + ) except (RequestError, SSLError): return None if not resp.ok: diff --git a/bookwyrm/settings.py b/bookwyrm/settings.py index c42215b4..f598cd3c 100644 --- a/bookwyrm/settings.py +++ b/bookwyrm/settings.py @@ -3,6 +3,8 @@ import os from environs import Env +import requests + env = Env() DOMAIN = env('DOMAIN') @@ -150,3 +152,7 @@ STATIC_URL = '/static/' STATIC_ROOT = os.path.join(BASE_DIR, env('STATIC_ROOT', 'static')) MEDIA_URL = '/images/' MEDIA_ROOT = os.path.join(BASE_DIR, env('MEDIA_ROOT', 'images')) + +USER_AGENT = "%s (BookWyrm/%s; +https://%s/)" % (requests.utils.default_user_agent(), + "0.1", # TODO: change 0.1 into actual version + DOMAIN)