When an account is suspended also suspend its media

main
Bob Mottram 2025-04-08 12:01:22 +01:00
parent 4edfa8178e
commit 7b2342ad83
3 changed files with 65 additions and 4 deletions

View File

@ -6071,6 +6071,13 @@ def daemon_http_get(self) -> None:
# check that the file exists
filename = self.server.base_dir + self.path
# check that the file is not suspended
if filename.endswith('.suspended'):
http_404(self, 145)
self.server.getreq_busy = False
return
if os.path.isfile(filename):
content = None
try:

View File

@ -214,7 +214,7 @@ def moderator_actions(self, path: str, calling_domain: str, cookie: str,
if moderation_button == 'suspend':
suspend_account(base_dir, nickname, domain)
if moderation_button == 'unsuspend':
reenable_account(base_dir, nickname)
reenable_account(base_dir, nickname, domain)
if moderation_button == 'filter':
add_global_filter(base_dir, moderation_text)
if moderation_button == 'unfilter':

View File

@ -1270,7 +1270,32 @@ def set_bio(base_dir: str, nickname: str, domain: str, bio: str) -> bool:
return True
def reenable_account(base_dir: str, nickname: str) -> None:
def _unsuspend_media_for_account(base_dir: str, account_dir: str) -> None:
"""Unsuspends all media for an account
"""
account_media_log_filename = account_dir + '/media_log.txt'
if not os.path.isfile(account_media_log_filename):
return
media_log = []
try:
with open(account_media_log_filename, 'r',
encoding='utf-8') as fp_log:
media_log = fp_log.read().split('\n')
except OSError:
print('EX: suspend unable to read media log for ' + account_dir)
for filename in media_log:
media_filename = base_dir + filename
if not os.path.isfile(media_filename + '.suspended'):
continue
try:
os.rename(media_filename + '.suspended', media_filename)
except OSError:
print('EX: unable to unsuspend media ' + media_filename)
def reenable_account(base_dir: str, nickname: str, domain: str) -> None:
"""Removes an account suspension
"""
suspended_filename = data_dir(base_dir) + '/suspended.txt'
@ -1289,6 +1314,33 @@ def reenable_account(base_dir: str, nickname: str) -> None:
except OSError as ex:
print('EX: reenable_account unable to save ' +
suspended_filename + ' ' + str(ex))
account_dir = acct_dir(base_dir, nickname, domain)
_unsuspend_media_for_account(base_dir, account_dir)
def _suspend_media_for_account(base_dir: str, account_dir: str) -> None:
"""Suspends all media for an account
"""
account_media_log_filename = account_dir + '/media_log.txt'
if not os.path.isfile(account_media_log_filename):
return
media_log = []
try:
with open(account_media_log_filename, 'r',
encoding='utf-8') as fp_log:
media_log = fp_log.read().split('\n')
except OSError:
print('EX: suspend unable to read media log for ' + account_dir)
for filename in media_log:
media_filename = base_dir + filename
if not os.path.isfile(media_filename):
continue
try:
os.rename(media_filename, media_filename + '.suspended')
except OSError:
print('EX: unable to suspend media ' + media_filename)
def suspend_account(base_dir: str, nickname: str, domain: str) -> None:
@ -1313,7 +1365,8 @@ def suspend_account(base_dir: str, nickname: str, domain: str) -> None:
if moderator.strip('\n').strip('\r') == nickname:
return
salt_filename = acct_dir(base_dir, nickname, domain) + '/.salt'
account_dir = acct_dir(base_dir, nickname, domain)
salt_filename = account_dir + '/.salt'
if os.path.isfile(salt_filename):
try:
os.remove(salt_filename)
@ -1347,6 +1400,7 @@ def suspend_account(base_dir: str, nickname: str, domain: str) -> None:
fp_sus.write(nickname + '\n')
except OSError:
print('EX: suspend_account unable to write ' + suspended_filename)
_suspend_media_for_account(base_dir, account_dir)
def can_remove_post(base_dir: str,
@ -1445,7 +1499,7 @@ def remove_account(base_dir: str, nickname: str,
if moderator.strip('\n') == nickname:
return False
reenable_account(base_dir, nickname)
reenable_account(base_dir, nickname, domain)
handle = nickname + '@' + domain
remove_password(base_dir, nickname)
_remove_tags_for_nickname(base_dir, nickname, domain, port)