diff --git a/daemon_get.py b/daemon_get.py index 7d3a42794..aeaca946b 100644 --- a/daemon_get.py +++ b/daemon_get.py @@ -68,7 +68,6 @@ from webapp_column_left import html_links_mobile from webapp_column_right import html_edit_news_post from webapp_column_right import html_edit_newswire from webapp_column_right import html_newswire_mobile -from webapp_timeline import html_inbox from webapp_theme_designer import html_theme_designer from webapp_accesskeys import html_access_keys from webapp_manual import html_manual @@ -156,7 +155,6 @@ from utils import corp_servers from utils import decoded_host from utils import has_object_dict from person import add_alternate_domains -from person import person_box_json from person import save_person_qrcode from person import person_lookup from person import get_account_pub_key @@ -197,6 +195,7 @@ from daemon_get_timeline import show_outbox_timeline from daemon_get_timeline import show_mod_timeline from daemon_get_timeline import show_dms from daemon_get_timeline import show_replies +from daemon_get_timeline import show_inbox from daemon_get_feeds import show_shares_feed from daemon_get_feeds import show_following_feed from daemon_get_feeds import show_moved_feed @@ -3815,27 +3814,27 @@ def daemon_http_get(self) -> None: # get the inbox timeline for a given person if self.path.endswith('/inbox') or '/inbox?page=' in self.path: - if _show_inbox(self, authorized, - calling_domain, referer_domain, - self.path, - self.server.base_dir, - self.server.http_prefix, - self.server.domain, - self.server.port, - getreq_start_time, - cookie, self.server.debug, - self.server.recent_posts_cache, - curr_session, - self.server.default_timeline, - self.server.max_recent_posts, - self.server.translate, - self.server.cached_webfingers, - self.server.person_cache, - self.server.allow_deletion, - self.server.project_version, - self.server.yt_replace_domain, - self.server.twitter_replacement_domain, - ua_str): + if show_inbox(self, authorized, + calling_domain, referer_domain, + self.path, + self.server.base_dir, + self.server.http_prefix, + self.server.domain, + self.server.port, + getreq_start_time, + cookie, self.server.debug, + self.server.recent_posts_cache, + curr_session, + self.server.default_timeline, + self.server.max_recent_posts, + self.server.translate, + self.server.cached_webfingers, + self.server.person_cache, + self.server.allow_deletion, + self.server.project_version, + self.server.yt_replace_domain, + self.server.twitter_replacement_domain, + ua_str, MAX_POSTS_IN_FEED): self.server.getreq_busy = False return @@ -7602,223 +7601,6 @@ def _show_individual_post(self, ssml_getreq: bool, authorized: bool, return result -def _show_inbox(self, authorized: bool, - calling_domain: str, referer_domain: str, - path: str, - base_dir: str, http_prefix: str, - domain: str, port: int, - getreq_start_time, - cookie: str, debug: str, - recent_posts_cache: {}, curr_session, - default_timeline: str, - max_recent_posts: int, - translate: {}, - cached_webfingers: {}, - person_cache: {}, - allow_deletion: bool, - project_version: str, - yt_replace_domain: str, - twitter_replacement_domain: str, - ua_str: str) -> bool: - """Shows the inbox timeline - """ - if '/users/' in path: - if authorized: - inbox_feed = \ - person_box_json(recent_posts_cache, - base_dir, - domain, - port, - path, - http_prefix, - MAX_POSTS_IN_FEED, 'inbox', - authorized, - 0, - self.server.positive_voting, - self.server.voting_time_mins) - if inbox_feed: - if getreq_start_time: - fitness_performance(getreq_start_time, - self.server.fitness, - '_GET', '_show_inbox', - self.server.debug) - if request_http(self.headers, debug): - nickname = path.replace('/users/', '') - nickname = nickname.replace('/inbox', '') - page_number = 1 - if '?page=' in nickname: - page_number = nickname.split('?page=')[1] - if ';' in page_number: - page_number = page_number.split(';')[0] - nickname = nickname.split('?page=')[0] - if len(page_number) > 5: - page_number = "1" - if page_number.isdigit(): - page_number = int(page_number) - else: - page_number = 1 - if 'page=' not in path: - # if no page was specified then show the first - inbox_feed = \ - person_box_json(recent_posts_cache, - base_dir, - domain, - port, - path + '?page=1', - http_prefix, - MAX_POSTS_IN_FEED, 'inbox', - authorized, - 0, - self.server.positive_voting, - self.server.voting_time_mins) - if getreq_start_time: - fitness_performance(getreq_start_time, - self.server.fitness, - '_GET', '_show_inbox2', - self.server.debug) - full_width_tl_button_header = \ - self.server.full_width_tl_button_header - minimal_nick = is_minimal(base_dir, domain, nickname) - - access_keys = self.server.access_keys - if self.server.key_shortcuts.get(nickname): - access_keys = \ - self.server.key_shortcuts[nickname] - shared_items_federated_domains = \ - self.server.shared_items_federated_domains - allow_local_network_access = \ - self.server.allow_local_network_access - timezone = None - if self.server.account_timezone.get(nickname): - timezone = \ - self.server.account_timezone.get(nickname) - bold_reading = False - if self.server.bold_reading.get(nickname): - bold_reading = True - reverse_sequence = False - if nickname in self.server.reverse_sequence: - reverse_sequence = True - last_post_id = None - if ';lastpost=' in path: - last_post_id = path.split(';lastpost=')[1] - if ';' in last_post_id: - last_post_id = last_post_id.split(';')[0] - msg = \ - html_inbox(default_timeline, - recent_posts_cache, - max_recent_posts, - translate, - page_number, MAX_POSTS_IN_FEED, - curr_session, - base_dir, - cached_webfingers, - person_cache, - nickname, - domain, - port, - inbox_feed, - allow_deletion, - http_prefix, - project_version, - minimal_nick, - yt_replace_domain, - twitter_replacement_domain, - self.server.show_published_date_only, - self.server.newswire, - self.server.positive_voting, - self.server.show_publish_as_icon, - full_width_tl_button_header, - self.server.icons_as_buttons, - self.server.rss_icon_at_top, - self.server.publish_button_at_top, - authorized, - self.server.theme_name, - self.server.peertube_instances, - allow_local_network_access, - self.server.text_mode_banner, - access_keys, - self.server.system_language, - self.server.max_like_count, - shared_items_federated_domains, - self.server.signing_priv_key_pem, - self.server.cw_lists, - self.server.lists_enabled, - timezone, bold_reading, - self.server.dogwhistles, - ua_str, - self.server.min_images_for_accounts, - reverse_sequence, last_post_id, - self.server.buy_sites, - self.server.auto_cw_cache) - if getreq_start_time: - fitness_performance(getreq_start_time, - self.server.fitness, - '_GET', '_show_inbox3', - self.server.debug) - if msg: - msg_str = msg - onion_domain = self.server.onion_domain - i2p_domain = self.server.i2p_domain - msg_str = convert_domains(calling_domain, - referer_domain, - msg_str, - http_prefix, - domain, - onion_domain, - i2p_domain) - msg = msg_str.encode('utf-8') - msglen = len(msg) - set_headers(self, 'text/html', msglen, - cookie, calling_domain, False) - write2(self, msg) - - if getreq_start_time: - fitness_performance(getreq_start_time, - self.server.fitness, - '_GET', '_show_inbox4', - self.server.debug) - else: - # don't need authorized fetch here because - # there is already the authorization check - onion_domain = self.server.onion_domain - i2p_domain = self.server.i2p_domain - msg_str = json.dumps(inbox_feed, ensure_ascii=False) - msg_str = convert_domains(calling_domain, - referer_domain, - msg_str, - http_prefix, - domain, - onion_domain, - i2p_domain) - msg = msg_str.encode('utf-8') - msglen = len(msg) - accept_str = self.headers['Accept'] - protocol_str = \ - get_json_content_from_accept(accept_str) - set_headers(self, protocol_str, msglen, - None, calling_domain, False) - write2(self, msg) - fitness_performance(getreq_start_time, - self.server.fitness, - '_GET', '_show_inbox5', - self.server.debug) - return True - else: - if debug: - nickname = path.replace('/users/', '') - nickname = nickname.replace('/inbox', '') - print('DEBUG: ' + nickname + - ' was not authorized to access ' + path) - if path != '/inbox': - # not the shared inbox - if debug: - print('DEBUG: GET access to inbox is unauthorized') - self.send_response(405) - self.end_headers() - return True - return False - - def _show_person_profile(self, authorized: bool, calling_domain: str, referer_domain: str, path: str, diff --git a/daemon_get_timeline.py b/daemon_get_timeline.py index f51979ffc..c7dd1e84f 100644 --- a/daemon_get_timeline.py +++ b/daemon_get_timeline.py @@ -30,6 +30,7 @@ from webapp_timeline import html_inbox_news from webapp_timeline import html_inbox_blogs from webapp_timeline import html_inbox_media from webapp_timeline import html_inbox_replies +from webapp_timeline import html_inbox from webapp_moderation import html_moderation from fitnessFunctions import fitness_performance @@ -1839,3 +1840,221 @@ def show_replies(self, authorized: bool, self.end_headers() return True return False + + +def show_inbox(self, authorized: bool, + calling_domain: str, referer_domain: str, + path: str, + base_dir: str, http_prefix: str, + domain: str, port: int, + getreq_start_time, + cookie: str, debug: str, + recent_posts_cache: {}, curr_session, + default_timeline: str, + max_recent_posts: int, + translate: {}, + cached_webfingers: {}, + person_cache: {}, + allow_deletion: bool, + project_version: str, + yt_replace_domain: str, + twitter_replacement_domain: str, + ua_str: str, + max_posts_in_feed: int) -> bool: + """Shows the inbox timeline + """ + if '/users/' in path: + if authorized: + inbox_feed = \ + person_box_json(recent_posts_cache, + base_dir, + domain, + port, + path, + http_prefix, + max_posts_in_feed, 'inbox', + authorized, + 0, + self.server.positive_voting, + self.server.voting_time_mins) + if inbox_feed: + if getreq_start_time: + fitness_performance(getreq_start_time, + self.server.fitness, + '_GET', '_show_inbox', + self.server.debug) + if request_http(self.headers, debug): + nickname = path.replace('/users/', '') + nickname = nickname.replace('/inbox', '') + page_number = 1 + if '?page=' in nickname: + page_number = nickname.split('?page=')[1] + if ';' in page_number: + page_number = page_number.split(';')[0] + nickname = nickname.split('?page=')[0] + if len(page_number) > 5: + page_number = "1" + if page_number.isdigit(): + page_number = int(page_number) + else: + page_number = 1 + if 'page=' not in path: + # if no page was specified then show the first + inbox_feed = \ + person_box_json(recent_posts_cache, + base_dir, + domain, + port, + path + '?page=1', + http_prefix, + max_posts_in_feed, 'inbox', + authorized, + 0, + self.server.positive_voting, + self.server.voting_time_mins) + if getreq_start_time: + fitness_performance(getreq_start_time, + self.server.fitness, + '_GET', '_show_inbox2', + self.server.debug) + full_width_tl_button_header = \ + self.server.full_width_tl_button_header + minimal_nick = is_minimal(base_dir, domain, nickname) + + access_keys = self.server.access_keys + if self.server.key_shortcuts.get(nickname): + access_keys = \ + self.server.key_shortcuts[nickname] + shared_items_federated_domains = \ + self.server.shared_items_federated_domains + allow_local_network_access = \ + self.server.allow_local_network_access + timezone = None + if self.server.account_timezone.get(nickname): + timezone = \ + self.server.account_timezone.get(nickname) + bold_reading = False + if self.server.bold_reading.get(nickname): + bold_reading = True + reverse_sequence = False + if nickname in self.server.reverse_sequence: + reverse_sequence = True + last_post_id = None + if ';lastpost=' in path: + last_post_id = path.split(';lastpost=')[1] + if ';' in last_post_id: + last_post_id = last_post_id.split(';')[0] + msg = \ + html_inbox(default_timeline, + recent_posts_cache, + max_recent_posts, + translate, + page_number, max_posts_in_feed, + curr_session, + base_dir, + cached_webfingers, + person_cache, + nickname, + domain, + port, + inbox_feed, + allow_deletion, + http_prefix, + project_version, + minimal_nick, + yt_replace_domain, + twitter_replacement_domain, + self.server.show_published_date_only, + self.server.newswire, + self.server.positive_voting, + self.server.show_publish_as_icon, + full_width_tl_button_header, + self.server.icons_as_buttons, + self.server.rss_icon_at_top, + self.server.publish_button_at_top, + authorized, + self.server.theme_name, + self.server.peertube_instances, + allow_local_network_access, + self.server.text_mode_banner, + access_keys, + self.server.system_language, + self.server.max_like_count, + shared_items_federated_domains, + self.server.signing_priv_key_pem, + self.server.cw_lists, + self.server.lists_enabled, + timezone, bold_reading, + self.server.dogwhistles, + ua_str, + self.server.min_images_for_accounts, + reverse_sequence, last_post_id, + self.server.buy_sites, + self.server.auto_cw_cache) + if getreq_start_time: + fitness_performance(getreq_start_time, + self.server.fitness, + '_GET', '_show_inbox3', + self.server.debug) + if msg: + msg_str = msg + onion_domain = self.server.onion_domain + i2p_domain = self.server.i2p_domain + msg_str = convert_domains(calling_domain, + referer_domain, + msg_str, + http_prefix, + domain, + onion_domain, + i2p_domain) + msg = msg_str.encode('utf-8') + msglen = len(msg) + set_headers(self, 'text/html', msglen, + cookie, calling_domain, False) + write2(self, msg) + + if getreq_start_time: + fitness_performance(getreq_start_time, + self.server.fitness, + '_GET', '_show_inbox4', + self.server.debug) + else: + # don't need authorized fetch here because + # there is already the authorization check + onion_domain = self.server.onion_domain + i2p_domain = self.server.i2p_domain + msg_str = json.dumps(inbox_feed, ensure_ascii=False) + msg_str = convert_domains(calling_domain, + referer_domain, + msg_str, + http_prefix, + domain, + onion_domain, + i2p_domain) + msg = msg_str.encode('utf-8') + msglen = len(msg) + accept_str = self.headers['Accept'] + protocol_str = \ + get_json_content_from_accept(accept_str) + set_headers(self, protocol_str, msglen, + None, calling_domain, False) + write2(self, msg) + fitness_performance(getreq_start_time, + self.server.fitness, + '_GET', '_show_inbox5', + self.server.debug) + return True + else: + if debug: + nickname = path.replace('/users/', '') + nickname = nickname.replace('/inbox', '') + print('DEBUG: ' + nickname + + ' was not authorized to access ' + path) + if path != '/inbox': + # not the shared inbox + if debug: + print('DEBUG: GET access to inbox is unauthorized') + self.send_response(405) + self.end_headers() + return True + return False