Source code for oauth_dropins.pixelfed

"""Pixelfed OAuth drop-in.

Pixelfed's API is a clone of Mastodon's v1 API:
https://docs.pixelfed.org/technical-documentation/api-v1.html
"""
from .webutil.util import json_loads

from . import mastodon


[docs] class PixelfedApp(mastodon.MastodonApp): """A Pixelfed API OAuth2 app registered with a specific instance.""" pass
[docs] class PixelfedAuth(mastodon.MastodonAuth): """An authenticated Pixelfed user.""" def site_name(self): return 'Pixelfed'
[docs] def actor_id(self): """Returns the user's ActivityPub actor id URL. Example: ``https://pixelfed.social/users/ryan`` """ url = json_loads(self.user_json).get('id') instance = self.instance().strip('/') username = url.removeprefix(instance).strip('/') assert '/' not in username return f'{instance}/users/{username}'
[docs] class Start(mastodon.Start): """Starts Pixelfed auth. Requests an auth code and expects a redirect back.""" NAME = 'pixelfed' LABEL = 'Pixelfed' DEFAULT_SCOPE = 'read' APP_CLASS = PixelfedApp @classmethod def _version_ok(cls, version): return 'Pixelfed' in version
[docs] class Callback(mastodon.Callback): """The OAuth callback. Fetches an access token and stores it.""" AUTH_CLASS = PixelfedAuth