115 líneas
3,7 KiB
Python
115 líneas
3,7 KiB
Python
import os
|
|
import sys
|
|
from app.libraries.setup import Setup
|
|
from mastodon import Mastodon
|
|
from mastodon.Mastodon import MastodonNotFoundError, MastodonNetworkError, MastodonReadTimeout, MastodonAPIError, MastodonUnauthorizedError, MastodonIllegalArgumentError
|
|
import requests
|
|
import pdb
|
|
|
|
class DomainBlocks():
|
|
|
|
name = 'Domain blocks for Mastodon'
|
|
|
|
def __init__(self, mastodon_hostname=None, domain_block_api=None, session=None):
|
|
|
|
self.domain_blocks_api = '/api/v1/admin/domain_blocks'
|
|
setup = Setup()
|
|
self.mastodon_hostname = setup.mastodon_hostname
|
|
self.mastodon_app_token = { 'Authorization': 'Bearer %s'%setup.mastodon_app_token }
|
|
|
|
if session:
|
|
self.session = session
|
|
else:
|
|
self.session = requests.Session()
|
|
|
|
def domain_blocks_create(self, server, priv_comment, pub_comment):
|
|
|
|
data = {
|
|
'domain': server,
|
|
'severity': 'suspend',
|
|
'reject_media': 'true',
|
|
'reject_reports': 'true',
|
|
'private_comment': priv_comment,
|
|
'public_comment': pub_comment,
|
|
'obfuscate': 'true',
|
|
}
|
|
|
|
endpoint = f'https://{self.mastodon_hostname}/{self.domain_blocks_api}'
|
|
|
|
response = self.__api_request('POST', endpoint, data)
|
|
|
|
if response.ok:
|
|
|
|
print(f"Done, {server} is now suspended")
|
|
|
|
else:
|
|
|
|
pass
|
|
|
|
def __api_request(self, method, endpoint, data={}):
|
|
|
|
response = None
|
|
|
|
try:
|
|
|
|
kwargs = dict(data=data)
|
|
|
|
response = self.session.request(method, url = endpoint, headers = self.mastodon_app_token, **kwargs)
|
|
|
|
except Exception as e:
|
|
|
|
raise MastodonNetworkError(f"Could not complete request: {e}")
|
|
|
|
if response is None:
|
|
|
|
raise MastodonIllegalArgumentError("Illegal request.")
|
|
|
|
if not response.ok:
|
|
|
|
try:
|
|
if isinstance(response, dict) and 'error' in response:
|
|
error_msg = response['error']
|
|
elif isinstance(response, str):
|
|
error_msg = response
|
|
else:
|
|
error_msg = None
|
|
except ValueError:
|
|
error_msg = None
|
|
|
|
if response.status_code == 404:
|
|
ex_type = MastodonNotFoundError
|
|
if not error_msg:
|
|
error_msg = 'Endpoint not found.'
|
|
# this is for compatibility with older versions
|
|
# which raised MastodonAPIError('Endpoint not found.')
|
|
# on any 404
|
|
elif response.status_code == 401:
|
|
ex_type = MastodonUnauthorizedError
|
|
elif response.status_code == 422:
|
|
return response
|
|
elif response.status_code == 500:
|
|
ex_type = MastodonInternalServerError
|
|
elif response.status_code == 502:
|
|
ex_type = MastodonBadGatewayError
|
|
elif response.status_code == 503:
|
|
ex_type = MastodonServiceUnavailableError
|
|
elif response.status_code == 504:
|
|
ex_type = MastodonGatewayTimeoutError
|
|
elif response.status_code >= 500 and \
|
|
response.status_code <= 511:
|
|
ex_type = MastodonServerError
|
|
else:
|
|
ex_type = MastodonAPIError
|
|
|
|
raise ex_type(
|
|
'Mastodon API returned error',
|
|
response.status_code,
|
|
response.reason,
|
|
error_msg)
|
|
|
|
else:
|
|
|
|
return response
|
|
|
|
|