mirror of https://gitlab.com/bashrc2/epicyon
Remove rejected posts from inbox index
parent
b9b3ad6c0f
commit
ca995cd50d
45
posts.py
45
posts.py
|
@ -41,6 +41,7 @@ from flags import contains_private_key
|
|||
from flags import has_group_type
|
||||
from flags import is_premium_account
|
||||
from flags import url_permitted
|
||||
from utils import remove_post_from_index
|
||||
from utils import replace_strings
|
||||
from utils import valid_content_warning
|
||||
from utils import get_actor_from_post_id
|
||||
|
@ -4884,6 +4885,7 @@ def _create_box_items(base_dir: str,
|
|||
print('REJECT: rejected post in timeline ' +
|
||||
boxname + ' ' + post_url + ' ' +
|
||||
full_post_filename)
|
||||
remove_post_from_index(post_url, False, index_filename)
|
||||
continue
|
||||
|
||||
if _add_post_to_timeline(full_post_filename, boxname,
|
||||
|
@ -6150,11 +6152,12 @@ def populate_replies_json(base_dir: str, nickname: str, domain: str,
|
|||
|
||||
def _reject_announce(announce_filename: str,
|
||||
base_dir: str, nickname: str, domain: str,
|
||||
announce_post_id: str, recent_posts_cache: {}):
|
||||
announce_post_id: str, recent_posts_cache: {},
|
||||
debug: bool):
|
||||
"""Marks an announce as rejected
|
||||
"""
|
||||
reject_post_id(base_dir, nickname, domain, announce_post_id,
|
||||
recent_posts_cache)
|
||||
recent_posts_cache, debug)
|
||||
|
||||
# reject the post referenced by the announce activity object
|
||||
if not os.path.isfile(announce_filename + '.reject'):
|
||||
|
@ -6282,7 +6285,7 @@ def download_announce(session, base_dir: str, http_prefix: str,
|
|||
str(announced_json))
|
||||
_reject_announce(announce_filename,
|
||||
base_dir, nickname, domain, post_id,
|
||||
recent_posts_cache)
|
||||
recent_posts_cache, debug)
|
||||
return None
|
||||
if announced_json.get('error'):
|
||||
print('WARN: ' +
|
||||
|
@ -6295,7 +6298,7 @@ def download_announce(session, base_dir: str, http_prefix: str,
|
|||
str(announced_json))
|
||||
_reject_announce(announce_filename,
|
||||
base_dir, nickname, domain, post_id,
|
||||
recent_posts_cache)
|
||||
recent_posts_cache, debug)
|
||||
return None
|
||||
|
||||
announced_actor = announced_json['id']
|
||||
|
@ -6307,7 +6310,7 @@ def download_announce(session, base_dir: str, http_prefix: str,
|
|||
str(announced_json))
|
||||
_reject_announce(announce_filename,
|
||||
base_dir, nickname, domain, post_id,
|
||||
recent_posts_cache)
|
||||
recent_posts_cache, debug)
|
||||
return None
|
||||
if announced_json['type'] == 'Video':
|
||||
converted_json = \
|
||||
|
@ -6323,14 +6326,14 @@ def download_announce(session, base_dir: str, http_prefix: str,
|
|||
'or /objects/ or /p/ ' + str(announced_json))
|
||||
_reject_announce(announce_filename,
|
||||
base_dir, nickname, domain, post_id,
|
||||
recent_posts_cache)
|
||||
recent_posts_cache, debug)
|
||||
return None
|
||||
if not has_users_path(announced_actor):
|
||||
print('WARN: announced post id does not contain /users/ ' +
|
||||
str(announced_json))
|
||||
_reject_announce(announce_filename,
|
||||
base_dir, nickname, domain, post_id,
|
||||
recent_posts_cache)
|
||||
recent_posts_cache, debug)
|
||||
return None
|
||||
if announced_json['type'] not in ('Note', 'Event', 'Page',
|
||||
'Question', 'Article'):
|
||||
|
@ -6339,7 +6342,7 @@ def download_announce(session, base_dir: str, http_prefix: str,
|
|||
# You can only announce Note, Page, Article or Question types
|
||||
_reject_announce(announce_filename,
|
||||
base_dir, nickname, domain, post_id,
|
||||
recent_posts_cache)
|
||||
recent_posts_cache, debug)
|
||||
return None
|
||||
if announced_json['type'] == 'Question':
|
||||
if not announced_json.get('endTime') or \
|
||||
|
@ -6350,14 +6353,14 @@ def download_announce(session, base_dir: str, http_prefix: str,
|
|||
str(announced_json))
|
||||
_reject_announce(announce_filename,
|
||||
base_dir, nickname, domain, post_id,
|
||||
recent_posts_cache)
|
||||
recent_posts_cache, debug)
|
||||
return None
|
||||
if not isinstance(announced_json['oneOf'], list):
|
||||
print('WARN: announced Question oneOf should be a list ' +
|
||||
str(announced_json))
|
||||
_reject_announce(announce_filename,
|
||||
base_dir, nickname, domain, post_id,
|
||||
recent_posts_cache)
|
||||
recent_posts_cache, debug)
|
||||
return None
|
||||
if is_question_filtered(base_dir, nickname, domain,
|
||||
system_language, announced_json):
|
||||
|
@ -6366,21 +6369,21 @@ def download_announce(session, base_dir: str, http_prefix: str,
|
|||
str(announced_json['id']))
|
||||
_reject_announce(announce_filename,
|
||||
base_dir, nickname, domain, post_id,
|
||||
recent_posts_cache)
|
||||
recent_posts_cache, debug)
|
||||
return None
|
||||
if 'content' not in announced_json:
|
||||
print('WARN: announced post does not have content ' +
|
||||
str(announced_json))
|
||||
_reject_announce(announce_filename,
|
||||
base_dir, nickname, domain, post_id,
|
||||
recent_posts_cache)
|
||||
recent_posts_cache, debug)
|
||||
return None
|
||||
if not announced_json.get('published'):
|
||||
print('WARN: announced post does not have published ' +
|
||||
str(announced_json))
|
||||
_reject_announce(announce_filename,
|
||||
base_dir, nickname, domain, post_id,
|
||||
recent_posts_cache)
|
||||
recent_posts_cache, debug)
|
||||
return None
|
||||
if '.' in announced_json['published'] and \
|
||||
'Z' in announced_json['published']:
|
||||
|
@ -6391,7 +6394,7 @@ def download_announce(session, base_dir: str, http_prefix: str,
|
|||
str(announced_json['published']))
|
||||
_reject_announce(announce_filename,
|
||||
base_dir, nickname, domain, post_id,
|
||||
recent_posts_cache)
|
||||
recent_posts_cache, debug)
|
||||
return None
|
||||
if not understood_post_language(base_dir, nickname,
|
||||
announced_json, system_language,
|
||||
|
@ -6411,7 +6414,7 @@ def download_announce(session, base_dir: str, http_prefix: str,
|
|||
str(announced_json))
|
||||
_reject_announce(announce_filename,
|
||||
base_dir, nickname, domain, post_id,
|
||||
recent_posts_cache)
|
||||
recent_posts_cache, debug)
|
||||
return None
|
||||
summary_str = \
|
||||
get_summary_from_post(announced_json, system_language, [])
|
||||
|
@ -6428,7 +6431,7 @@ def download_announce(session, base_dir: str, http_prefix: str,
|
|||
str(announced_json['id']))
|
||||
_reject_announce(announce_filename,
|
||||
base_dir, nickname, domain, post_id,
|
||||
recent_posts_cache)
|
||||
recent_posts_cache, debug)
|
||||
return None
|
||||
if reject_twitter_summary(base_dir, nickname, domain,
|
||||
summary_str):
|
||||
|
@ -6436,21 +6439,21 @@ def download_announce(session, base_dir: str, http_prefix: str,
|
|||
str(announced_json))
|
||||
_reject_announce(announce_filename,
|
||||
base_dir, nickname, domain, post_id,
|
||||
recent_posts_cache)
|
||||
recent_posts_cache, debug)
|
||||
return None
|
||||
if contains_private_key(content_str):
|
||||
print("WARN: announced post contains someone's private key " +
|
||||
str(announced_json))
|
||||
_reject_announce(announce_filename,
|
||||
base_dir, nickname, domain, post_id,
|
||||
recent_posts_cache)
|
||||
recent_posts_cache, debug)
|
||||
return None
|
||||
if invalid_ciphertext(content_str):
|
||||
print('WARN: announced post contains invalid ciphertext ' +
|
||||
str(announced_json))
|
||||
_reject_announce(announce_filename,
|
||||
base_dir, nickname, domain, post_id,
|
||||
recent_posts_cache)
|
||||
recent_posts_cache, debug)
|
||||
return None
|
||||
|
||||
# remove any long words
|
||||
|
@ -6478,7 +6481,7 @@ def download_announce(session, base_dir: str, http_prefix: str,
|
|||
# Create wrap failed
|
||||
_reject_announce(announce_filename,
|
||||
base_dir, nickname, domain, post_id,
|
||||
recent_posts_cache)
|
||||
recent_posts_cache, debug)
|
||||
return None
|
||||
|
||||
# if poll/vote/question is not to be shown
|
||||
|
@ -6504,7 +6507,7 @@ def download_announce(session, base_dir: str, http_prefix: str,
|
|||
str(attributed_nickname) + '@' + attributed_domain)
|
||||
_reject_announce(announce_filename,
|
||||
base_dir, nickname, domain, post_id,
|
||||
recent_posts_cache)
|
||||
recent_posts_cache, debug)
|
||||
return None
|
||||
post_json_object = announced_json
|
||||
replace_you_tube(post_json_object, yt_replace_domain, system_language)
|
||||
|
|
42
utils.py
42
utils.py
|
@ -2233,26 +2233,26 @@ def _remove_attachment(base_dir: str, http_prefix: str, domain: str,
|
|||
post_json['attachment'] = []
|
||||
|
||||
|
||||
def remove_moderation_post_from_index(base_dir: str, post_url: str,
|
||||
debug: bool) -> None:
|
||||
"""Removes a url from the moderation index
|
||||
def remove_post_from_index(post_url: str, debug: bool,
|
||||
index_file: str) -> None:
|
||||
"""Removes a url from a box index
|
||||
"""
|
||||
moderation_index_file = data_dir(base_dir) + '/moderation.txt'
|
||||
if not os.path.isfile(moderation_index_file):
|
||||
if not os.path.isfile(index_file):
|
||||
return
|
||||
post_id = remove_id_ending(post_url)
|
||||
if text_in_file(post_id, moderation_index_file):
|
||||
if not text_in_file(post_id, index_file):
|
||||
return
|
||||
lines = []
|
||||
try:
|
||||
with open(moderation_index_file, 'r', encoding='utf-8') as fp_mod1:
|
||||
with open(index_file, 'r', encoding='utf-8') as fp_mod1:
|
||||
lines = fp_mod1.readlines()
|
||||
except OSError as exc:
|
||||
print('EX: remove_moderation_post_from_index unable to read ' +
|
||||
moderation_index_file + ' ' + str(exc))
|
||||
print('EX: remove_post_from_index unable to read ' +
|
||||
index_file + ' ' + str(exc))
|
||||
|
||||
if lines:
|
||||
try:
|
||||
with open(moderation_index_file, 'w+',
|
||||
with open(index_file, 'w+',
|
||||
encoding='utf-8') as fp_mod2:
|
||||
for line in lines:
|
||||
if line.strip("\n").strip("\r") != post_id:
|
||||
|
@ -2260,11 +2260,19 @@ def remove_moderation_post_from_index(base_dir: str, post_url: str,
|
|||
continue
|
||||
if debug:
|
||||
print('DEBUG: removed ' + post_id +
|
||||
' from moderation index')
|
||||
' from index ' + index_file)
|
||||
except OSError as exc:
|
||||
print('EX: ' +
|
||||
'remove_moderation_post_from_index unable to write ' +
|
||||
moderation_index_file + ' ' + str(exc))
|
||||
'remove_post_from_index unable to write ' +
|
||||
index_file + ' ' + str(exc))
|
||||
|
||||
|
||||
def remove_moderation_post_from_index(base_dir: str, post_url: str,
|
||||
debug: bool) -> None:
|
||||
"""Removes a url from the moderation index
|
||||
"""
|
||||
moderation_index_file = data_dir(base_dir) + '/moderation.txt'
|
||||
remove_post_from_index(post_url, debug, moderation_index_file)
|
||||
|
||||
|
||||
def _is_reply_to_blog_post(base_dir: str, nickname: str, domain: str,
|
||||
|
@ -3536,7 +3544,8 @@ def _convert_to_camel_case(text: str) -> str:
|
|||
|
||||
|
||||
def reject_post_id(base_dir: str, nickname: str, domain: str,
|
||||
post_id: str, recent_posts_cache: {}) -> None:
|
||||
post_id: str, recent_posts_cache: {},
|
||||
debug: bool) -> None:
|
||||
""" Marks the given post as rejected,
|
||||
for example an announce which is too old
|
||||
"""
|
||||
|
@ -3570,6 +3579,11 @@ def reject_post_id(base_dir: str, nickname: str, domain: str,
|
|||
print('EX: reject_post_id unable to write ' +
|
||||
post_filename + '.reject')
|
||||
|
||||
# if the post is in the inbox index then remove it
|
||||
index_file = \
|
||||
acct_dir(base_dir, nickname, domain) + '/inbox.index'
|
||||
remove_post_from_index(post_url, debug, index_file)
|
||||
|
||||
|
||||
def load_translations_from_file(base_dir: str, language: str) -> ({}, str):
|
||||
"""Returns the translations dictionary
|
||||
|
|
|
@ -2330,7 +2330,7 @@ def individual_post_as_html(signing_priv_key_pem: str,
|
|||
# if the announce could not be downloaded then mark it as rejected
|
||||
announced_post_id = remove_id_ending(post_json_object['id'])
|
||||
reject_post_id(base_dir, nickname, domain, announced_post_id,
|
||||
recent_posts_cache)
|
||||
recent_posts_cache, False)
|
||||
return ''
|
||||
post_json_object = post_json_announce
|
||||
|
||||
|
|
Loading…
Reference in New Issue