Export blocked domains as csv

merge-requests/30/head
Bob Mottram 2023-02-10 13:08:41 +00:00
parent 50c47b89f8
commit daea7de461
2 changed files with 87 additions and 3 deletions

View File

@ -1558,3 +1558,53 @@ def import_blocks(base_dir: str, nickname: str, domain: str,
blocking_reasons_filename)
return True
def export_blocks(base_dir: str, nickname: str, domain: str) -> str:
"""exports account level blocks in a csv format
"""
account_directory = acct_dir(base_dir, nickname, domain)
blocking_filename = \
account_directory + '/blocking.txt'
blocking_reasons_filename = \
account_directory + '/blocking_reasons.txt'
blocks_header = \
'#domain,#severity,#reject_media,#reject_reports,' + \
'#public_comment,#obfuscate\n'
if not os.path.isfile(blocking_filename):
return blocks_header
blocking_lines = []
if os.path.isfile(blocking_filename):
try:
with open(blocking_filename, 'r', encoding='utf-8') as fp_block:
blocking_lines = fp_block.read().splitlines()
except OSError:
print('EX: export_blocks failed to read ' + blocking_filename)
blocking_reasons = []
if os.path.isfile(blocking_reasons_filename):
try:
with open(blocking_reasons_filename, 'r',
encoding='utf-8') as fp_block:
blocking_reasons = fp_block.read().splitlines()
except OSError:
print('EX: export_blocks failed to read ' +
blocking_reasons_filename)
blocks_str = blocks_header
for blocked_domain in blocking_lines:
blocked_domain = blocked_domain.strip()
if blocked_domain.startwith('#'):
continue
reason_str = ''
for reason_line in blocking_reasons:
if reason_line.startswith(blocked_domain + ' '):
reason_str = reason_line.split(' ')[1]
break
blocks_str += \
blocked_domain + ',suspend,false,false,"' + \
reason_str + '",false\n'
return blocks_str

View File

@ -148,6 +148,7 @@ from media import attach_media
from media import path_is_video
from media import path_is_audio
from blocking import import_blocks
from blocking import export_blocks
from blocking import add_account_blocks
from blocking import get_cw_list_variable
from blocking import load_cw_lists
@ -6341,6 +6342,14 @@ class PubServer(BaseHTTPRequestHandler):
cookie, calling_domain)
self.server.postreq_busy = False
return
elif 'name="submitExportBlocks"' in post_bytes_str:
print('submitExportBlocks')
blocks_download_path = actor_str + '/exports/blocks.csv'
print('submitExportBlocks path=' + blocks_download_path)
self._redirect_headers(blocks_download_path,
cookie, calling_domain)
self.server.postreq_busy = False
return
# extract all of the text fields into a dict
fields = \
@ -8388,6 +8397,25 @@ class PubServer(BaseHTTPRequestHandler):
self._write(export_binary)
self._404()
def _get_exported_blocks(self, path: str, base_dir: str,
domain: str,
calling_domain: str) -> None:
"""Returns an exported blocks csv file
"""
filename = path.split('/exports/', 1)[1]
filename = base_dir + '/exports/' + filename
nickname = get_nickname_from_actor(path)
if nickname:
blocks_str = export_blocks(base_dir, nickname, domain)
if blocks_str:
msg = blocks_str.encode('utf-8')
msglen = len(msg)
self._set_headers('text/csv',
msglen, None, calling_domain, False)
self._write(msg)
return
self._404()
def _get_fonts(self, calling_domain: str, path: str,
base_dir: str, debug: bool,
getreq_start_time) -> None:
@ -17318,9 +17346,15 @@ class PubServer(BaseHTTPRequestHandler):
return
if authorized and '/exports/' in self.path:
self._get_exported_theme(self.path,
self.server.base_dir,
self.server.domain_full)
if 'blocks.csv' in self.path:
self._get_exported_blocks(self.path,
self.server.base_dir,
self.server.domain,
calling_domain)
else:
self._get_exported_theme(self.path,
self.server.base_dir,
self.server.domain_full)
return
# get fonts