Skip to content
Snippets Groups Projects
library.py 1.47 KiB
Newer Older
Eliot Berriot's avatar
Eliot Berriot committed
import requests
from funkwhale_api.common import session

Eliot Berriot's avatar
Eliot Berriot committed
from . import serializers, signing
def get_library_data(library_url, actor):
    auth = signing.get_auth(actor.private_key, actor.private_key_id)
    try:
        response = session.get_session().get(
            library_url, auth=auth, headers={"Accept": "application/activity+json"},
        )
    except requests.ConnectionError:
Eliot Berriot's avatar
Eliot Berriot committed
        return {"errors": ["This library is not reachable"]}
    scode = response.status_code
    if scode == 401:
Eliot Berriot's avatar
Eliot Berriot committed
        return {"errors": ["This library requires authentication"]}
Eliot Berriot's avatar
Eliot Berriot committed
        return {"errors": ["Permission denied while scanning library"]}
Eliot Berriot's avatar
Eliot Berriot committed
        return {"errors": ["Error {} while fetching the library".format(scode)]}
Eliot Berriot's avatar
Eliot Berriot committed
    serializer = serializers.LibrarySerializer(data=response.json())
    if not serializer.is_valid():
Eliot Berriot's avatar
Eliot Berriot committed
        return {"errors": ["Invalid ActivityPub response from remote library"]}
    return serializer.validated_data
def get_library_page(library, page_url, actor):
    auth = signing.get_auth(actor.private_key, actor.private_key_id)
    response = session.get_session().get(
        page_url, auth=auth, headers={"Accept": "application/activity+json"},
    )
    serializer = serializers.CollectionPageSerializer(
        data=response.json(),
Eliot Berriot's avatar
Eliot Berriot committed
        context={"library": library, "item_serializer": serializers.UploadSerializer},
Eliot Berriot's avatar
Eliot Berriot committed
    )
    serializer.is_valid(raise_exception=True)
    return serializer.validated_data