51 lines
1.4 KiB
Python
51 lines
1.4 KiB
Python
|
from pathlib import Path
|
||
|
|
||
|
from mastodon import Mastodon
|
||
|
|
||
|
from . import Feed
|
||
|
from ..utils import CONFIG_PATH, PROGRAM_NAME, prompt
|
||
|
|
||
|
|
||
|
class MastodonFeed(Feed):
|
||
|
CLIENTCRED_PATH: Path = CONFIG_PATH.joinpath("mastodon_clientcred.secret")
|
||
|
USERCRED_PATH: Path = CONFIG_PATH.joinpath("mastodon_usercred.secret")
|
||
|
|
||
|
# https://github.com/halcy/Mastodon.py
|
||
|
def __init__(self, username: str, password: str, api_base_url: str):
|
||
|
if not self.CLIENTCRED_PATH.exists():
|
||
|
self._create_app(api_base_url)
|
||
|
self.mastodon = Mastodon(client_id=self.CLIENTCRED_PATH)
|
||
|
|
||
|
self.mastodon.log_in(
|
||
|
username=username,
|
||
|
password=password,
|
||
|
)
|
||
|
|
||
|
super().__init__()
|
||
|
|
||
|
|
||
|
def _create_app(self, api_base_url: str):
|
||
|
client_id, client_secret = Mastodon.create_app(
|
||
|
PROGRAM_NAME,
|
||
|
api_base_url=api_base_url,
|
||
|
to_file=self.CLIENTCRED_PATH
|
||
|
)
|
||
|
|
||
|
self._save_clientcred(client_id, client_secret)
|
||
|
|
||
|
|
||
|
def prompt_auth(self) -> dict:
|
||
|
"""
|
||
|
mastodon needs:
|
||
|
- the instance used
|
||
|
- the email of the user
|
||
|
- the password of the user
|
||
|
"""
|
||
|
|
||
|
return {
|
||
|
"api_base_url": prompt.for_string("The instance you use", "https://mastodon.social"),
|
||
|
"username": prompt.for_string("E-Mail"),
|
||
|
"password": prompt.for_password("Password"),
|
||
|
}
|
||
|
|