diff --git a/api/config/settings/common.py b/api/config/settings/common.py index e45f6c256..7b7f6e64c 100644 --- a/api/config/settings/common.py +++ b/api/config/settings/common.py @@ -149,16 +149,6 @@ FIXTURE_DIRS = ( # ------------------------------------------------------------------------------ EMAIL_BACKEND = env('DJANGO_EMAIL_BACKEND', default='django.core.mail.backends.smtp.EmailBackend') -# MANAGER CONFIGURATION -# ------------------------------------------------------------------------------ -# See: https://docs.djangoproject.com/en/dev/ref/settings/#admins -ADMINS = ( - ("""Eliot Berriot""", 'contact@eliotberriot.om'), -) - -# See: https://docs.djangoproject.com/en/dev/ref/settings/#managers -MANAGERS = ADMINS - # DATABASE CONFIGURATION # ------------------------------------------------------------------------------ # See: https://docs.djangoproject.com/en/dev/ref/settings/#databases diff --git a/api/funkwhale_api/common/session.py b/api/funkwhale_api/common/session.py new file mode 100644 index 000000000..7f5584bd1 --- /dev/null +++ b/api/funkwhale_api/common/session.py @@ -0,0 +1,18 @@ +import requests + +from django.conf import settings + +import funkwhale_api + + +def get_user_agent(): + return 'python-requests (funkwhale/{}; +{})'.format( + funkwhale_api.__version__, + settings.FUNKWHALE_URL + ) + + +def get_session(): + s = requests.Session() + s.headers['User-Agent'] = get_user_agent() + return s diff --git a/api/funkwhale_api/downloader/downloader.py b/api/funkwhale_api/downloader/downloader.py index b35ed6f7d..7fc237b08 100644 --- a/api/funkwhale_api/downloader/downloader.py +++ b/api/funkwhale_api/downloader/downloader.py @@ -1,5 +1,4 @@ import os -import requests import json from urllib.parse import quote_plus import youtube_dl diff --git a/api/funkwhale_api/federation/activity.py b/api/funkwhale_api/federation/activity.py index 7502bd739..7d20d7f9c 100644 --- a/api/funkwhale_api/federation/activity.py +++ b/api/funkwhale_api/federation/activity.py @@ -1,9 +1,10 @@ import logging import json -import requests import requests_http_signature import uuid +from funkwhale_api.common import session + from . import models from . import signing @@ -68,7 +69,7 @@ def deliver(activity, on_behalf_of, to=[]): recipient_actor = actors.get_actor(url) logger.debug('delivering to %s', recipient_actor.inbox_url) logger.debug('activity content: %s', json.dumps(activity)) - response = requests.post( + response = session.get_session().post( auth=auth, json=activity, url=recipient_actor.inbox_url, diff --git a/api/funkwhale_api/federation/actors.py b/api/funkwhale_api/federation/actors.py index 54d78d9ff..a461eb76a 100644 --- a/api/funkwhale_api/federation/actors.py +++ b/api/funkwhale_api/federation/actors.py @@ -1,5 +1,4 @@ import logging -import requests import uuid import xml @@ -12,6 +11,8 @@ from rest_framework.exceptions import PermissionDenied from dynamic_preferences.registries import global_preferences_registry +from funkwhale_api.common import session + from . import activity from . import keys from . import models @@ -28,7 +29,7 @@ def remove_tags(text): def get_actor_data(actor_url): - response = requests.get( + response = session.get_session().get( actor_url, headers={ 'Accept': 'application/activity+json', diff --git a/api/funkwhale_api/federation/keys.py b/api/funkwhale_api/federation/keys.py index 08d4034ea..7e9d316c2 100644 --- a/api/funkwhale_api/federation/keys.py +++ b/api/funkwhale_api/federation/keys.py @@ -3,7 +3,6 @@ from cryptography.hazmat.primitives.asymmetric import rsa from cryptography.hazmat.backends import default_backend as crypto_default_backend import re -import requests import urllib.parse from . import exceptions diff --git a/api/funkwhale_api/music/views.py b/api/funkwhale_api/music/views.py index 5f8fc1736..0870d9816 100644 --- a/api/funkwhale_api/music/views.py +++ b/api/funkwhale_api/music/views.py @@ -1,7 +1,6 @@ import ffmpeg import os import json -import requests import subprocess import unicodedata import urllib @@ -23,6 +22,7 @@ from rest_framework import permissions from musicbrainzngs import ResponseError from funkwhale_api.common import utils as funkwhale_utils +from funkwhale_api.common import session from funkwhale_api.federation import actors from funkwhale_api.requests.models import ImportRequest from funkwhale_api.musicbrainz import api @@ -214,7 +214,7 @@ class TrackFileViewSet(viewsets.ReadOnlyModelViewSet): file_extension = utils.get_ext_from_type(mt) filename = '{}.{}'.format(f.track.full_name, file_extension) auth = actors.SYSTEM_ACTORS['library'].get_request_auth() - remote_response = requests.get( + remote_response = session.get_session().get( library_track.audio_url, auth=auth, stream=True, diff --git a/api/funkwhale_api/musicbrainz/client.py b/api/funkwhale_api/musicbrainz/client.py index 049ed298c..8e7076a78 100644 --- a/api/funkwhale_api/musicbrainz/client.py +++ b/api/funkwhale_api/musicbrainz/client.py @@ -5,7 +5,7 @@ from django.conf import settings from funkwhale_api import __version__ _api = musicbrainzngs -_api.set_useragent('funkwhale', str(__version__), 'contact@eliotberriot.com') +_api.set_useragent('funkwhale', str(__version__), settings.FUNKWHALE_URL) store = memoize.djangocache.Cache('default') diff --git a/api/tests/common/test_session.py b/api/tests/common/test_session.py new file mode 100644 index 000000000..7ff1e660b --- /dev/null +++ b/api/tests/common/test_session.py @@ -0,0 +1,18 @@ +import funkwhale_api + +from funkwhale_api.common import session + + +def test_get_user_agent(settings): + settings.FUNKWHALE_URL = 'https://test.com' + 'http.rb/3.0.0 (Mastodon/2.2.0; +https://mastodon.eliotberriot.com/)' + expected = 'python-requests (funkwhale/{}; +{})'.format( + funkwhale_api.__version__, + settings.FUNKWHALE_URL + ) + assert session.get_user_agent() == expected + + +def test_get_session(): + expected = session.get_user_agent() + assert session.get_session().headers['User-Agent'] == expected diff --git a/changes/changelog.d/user-agent.enhancement b/changes/changelog.d/user-agent.enhancement new file mode 100644 index 000000000..605e1f6a7 --- /dev/null +++ b/changes/changelog.d/user-agent.enhancement @@ -0,0 +1,2 @@ +We now use a proper user agent including instance version and url during +outgoing requests