Skip to content
Snippets Groups Projects
webfinger.py 988 B
Newer Older
  • Learn to ignore specific revisions
  • from rest_framework import serializers
    
    
    async def lookup(name, session):
        username, domain = name.split("@")
        response = await session.get(
            "https://{}/.well-known/webfinger".format(domain),
            params={"resource": "acct:{}".format(name)},
        )
        response.raise_for_status()
        return await response.json()
    
    
    class AccountLinkSerializer(serializers.Serializer):
        rel = serializers.CharField()
        href = serializers.URLField()
        type = serializers.CharField()
    
    
    class WebfingerSerializer(serializers.Serializer):
        links = serializers.ListField(child=AccountLinkSerializer(), min_length=1)
    
    
    def get_links(payload):
        serializer = WebfingerSerializer(data=payload)
        serializer.is_valid(raise_exception=True)
        links = {}
        for link in serializer.validated_data["links"]:
            if link["rel"] != "self":
                continue
    
            if link["type"] == "application/activity+json":
                links["activitypub"] = link["href"]
    
        return links