See #574: Implemented getAvatar view
This commit is contained in:
parent
6c7ee54dbc
commit
d3e411fa97
|
@ -15,6 +15,7 @@ from funkwhale_api.music import models as music_models
|
||||||
from funkwhale_api.music import utils
|
from funkwhale_api.music import utils
|
||||||
from funkwhale_api.music import views as music_views
|
from funkwhale_api.music import views as music_views
|
||||||
from funkwhale_api.playlists import models as playlists_models
|
from funkwhale_api.playlists import models as playlists_models
|
||||||
|
from funkwhale_api.users import models as users_models
|
||||||
|
|
||||||
from . import authentication, filters, negotiation, serializers
|
from . import authentication, filters, negotiation, serializers
|
||||||
|
|
||||||
|
@ -426,6 +427,23 @@ class SubsonicViewSet(viewsets.GenericViewSet):
|
||||||
data = {"playlist": serializers.get_playlist_detail_data(playlist)}
|
data = {"playlist": serializers.get_playlist_detail_data(playlist)}
|
||||||
return response.Response(data)
|
return response.Response(data)
|
||||||
|
|
||||||
|
@list_route(methods=["get", "post"], url_name="get_avatar", url_path="getAvatar")
|
||||||
|
@find_object(
|
||||||
|
queryset=users_models.User.objects.exclude(avatar=None).exclude(avatar=""),
|
||||||
|
model_field="username__iexact",
|
||||||
|
field="username",
|
||||||
|
cast=str,
|
||||||
|
)
|
||||||
|
def get_avatar(self, request, *args, **kwargs):
|
||||||
|
user = kwargs.pop("obj")
|
||||||
|
mapping = {"nginx": "X-Accel-Redirect", "apache2": "X-Sendfile"}
|
||||||
|
path = music_views.get_file_path(user.avatar)
|
||||||
|
file_header = mapping[settings.REVERSE_PROXY_TYPE]
|
||||||
|
# let the proxy set the content-type
|
||||||
|
r = response.Response({}, content_type="")
|
||||||
|
r[file_header] = path
|
||||||
|
return r
|
||||||
|
|
||||||
@list_route(
|
@list_route(
|
||||||
methods=["get", "post"],
|
methods=["get", "post"],
|
||||||
url_name="get_music_folders",
|
url_name="get_music_folders",
|
||||||
|
|
|
@ -457,6 +457,19 @@ def test_get_cover_art_album(factories, logged_in_api_client):
|
||||||
).decode("utf-8")
|
).decode("utf-8")
|
||||||
|
|
||||||
|
|
||||||
|
def test_get_avatar(factories, logged_in_api_client):
|
||||||
|
user = factories["users.User"]()
|
||||||
|
url = reverse("api:subsonic-get-avatar")
|
||||||
|
assert url.endswith("getAvatar") is True
|
||||||
|
response = logged_in_api_client.get(url, {"username": user.username})
|
||||||
|
|
||||||
|
assert response.status_code == 200
|
||||||
|
assert response["Content-Type"] == ""
|
||||||
|
assert response["X-Accel-Redirect"] == music_views.get_file_path(
|
||||||
|
user.avatar
|
||||||
|
).decode("utf-8")
|
||||||
|
|
||||||
|
|
||||||
def test_scrobble(factories, logged_in_api_client):
|
def test_scrobble(factories, logged_in_api_client):
|
||||||
upload = factories["music.Upload"]()
|
upload = factories["music.Upload"]()
|
||||||
track = upload.track
|
track = upload.track
|
||||||
|
|
Loading…
Reference in New Issue