130 lines
3.2 KiB
Python
130 lines
3.2 KiB
Python
from mastodon import Mastodon as MastodonPy
|
|
from mastodon.Mastodon import api_version
|
|
|
|
|
|
class Mastodon(MastodonPy):
|
|
__DICT_VERSION_ADMIN_DOMAIN = '4.0.0'
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
MastodonPy.__init__(self, *args, **kwargs)
|
|
self._patch()
|
|
|
|
|
|
def _patch(self):
|
|
self._Mastodon__SCOPE_SETS['admin:read'].extend([
|
|
'admin:read:domain_allows',
|
|
'admin:read:domain_blocks',
|
|
'admin:read:ip_blocks',
|
|
'admin:read:email_domain_blocks',
|
|
'admin:read:cononical_email_blocks'
|
|
])
|
|
|
|
self._Mastodon__SCOPE_SETS['admin:write'].extend([
|
|
'admin:read:domain_allows',
|
|
'admin:read:domain_blocks',
|
|
'admin:read:ip_blocks',
|
|
'admin:read:email_domain_blocks',
|
|
'admin:read:cononical_email_blocks'
|
|
])
|
|
|
|
|
|
def __api_request(self, *args, **kwargs):
|
|
data = MastodonPy.__api_request(self, *args, **kwargs)
|
|
|
|
if isinstance(data, list):
|
|
return [DotDict(row) for row in data]
|
|
|
|
elif isinstance(data, dict):
|
|
return DotDict(data)
|
|
|
|
return data
|
|
|
|
|
|
@api_version('4.0.0', '4.0.0', __DICT_VERSION_ADMIN_DOMAIN)
|
|
def admin_domains(self, limit=100, max_id=None):
|
|
'heck'
|
|
params = {'limit': limit}
|
|
|
|
if max_id != None:
|
|
params['max_id'] = max_id
|
|
|
|
return self.__api_request('GET', '/api/v1/admin/domain_blocks', params, use_json=True)
|
|
|
|
|
|
@api_version('4.0.0', '4.0.0', __DICT_VERSION_ADMIN_DOMAIN)
|
|
def admin_domains_blocked(self, id):
|
|
'heck'
|
|
return self.__api_request('GET', f'/api/v1/admin/domain_blocks/{id}')
|
|
|
|
|
|
@api_version('4.0.0', '4.0.0', __DICT_VERSION_ADMIN_DOMAIN)
|
|
def admin_domains_block(self, domain, severity='silence', nomedia=False, noreports=False, private_comment=None, public_comment=None, obfuscate=False):
|
|
'heck'
|
|
params = {
|
|
'domain': domain,
|
|
'severity': severity,
|
|
'reject_media': nomedia,
|
|
'reject_reports': noreports,
|
|
'private_comment': private_comment,
|
|
'public_comment': public_comment,
|
|
'obfuscate': obfuscate
|
|
}
|
|
|
|
return self.__api_request('POST', '/api/v1/admin/domain_blocks', params, use_json=True)
|
|
|
|
|
|
@api_version('4.0.0', '4.0.0', __DICT_VERSION_ADMIN_DOMAIN)
|
|
def admin_domains_update(self, id, severity='silence', nomedia=None, noreports=None, private_comment=None, public_comment=None, obfuscate=None):
|
|
'heck'
|
|
params = {}
|
|
|
|
if severity:
|
|
params['severity'] = severity
|
|
|
|
if nomedia != None:
|
|
params['reject_media'] = nomedia
|
|
|
|
if noreports != None:
|
|
params['reject_reports'] = noreports
|
|
|
|
if obfuscate != None:
|
|
params['obfuscate'] = obfuscate
|
|
|
|
if private_comment != None:
|
|
params['private_comment'] = private_comment
|
|
|
|
if public_comment != None:
|
|
params['public_comment'] = public_comment
|
|
|
|
return self.__api_request('PUT', f'/api/v1/admin/domain_blocks/{id}', params, use_json=True)
|
|
|
|
|
|
@api_version('4.0.0', '4.0.0', __DICT_VERSION_ADMIN_DOMAIN)
|
|
def admin_domains_unblock(self, id):
|
|
'heck'
|
|
return self.__api_request('DELETE', f'/api/v1/admin/domain_blocks/{id}')
|
|
|
|
|
|
def admin_domains_all(self, limit=100):
|
|
bans = dict()
|
|
new_bans = []
|
|
offset = None
|
|
|
|
while True:
|
|
if offset == None:
|
|
new_bans = self.admin_domains(limit)
|
|
|
|
else:
|
|
new_bans = self.admin_domains(limit, offset)
|
|
|
|
for row in new_bans:
|
|
bans[row.domain] = row
|
|
|
|
offset = new_bans[-1].id
|
|
|
|
if len(new_bans) < limit:
|
|
break
|
|
|
|
logging.verbose(f'Fetched {len(bans)} domain ban(s)')
|
|
return bans
|