Skip to content
Snippets Groups Projects
library.py 1.47 KiB
Newer Older
  • Learn to ignore specific revisions
  • 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