diff --git a/blocking.py b/blocking.py
index e42b3bfac..111459d8d 100644
--- a/blocking.py
+++ b/blocking.py
@@ -1462,17 +1462,10 @@ def get_cw_list_variable(list_name: str) -> str:
return 'list' + list_name.replace(' ', '').replace("'", '')
-def import_blocks(base_dir: str, nickname: str, domain: str,
- filename: str) -> bool:
+def import_blocking_file(base_dir: str, nickname: str, domain: str,
+ lines: []) -> bool:
"""Imports blocked domains for a given account
"""
- lines = []
- try:
- with open(filename, 'r', encoding='utf-8') as fp_blocks:
- lines = fp_blocks.read().splitlines()
- except OSError:
- print('EX: unable to import blocked instances from file ' +
- filename)
if not lines:
return False
if len(lines) < 2:
@@ -1571,7 +1564,7 @@ def import_blocks(base_dir: str, nickname: str, domain: str,
return True
-def export_blocks(base_dir: str, nickname: str, domain: str) -> str:
+def export_blocking_file(base_dir: str, nickname: str, domain: str) -> str:
"""exports account level blocks in a csv format
"""
account_directory = acct_dir(base_dir, nickname, domain)
diff --git a/content.py b/content.py
index e58d26ce8..e36c6c14a 100644
--- a/content.py
+++ b/content.py
@@ -1705,7 +1705,8 @@ def extract_text_fields_in_post(post_bytes, boundary: str, debug: bool,
fields_with_semicolon_allowed = (
'message', 'bio', 'autoCW', 'password', 'passwordconfirm',
'instanceDescription', 'instanceDescriptionShort',
- 'subject', 'location', 'imageDescription'
+ 'subject', 'location', 'imageDescription', 'importBlocks',
+ 'importFollows', 'importTheme'
)
if debug:
if 'password' not in message_fields:
diff --git a/daemon.py b/daemon.py
index 6c292eba9..d7bb96805 100644
--- a/daemon.py
+++ b/daemon.py
@@ -147,8 +147,8 @@ from media import replace_twitter
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 import_blocking_file
+from blocking import export_blocking_file
from blocking import add_account_blocks
from blocking import get_cw_list_variable
from blocking import load_cw_lists
@@ -6177,7 +6177,6 @@ class PubServer(BaseHTTPRequestHandler):
'instanceLogo',
'left_col_image', 'right_col_image',
'import_follows',
- 'import_blocks',
'import_theme'
)
profile_media_types_uploaded = {}
@@ -6226,10 +6225,6 @@ class PubServer(BaseHTTPRequestHandler):
filename_base = \
acct_dir(base_dir, nickname, domain) + \
'/import_following.csv'
- elif m_type == 'import_blocks':
- filename_base = \
- acct_dir(base_dir, nickname, domain) + \
- '/import_blocks.csv'
else:
filename_base = \
acct_dir(base_dir, nickname, domain) + \
@@ -6254,25 +6249,6 @@ class PubServer(BaseHTTPRequestHandler):
nickname)
continue
- if m_type == 'import_blocks':
- if os.path.isfile(filename_base):
- blocks_import_succeeded = False
- if import_blocks(base_dir, nickname, domain,
- filename):
- print(nickname + ' imported blocks csv')
- blocks_import_succeeded = True
- try:
- os.remove(filename_base)
- except OSError:
- print('EX: ' +
- 'unable to remove imported blocks file ' +
- filename_base)
- if blocks_import_succeeded:
- continue
- print('WARN: failed to import blocks from csv for ' +
- nickname)
- continue
-
if m_type == 'import_theme':
if nickname == admin_nickname or \
is_artist(base_dir, nickname):
@@ -6446,6 +6422,16 @@ class PubServer(BaseHTTPRequestHandler):
actor_skills_ctr:
actor_changed = True
+ if fields.get('importBlocks'):
+ blocks_str = fields['importBlocks']
+ while blocks_str.startswith('\n'):
+ blocks_str = blocks_str[1:]
+ blocks_lines = blocks_str.split('\n')
+ if import_blocking_file(base_dir, nickname, domain,
+ blocks_lines):
+ print('blocks imported for ' + nickname)
+ else:
+ print('blocks not imported for ' + nickname)
# change password
if fields.get('password') and \
fields.get('passwordconfirm'):
@@ -8409,7 +8395,7 @@ class PubServer(BaseHTTPRequestHandler):
filename = base_dir + '/exports/' + filename
nickname = get_nickname_from_actor(path)
if nickname:
- blocks_str = export_blocks(base_dir, nickname, domain)
+ blocks_str = export_blocking_file(base_dir, nickname, domain)
if blocks_str:
msg = blocks_str.encode('utf-8')
msglen = len(msg)
diff --git a/tests.py b/tests.py
index 2d1446edd..53da447af 100644
--- a/tests.py
+++ b/tests.py
@@ -5995,7 +5995,17 @@ def _test_extract_text_fields_from_post():
'116202748023898664511855843036\r\nContent-Disposition: ' + \
'form-data; name="attachpic"; filename=""\r\nContent-Type: ' + \
'application/octet-stream\r\n\r\n\r\n----------------------' + \
- '-------116202748023898664511855843036--\r\n'
+ '-------116202748023898664511855843036--\r\n' + \
+ 'Content-Disposition: form-data; name="importBlocks"; ' + \
+ 'filename="wildebeest_suspend.csv"\r\nContent-Type: ' + \
+ 'text/csv\r\n\r\n#domain,#severity,#reject_media,#reject_reports,' + \
+ '#public_comment,#obfuscate\nbgp.social,suspend,false,false,' + \
+ '"Wildebeest",false\ncesko.social,suspend,false,false,' + \
+ '"Wildebeest",false\ncloudflare.social,suspend,false,false,' + \
+ '"Wildebeest",false\ndogfood.social,suspend,false,false,' + \
+ '"Wildebeest",false\ndomo.cafe,suspend,false,false,"Wildebeest",' + \
+ 'false\nemaw.social,suspend,false,false\n\r\n ' + \
+ '-----------------------------116202748023898664511855843036--\r\n'
debug = False
fields = extract_text_fields_in_post(None, boundary, debug, form_data)
assert fields['submitPost'] == 'Submit'
@@ -6006,6 +6016,9 @@ def _test_extract_text_fields_from_post():
assert fields['location'] == ''
assert fields['imageDescription'] == ''
assert fields['message'] == 'This is a ; test'
+ if not fields['importBlocks'][1:].startswith('#domain,#severity,'):
+ print(fields['importBlocks'])
+ assert fields['importBlocks'][1:].startswith('#domain,#severity,')
def _test_speaker_replace_link():
diff --git a/webapp_profile.py b/webapp_profile.py
index e4dc1114d..a54d5db5c 100644
--- a/webapp_profile.py
+++ b/webapp_profile.py
@@ -2048,8 +2048,8 @@ def _html_edit_profile_filtering(base_dir: str, nickname: str, domain: str,
edit_profile_form += \
' \n'
- edit_profile_form += ' \n'
edit_profile_form += \
'