| 
									
										
										
										
											2020-11-10 10:25:21 +00:00
										 |  |  | __filename__ = "webapp_moderation.py" | 
					
						
							|  |  |  | __author__ = "Bob Mottram" | 
					
						
							|  |  |  | __license__ = "AGPL3+" | 
					
						
							| 
									
										
										
										
											2024-01-21 19:01:20 +00:00
										 |  |  | __version__ = "1.5.0" | 
					
						
							| 
									
										
										
										
											2020-11-10 10:25:21 +00:00
										 |  |  | __maintainer__ = "Bob Mottram" | 
					
						
							| 
									
										
										
										
											2021-09-10 16:14:50 +00:00
										 |  |  | __email__ = "bob@libreserver.org" | 
					
						
							| 
									
										
										
										
											2020-11-10 10:25:21 +00:00
										 |  |  | __status__ = "Production" | 
					
						
							| 
									
										
										
										
											2021-06-26 11:27:14 +00:00
										 |  |  | __module_group__ = "Moderation" | 
					
						
							| 
									
										
										
										
											2020-11-10 10:25:21 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | import os | 
					
						
							| 
									
										
										
										
											2024-05-12 12:35:26 +00:00
										 |  |  | from utils import data_dir | 
					
						
							| 
									
										
										
										
											2023-12-09 14:18:24 +00:00
										 |  |  | from utils import get_url_from_post | 
					
						
							| 
									
										
										
										
											2023-07-12 11:08:02 +00:00
										 |  |  | from utils import remove_html | 
					
						
							| 
									
										
										
										
											2021-12-26 14:17:13 +00:00
										 |  |  | from utils import is_artist | 
					
						
							| 
									
										
										
										
											2021-12-26 18:46:43 +00:00
										 |  |  | from utils import is_account_dir | 
					
						
							| 
									
										
										
										
											2021-12-26 12:45:03 +00:00
										 |  |  | from utils import get_full_domain | 
					
						
							| 
									
										
										
										
											2021-12-26 13:27:57 +00:00
										 |  |  | from utils import is_editor | 
					
						
							| 
									
										
										
										
											2021-12-26 15:13:34 +00:00
										 |  |  | from utils import load_json | 
					
						
							| 
									
										
										
										
											2021-12-27 22:19:18 +00:00
										 |  |  | from utils import get_nickname_from_actor | 
					
						
							| 
									
										
										
										
											2021-12-27 19:05:25 +00:00
										 |  |  | from utils import get_domain_from_actor | 
					
						
							| 
									
										
										
										
											2021-12-26 14:08:58 +00:00
										 |  |  | from utils import get_config_param | 
					
						
							| 
									
										
										
										
											2021-12-26 10:19:59 +00:00
										 |  |  | from utils import local_actor_url | 
					
						
							| 
									
										
										
										
											2022-06-21 11:58:50 +00:00
										 |  |  | from utils import remove_eol | 
					
						
							| 
									
										
										
										
											2021-12-29 21:55:09 +00:00
										 |  |  | from posts import download_follow_collection | 
					
						
							|  |  |  | from posts import get_public_post_info | 
					
						
							| 
									
										
										
										
											2021-12-28 19:33:29 +00:00
										 |  |  | from posts import is_moderator | 
					
						
							| 
									
										
										
										
											2021-12-29 21:55:09 +00:00
										 |  |  | from webapp_timeline import html_timeline | 
					
						
							|  |  |  | # from webapp_utils import get_person_avatar_url | 
					
						
							| 
									
										
										
										
											2022-06-06 09:16:26 +00:00
										 |  |  | from webapp_utils import get_banner_file | 
					
						
							| 
									
										
										
										
											2021-12-29 21:55:09 +00:00
										 |  |  | from webapp_utils import get_content_warning_button | 
					
						
							|  |  |  | from webapp_utils import html_header_with_external_style | 
					
						
							|  |  |  | from webapp_utils import html_footer | 
					
						
							| 
									
										
										
										
											2022-11-23 18:40:45 +00:00
										 |  |  | from blocking import get_global_block_reason | 
					
						
							| 
									
										
										
										
											2021-12-28 21:55:38 +00:00
										 |  |  | from blocking import is_blocked_domain | 
					
						
							| 
									
										
										
										
											2021-12-29 21:55:09 +00:00
										 |  |  | from blocking import is_blocked | 
					
						
							| 
									
										
										
										
											2021-12-28 16:56:57 +00:00
										 |  |  | from session import create_session | 
					
						
							| 
									
										
										
										
											2020-11-10 10:25:21 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-12 19:03:30 +00:00
										 |  |  | def html_moderation(default_timeline: str, | 
					
						
							| 
									
										
										
										
											2021-12-29 21:55:09 +00:00
										 |  |  |                     recent_posts_cache: {}, max_recent_posts: int, | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |                     translate: {}, page_number: int, items_per_page: int, | 
					
						
							| 
									
										
										
										
											2022-01-02 14:51:02 +00:00
										 |  |  |                     session, base_dir: str, wf_request: {}, person_cache: {}, | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |                     nickname: str, domain: str, port: int, inbox_json: {}, | 
					
						
							| 
									
										
										
										
											2021-12-29 21:55:09 +00:00
										 |  |  |                     allow_deletion: bool, | 
					
						
							|  |  |  |                     http_prefix: str, project_version: str, | 
					
						
							|  |  |  |                     yt_replace_domain: str, | 
					
						
							|  |  |  |                     twitter_replacement_domain: str, | 
					
						
							|  |  |  |                     show_published_date_only: bool, | 
					
						
							|  |  |  |                     newswire: {}, positive_voting: bool, | 
					
						
							|  |  |  |                     show_publish_as_icon: bool, | 
					
						
							|  |  |  |                     full_width_tl_button_header: bool, | 
					
						
							|  |  |  |                     icons_as_buttons: bool, | 
					
						
							|  |  |  |                     rss_icon_at_top: bool, | 
					
						
							|  |  |  |                     publish_button_at_top: bool, | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |                     authorized: bool, moderation_action_str: str, | 
					
						
							| 
									
										
										
										
											2021-12-29 21:55:09 +00:00
										 |  |  |                     theme: str, peertube_instances: [], | 
					
						
							|  |  |  |                     allow_local_network_access: bool, | 
					
						
							|  |  |  |                     text_mode_banner: str, | 
					
						
							| 
									
										
										
										
											2021-12-31 21:18:12 +00:00
										 |  |  |                     access_keys: {}, system_language: str, | 
					
						
							| 
									
										
										
										
											2021-12-29 21:55:09 +00:00
										 |  |  |                     max_like_count: int, | 
					
						
							|  |  |  |                     shared_items_federated_domains: [], | 
					
						
							|  |  |  |                     signing_priv_key_pem: str, | 
					
						
							| 
									
										
										
										
											2022-02-25 19:12:40 +00:00
										 |  |  |                     cw_lists: {}, lists_enabled: str, | 
					
						
							| 
									
										
										
										
											2022-07-05 14:40:26 +00:00
										 |  |  |                     timezone: str, bold_reading: bool, | 
					
						
							| 
									
										
										
										
											2022-11-13 18:54:11 +00:00
										 |  |  |                     dogwhistles: {}, ua_str: str, | 
					
						
							| 
									
										
										
										
											2022-11-26 15:31:46 +00:00
										 |  |  |                     min_images_for_accounts: [], | 
					
						
							| 
									
										
										
										
											2023-01-13 15:04:48 +00:00
										 |  |  |                     reverse_sequence: bool, | 
					
						
							| 
									
										
										
										
											2024-01-18 13:27:22 +00:00
										 |  |  |                     buy_sites: {}, | 
					
						
							|  |  |  |                     auto_cw_cache: {}) -> str: | 
					
						
							| 
									
										
										
										
											2020-11-10 10:25:21 +00:00
										 |  |  |     """Show the moderation feed as html
 | 
					
						
							|  |  |  |     This is what you see when selecting the "mod" timeline | 
					
						
							|  |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2021-12-26 14:17:13 +00:00
										 |  |  |     artist = is_artist(base_dir, nickname) | 
					
						
							| 
									
										
										
										
											2024-05-13 13:30:57 +00:00
										 |  |  |     show_announces = True | 
					
						
							| 
									
										
										
										
											2022-07-12 19:03:30 +00:00
										 |  |  |     return html_timeline(default_timeline, | 
					
						
							| 
									
										
										
										
											2021-12-29 21:55:09 +00:00
										 |  |  |                          recent_posts_cache, max_recent_posts, | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |                          translate, page_number, | 
					
						
							|  |  |  |                          items_per_page, session, base_dir, | 
					
						
							| 
									
										
										
										
											2022-01-02 14:51:02 +00:00
										 |  |  |                          wf_request, person_cache, | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |                          nickname, domain, port, inbox_json, 'moderation', | 
					
						
							| 
									
										
										
										
											2021-12-29 21:55:09 +00:00
										 |  |  |                          allow_deletion, http_prefix, | 
					
						
							|  |  |  |                          project_version, True, False, | 
					
						
							|  |  |  |                          yt_replace_domain, | 
					
						
							|  |  |  |                          twitter_replacement_domain, | 
					
						
							|  |  |  |                          show_published_date_only, | 
					
						
							|  |  |  |                          newswire, False, False, artist, positive_voting, | 
					
						
							|  |  |  |                          show_publish_as_icon, | 
					
						
							|  |  |  |                          full_width_tl_button_header, | 
					
						
							|  |  |  |                          icons_as_buttons, rss_icon_at_top, | 
					
						
							|  |  |  |                          publish_button_at_top, | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |                          authorized, moderation_action_str, theme, | 
					
						
							| 
									
										
										
										
											2021-12-29 21:55:09 +00:00
										 |  |  |                          peertube_instances, allow_local_network_access, | 
					
						
							| 
									
										
										
										
											2021-12-31 21:18:12 +00:00
										 |  |  |                          text_mode_banner, access_keys, system_language, | 
					
						
							| 
									
										
										
										
											2021-12-29 21:55:09 +00:00
										 |  |  |                          max_like_count, shared_items_federated_domains, | 
					
						
							| 
									
										
										
										
											2022-02-25 19:12:40 +00:00
										 |  |  |                          signing_priv_key_pem, cw_lists, lists_enabled, | 
					
						
							| 
									
										
										
										
											2022-11-13 18:54:11 +00:00
										 |  |  |                          timezone, bold_reading, dogwhistles, ua_str, | 
					
						
							| 
									
										
										
										
											2023-01-13 15:04:48 +00:00
										 |  |  |                          min_images_for_accounts, reverse_sequence, None, | 
					
						
							| 
									
										
										
										
											2024-05-13 13:30:57 +00:00
										 |  |  |                          buy_sites, auto_cw_cache, show_announces) | 
					
						
							| 
									
										
										
										
											2021-12-29 21:55:09 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-12 19:03:30 +00:00
										 |  |  | def html_account_info(translate: {}, | 
					
						
							| 
									
										
										
										
											2021-12-29 21:55:09 +00:00
										 |  |  |                       base_dir: str, http_prefix: str, | 
					
						
							| 
									
										
										
										
											2024-02-26 11:51:10 +00:00
										 |  |  |                       nickname: str, domain: str, | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |                       search_handle: str, debug: bool, | 
					
						
							| 
									
										
										
										
											2023-02-14 22:38:19 +00:00
										 |  |  |                       system_language: str, signing_priv_key_pem: str, | 
					
						
							| 
									
										
										
										
											2024-02-11 13:42:15 +00:00
										 |  |  |                       back_url: str, | 
					
						
							|  |  |  |                       block_federated: []) -> str: | 
					
						
							| 
									
										
										
										
											2020-12-09 22:55:15 +00:00
										 |  |  |     """Shows which domains a search handle interacts with.
 | 
					
						
							|  |  |  |     This screen is shown if a moderator enters a handle and selects info | 
					
						
							|  |  |  |     on the moderation screen | 
					
						
							|  |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2021-12-25 23:03:28 +00:00
										 |  |  |     signing_priv_key_pem = None | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |     msg_str1 = 'This account interacts with the following instances' | 
					
						
							| 
									
										
										
										
											2020-12-09 22:55:15 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |     info_form = '' | 
					
						
							| 
									
										
										
										
											2021-12-31 21:18:12 +00:00
										 |  |  |     css_filename = base_dir + '/epicyon-profile.css' | 
					
						
							| 
									
										
										
										
											2021-12-25 16:17:53 +00:00
										 |  |  |     if os.path.isfile(base_dir + '/epicyon.css'): | 
					
						
							| 
									
										
										
										
											2021-12-31 21:18:12 +00:00
										 |  |  |         css_filename = base_dir + '/epicyon.css' | 
					
						
							| 
									
										
										
										
											2020-12-09 22:55:15 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |     instance_title = \ | 
					
						
							| 
									
										
										
										
											2021-12-26 14:08:58 +00:00
										 |  |  |         get_config_param(base_dir, 'instanceTitle') | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |     info_form = \ | 
					
						
							|  |  |  |         html_header_with_external_style(css_filename, instance_title, None) | 
					
						
							| 
									
										
										
										
											2020-12-09 22:55:15 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |     search_nickname = get_nickname_from_actor(search_handle) | 
					
						
							| 
									
										
										
										
											2022-03-23 23:59:29 +00:00
										 |  |  |     if not search_nickname: | 
					
						
							|  |  |  |         return '' | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |     search_domain, search_port = get_domain_from_actor(search_handle) | 
					
						
							| 
									
										
										
										
											2023-01-15 14:33:18 +00:00
										 |  |  |     if not search_domain: | 
					
						
							|  |  |  |         return '' | 
					
						
							| 
									
										
										
										
											2020-12-09 22:55:15 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |     search_handle = search_nickname + '@' + search_domain | 
					
						
							|  |  |  |     search_actor = \ | 
					
						
							|  |  |  |         local_actor_url(http_prefix, search_nickname, search_domain) | 
					
						
							| 
									
										
										
										
											2023-02-14 22:38:19 +00:00
										 |  |  |     if not back_url: | 
					
						
							|  |  |  |         back_url = '/users/' + nickname + '/moderation' | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |     info_form += \ | 
					
						
							| 
									
										
										
										
											2023-02-14 22:38:19 +00:00
										 |  |  |         '<center><h1><a href="' + back_url + '">' + \ | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |         translate['Account Information'] + ':</a> <a href="' + search_actor + \ | 
					
						
							|  |  |  |         '">' + search_handle + '</a></h1><br>\n' | 
					
						
							| 
									
										
										
										
											2020-12-09 22:55:15 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |     info_form += translate[msg_str1] + '</center><br><br>\n' | 
					
						
							| 
									
										
										
										
											2020-12-09 22:55:15 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-12-25 21:09:22 +00:00
										 |  |  |     proxy_type = 'tor' | 
					
						
							| 
									
										
										
										
											2020-12-17 11:02:52 +00:00
										 |  |  |     if not os.path.isfile('/usr/bin/tor'): | 
					
						
							| 
									
										
										
										
											2021-12-25 21:09:22 +00:00
										 |  |  |         proxy_type = None | 
					
						
							| 
									
										
										
										
											2020-12-17 11:02:52 +00:00
										 |  |  |     if domain.endswith('.i2p'): | 
					
						
							| 
									
										
										
										
											2021-12-25 21:09:22 +00:00
										 |  |  |         proxy_type = None | 
					
						
							| 
									
										
										
										
											2021-01-10 23:06:38 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-12-28 16:56:57 +00:00
										 |  |  |     session = create_session(proxy_type) | 
					
						
							| 
									
										
										
										
											2021-01-10 23:06:38 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |     word_frequency = {} | 
					
						
							|  |  |  |     origin_domain = None | 
					
						
							|  |  |  |     domain_dict = get_public_post_info(session, base_dir, | 
					
						
							|  |  |  |                                        search_nickname, search_domain, | 
					
						
							|  |  |  |                                        origin_domain, | 
					
						
							|  |  |  |                                        proxy_type, search_port, | 
					
						
							|  |  |  |                                        http_prefix, debug, | 
					
						
							|  |  |  |                                        __version__, word_frequency, | 
					
						
							|  |  |  |                                        system_language, | 
					
						
							|  |  |  |                                        signing_priv_key_pem) | 
					
						
							| 
									
										
										
										
											2021-01-10 23:06:38 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # get a list of any blocked followers | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |     followers_list = \ | 
					
						
							| 
									
										
										
										
											2021-12-29 21:55:09 +00:00
										 |  |  |         download_follow_collection(signing_priv_key_pem, | 
					
						
							|  |  |  |                                    'followers', session, | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |                                    http_prefix, search_actor, 1, 5, debug) | 
					
						
							|  |  |  |     blocked_followers = [] | 
					
						
							|  |  |  |     for follower_actor in followers_list: | 
					
						
							|  |  |  |         follower_nickname = get_nickname_from_actor(follower_actor) | 
					
						
							| 
									
										
										
										
											2022-03-23 23:59:29 +00:00
										 |  |  |         if not follower_nickname: | 
					
						
							|  |  |  |             return '' | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |         follower_domain, follower_port = get_domain_from_actor(follower_actor) | 
					
						
							| 
									
										
										
										
											2023-01-15 14:33:18 +00:00
										 |  |  |         if not follower_domain: | 
					
						
							|  |  |  |             return '' | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |         follower_domain_full = get_full_domain(follower_domain, follower_port) | 
					
						
							| 
									
										
										
										
											2021-12-29 21:55:09 +00:00
										 |  |  |         if is_blocked(base_dir, nickname, domain, | 
					
						
							| 
									
										
										
										
											2024-02-11 13:27:52 +00:00
										 |  |  |                       follower_nickname, follower_domain_full, | 
					
						
							| 
									
										
										
										
											2024-02-11 14:08:21 +00:00
										 |  |  |                       None, block_federated): | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |             blocked_followers.append(follower_actor) | 
					
						
							| 
									
										
										
										
											2021-01-10 23:06:38 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-11 10:08:05 +00:00
										 |  |  |     # get a list of any blocked following | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |     following_list = \ | 
					
						
							| 
									
										
										
										
											2021-12-29 21:55:09 +00:00
										 |  |  |         download_follow_collection(signing_priv_key_pem, | 
					
						
							|  |  |  |                                    'following', session, | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |                                    http_prefix, search_actor, 1, 5, debug) | 
					
						
							|  |  |  |     blocked_following = [] | 
					
						
							|  |  |  |     for following_actor in following_list: | 
					
						
							|  |  |  |         following_nickname = get_nickname_from_actor(following_actor) | 
					
						
							| 
									
										
										
										
											2022-03-23 23:59:29 +00:00
										 |  |  |         if not following_nickname: | 
					
						
							|  |  |  |             return '' | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |         following_domain, following_port = \ | 
					
						
							|  |  |  |             get_domain_from_actor(following_actor) | 
					
						
							| 
									
										
										
										
											2023-01-15 14:33:18 +00:00
										 |  |  |         if not following_domain: | 
					
						
							|  |  |  |             return '' | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |         following_domain_full = \ | 
					
						
							|  |  |  |             get_full_domain(following_domain, following_port) | 
					
						
							| 
									
										
										
										
											2021-12-29 21:55:09 +00:00
										 |  |  |         if is_blocked(base_dir, nickname, domain, | 
					
						
							| 
									
										
										
										
											2024-02-11 13:27:52 +00:00
										 |  |  |                       following_nickname, following_domain_full, | 
					
						
							| 
									
										
										
										
											2024-02-11 14:08:21 +00:00
										 |  |  |                       None, block_federated): | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |             blocked_following.append(following_actor) | 
					
						
							| 
									
										
										
										
											2021-01-11 10:08:05 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |     info_form += '<div class="accountInfoDomains">\n' | 
					
						
							|  |  |  |     users_path = '/users/' + nickname + '/accountinfo' | 
					
						
							| 
									
										
										
										
											2020-12-16 16:43:51 +00:00
										 |  |  |     ctr = 1 | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |     for post_domain, blocked_post_urls in domain_dict.items(): | 
					
						
							|  |  |  |         info_form += '<a href="' + \ | 
					
						
							|  |  |  |             http_prefix + '://' + post_domain + '" ' + \ | 
					
						
							| 
									
										
										
										
											2021-07-23 13:50:32 +00:00
										 |  |  |             'target="_blank" rel="nofollow noopener noreferrer">' + \ | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |             post_domain + '</a> ' | 
					
						
							| 
									
										
										
										
											2024-02-11 13:42:15 +00:00
										 |  |  |         if is_blocked_domain(base_dir, post_domain, None, block_federated): | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |             blocked_posts_links = '' | 
					
						
							|  |  |  |             url_ctr = 0 | 
					
						
							|  |  |  |             for url in blocked_post_urls: | 
					
						
							|  |  |  |                 if url_ctr > 0: | 
					
						
							|  |  |  |                     blocked_posts_links += '<br>' | 
					
						
							|  |  |  |                 blocked_posts_links += \ | 
					
						
							| 
									
										
										
										
											2021-07-23 13:50:32 +00:00
										 |  |  |                     '<a href="' + url + '" ' + \ | 
					
						
							|  |  |  |                     'target="_blank" rel="nofollow noopener noreferrer">' + \ | 
					
						
							|  |  |  |                     url + '</a>' | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |                 url_ctr += 1 | 
					
						
							|  |  |  |             blocked_posts_html = '' | 
					
						
							|  |  |  |             if blocked_posts_links: | 
					
						
							|  |  |  |                 block_no_str = 'blockNumber' + str(ctr) | 
					
						
							|  |  |  |                 blocked_posts_html = \ | 
					
						
							|  |  |  |                     get_content_warning_button(block_no_str, | 
					
						
							|  |  |  |                                                translate, | 
					
						
							|  |  |  |                                                blocked_posts_links) | 
					
						
							| 
									
										
										
										
											2020-12-16 16:46:36 +00:00
										 |  |  |                 ctr += 1 | 
					
						
							| 
									
										
										
										
											2020-12-16 16:43:51 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |             info_form += \ | 
					
						
							|  |  |  |                 '<a href="' + users_path + '?unblockdomain=' + post_domain + \ | 
					
						
							|  |  |  |                 '?handle=' + search_handle + '">' | 
					
						
							|  |  |  |             info_form += '<button class="buttonhighlighted"><span>' + \ | 
					
						
							| 
									
										
										
										
											2020-12-16 16:43:51 +00:00
										 |  |  |                 translate['Unblock'] + '</span></button></a> ' + \ | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |                 blocked_posts_html + '\n' | 
					
						
							| 
									
										
										
										
											2020-12-09 22:55:15 +00:00
										 |  |  |         else: | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |             info_form += \ | 
					
						
							|  |  |  |                 '<a href="' + users_path + '?blockdomain=' + post_domain + \ | 
					
						
							|  |  |  |                 '?handle=' + search_handle + '">' | 
					
						
							|  |  |  |             if post_domain != domain: | 
					
						
							|  |  |  |                 info_form += '<button class="button"><span>' + \ | 
					
						
							| 
									
										
										
										
											2020-12-16 16:51:57 +00:00
										 |  |  |                     translate['Block'] + '</span></button>' | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |             info_form += '</a>\n' | 
					
						
							|  |  |  |         info_form += '<br>\n' | 
					
						
							| 
									
										
										
										
											2021-01-10 23:06:38 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |     info_form += '</div>\n' | 
					
						
							| 
									
										
										
										
											2021-01-10 23:06:38 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |     if blocked_following: | 
					
						
							|  |  |  |         blocked_following.sort() | 
					
						
							|  |  |  |         info_form += '<div class="accountInfoDomains">\n' | 
					
						
							|  |  |  |         info_form += '<h1>' + translate['Blocked following'] + '</h1>\n' | 
					
						
							|  |  |  |         info_form += \ | 
					
						
							| 
									
										
										
										
											2021-01-11 10:08:05 +00:00
										 |  |  |             '<p>' + \ | 
					
						
							|  |  |  |             translate['Receives posts from the following accounts'] + \ | 
					
						
							| 
									
										
										
										
											2021-01-11 20:46:57 +00:00
										 |  |  |             ':</p>\n' | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |         for actor in blocked_following: | 
					
						
							|  |  |  |             following_nickname = get_nickname_from_actor(actor) | 
					
						
							| 
									
										
										
										
											2022-03-23 23:59:29 +00:00
										 |  |  |             if not following_nickname: | 
					
						
							|  |  |  |                 return '' | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |             following_domain, following_port = get_domain_from_actor(actor) | 
					
						
							| 
									
										
										
										
											2023-01-15 14:33:18 +00:00
										 |  |  |             if not following_domain: | 
					
						
							|  |  |  |                 return '' | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |             following_domain_full = \ | 
					
						
							|  |  |  |                 get_full_domain(following_domain, following_port) | 
					
						
							|  |  |  |             info_form += '<a href="' + actor + '" ' + \ | 
					
						
							| 
									
										
										
										
											2021-07-23 13:50:32 +00:00
										 |  |  |                 'target="_blank" rel="nofollow noopener noreferrer">' + \ | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |                 following_nickname + '@' + following_domain_full + \ | 
					
						
							| 
									
										
										
										
											2021-01-11 10:08:05 +00:00
										 |  |  |                 '</a><br><br>\n' | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |         info_form += '</div>\n' | 
					
						
							| 
									
										
										
										
											2021-01-11 10:08:05 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |     if blocked_followers: | 
					
						
							|  |  |  |         blocked_followers.sort() | 
					
						
							|  |  |  |         info_form += '<div class="accountInfoDomains">\n' | 
					
						
							|  |  |  |         info_form += '<h1>' + translate['Blocked followers'] + '</h1>\n' | 
					
						
							|  |  |  |         info_form += \ | 
					
						
							| 
									
										
										
										
											2021-01-11 10:08:05 +00:00
										 |  |  |             '<p>' + \ | 
					
						
							|  |  |  |             translate['Sends out posts to the following accounts'] + \ | 
					
						
							| 
									
										
										
										
											2021-01-11 20:46:57 +00:00
										 |  |  |             ':</p>\n' | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |         for actor in blocked_followers: | 
					
						
							|  |  |  |             follower_nickname = get_nickname_from_actor(actor) | 
					
						
							| 
									
										
										
										
											2022-03-23 23:59:29 +00:00
										 |  |  |             if not follower_nickname: | 
					
						
							|  |  |  |                 return '' | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |             follower_domain, follower_port = get_domain_from_actor(actor) | 
					
						
							| 
									
										
										
										
											2023-01-15 14:33:18 +00:00
										 |  |  |             if not follower_domain: | 
					
						
							|  |  |  |                 return '' | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |             follower_domain_full = \ | 
					
						
							|  |  |  |                 get_full_domain(follower_domain, follower_port) | 
					
						
							|  |  |  |             info_form += '<a href="' + actor + '" ' + \ | 
					
						
							| 
									
										
										
										
											2021-07-23 13:50:32 +00:00
										 |  |  |                 'target="_blank" rel="nofollow noopener noreferrer">' + \ | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |                 follower_nickname + '@' + \ | 
					
						
							|  |  |  |                 follower_domain_full + '</a><br><br>\n' | 
					
						
							|  |  |  |         info_form += '</div>\n' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if word_frequency: | 
					
						
							|  |  |  |         max_count = 1 | 
					
						
							|  |  |  |         for word, count in word_frequency.items(): | 
					
						
							|  |  |  |             if count > max_count: | 
					
						
							|  |  |  |                 max_count = count | 
					
						
							|  |  |  |         minimum_word_count = int(max_count / 2) | 
					
						
							|  |  |  |         if minimum_word_count >= 3: | 
					
						
							|  |  |  |             info_form += '<div class="accountInfoDomains">\n' | 
					
						
							|  |  |  |             info_form += '<h1>' + translate['Word frequencies'] + '</h1>\n' | 
					
						
							|  |  |  |             word_swarm = '' | 
					
						
							| 
									
										
										
										
											2021-01-11 13:42:47 +00:00
										 |  |  |             ctr = 0 | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |             for word, count in word_frequency.items(): | 
					
						
							|  |  |  |                 if count >= minimum_word_count: | 
					
						
							| 
									
										
										
										
											2021-01-11 13:42:47 +00:00
										 |  |  |                     if ctr > 0: | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |                         word_swarm += ' ' | 
					
						
							|  |  |  |                     if count < max_count - int(max_count / 4): | 
					
						
							|  |  |  |                         word_swarm += word | 
					
						
							| 
									
										
										
										
											2021-01-11 13:42:47 +00:00
										 |  |  |                     else: | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |                         if count != max_count: | 
					
						
							|  |  |  |                             word_swarm += '<b>' + word + '</b>' | 
					
						
							| 
									
										
										
										
											2021-01-11 13:42:47 +00:00
										 |  |  |                         else: | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |                             word_swarm += '<b><i>' + word + '</i></b>' | 
					
						
							| 
									
										
										
										
											2021-01-11 13:42:47 +00:00
										 |  |  |                     ctr += 1 | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |             info_form += word_swarm | 
					
						
							|  |  |  |             info_form += '</div>\n' | 
					
						
							| 
									
										
										
										
											2021-01-11 13:42:47 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |     info_form += html_footer() | 
					
						
							|  |  |  |     return info_form | 
					
						
							| 
									
										
										
										
											2020-12-09 22:55:15 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-06-06 09:16:26 +00:00
										 |  |  | def html_moderation_info(translate: {}, base_dir: str, | 
					
						
							|  |  |  |                          nickname: str, domain: str, theme: str, | 
					
						
							|  |  |  |                          access_keys: {}) -> str: | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |     msg_str1 = \ | 
					
						
							| 
									
										
										
										
											2020-11-10 10:25:21 +00:00
										 |  |  |         'These are globally blocked for all accounts on this instance' | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |     msg_str2 = \ | 
					
						
							| 
									
										
										
										
											2020-11-10 10:25:21 +00:00
										 |  |  |         'Any blocks or suspensions made by moderators will be shown here.' | 
					
						
							| 
									
										
										
										
											2020-12-09 22:55:15 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |     info_form = '' | 
					
						
							| 
									
										
										
										
											2021-12-31 21:18:12 +00:00
										 |  |  |     css_filename = base_dir + '/epicyon-profile.css' | 
					
						
							| 
									
										
										
										
											2021-12-25 16:17:53 +00:00
										 |  |  |     if os.path.isfile(base_dir + '/epicyon.css'): | 
					
						
							| 
									
										
										
										
											2021-12-31 21:18:12 +00:00
										 |  |  |         css_filename = base_dir + '/epicyon.css' | 
					
						
							| 
									
										
										
										
											2020-11-10 10:25:21 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |     instance_title = \ | 
					
						
							| 
									
										
										
										
											2021-12-26 14:08:58 +00:00
										 |  |  |         get_config_param(base_dir, 'instanceTitle') | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |     info_form = html_header_with_external_style(css_filename, | 
					
						
							|  |  |  |                                                 instance_title, None) | 
					
						
							| 
									
										
										
										
											2020-11-10 10:25:21 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-06-06 09:16:26 +00:00
										 |  |  |     # show banner | 
					
						
							|  |  |  |     banner_file, _ = \ | 
					
						
							|  |  |  |         get_banner_file(base_dir, nickname, domain, theme) | 
					
						
							|  |  |  |     moderation_link = '/users/' + nickname + '/moderation' | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |     info_form += \ | 
					
						
							| 
									
										
										
										
											2022-06-06 09:16:26 +00:00
										 |  |  |         '<header>\n<a href="' + moderation_link + '" title="' + \ | 
					
						
							|  |  |  |         translate['Switch to moderation view'] + '" alt="' + \ | 
					
						
							|  |  |  |         translate['Switch to moderation view'] + '" ' + \ | 
					
						
							|  |  |  |         'tabindex="1" accesskey="' + access_keys['menuModeration'] + '">\n' | 
					
						
							|  |  |  |     info_form += \ | 
					
						
							|  |  |  |         '<img loading="lazy" decoding="async" ' + \ | 
					
						
							|  |  |  |         'class="timeline-banner" alt="" ' + \ | 
					
						
							|  |  |  |         'src="/users/' + nickname + '/' + banner_file + '" /></a>\n' + \ | 
					
						
							|  |  |  |         '</header>\n<br>\n' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     info_form += \ | 
					
						
							|  |  |  |         '<center><h1><a href="' + moderation_link + '">' + \ | 
					
						
							| 
									
										
										
										
											2020-11-12 17:05:38 +00:00
										 |  |  |         translate['Moderation Information'] + \ | 
					
						
							| 
									
										
										
										
											2020-12-09 22:55:15 +00:00
										 |  |  |         '</a></h1></center><br>' | 
					
						
							| 
									
										
										
										
											2020-11-10 10:25:21 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |     info_shown = False | 
					
						
							| 
									
										
										
										
											2020-12-20 11:00:17 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-20 11:31:29 +00:00
										 |  |  |     accounts = [] | 
					
						
							| 
									
										
										
										
											2024-05-12 12:35:26 +00:00
										 |  |  |     dir_str = data_dir(base_dir) | 
					
						
							|  |  |  |     for _, dirs, _ in os.walk(dir_str): | 
					
						
							| 
									
										
										
										
											2020-12-20 11:00:17 +00:00
										 |  |  |         for acct in dirs: | 
					
						
							| 
									
										
										
										
											2021-12-26 18:46:43 +00:00
										 |  |  |             if not is_account_dir(acct): | 
					
						
							| 
									
										
										
										
											2020-12-20 11:00:17 +00:00
										 |  |  |                 continue | 
					
						
							| 
									
										
										
										
											2020-12-20 11:31:29 +00:00
										 |  |  |             accounts.append(acct) | 
					
						
							| 
									
										
										
										
											2020-12-20 11:00:17 +00:00
										 |  |  |         break | 
					
						
							| 
									
										
										
										
											2020-12-20 11:31:29 +00:00
										 |  |  |     accounts.sort() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-20 11:51:23 +00:00
										 |  |  |     cols = 5 | 
					
						
							|  |  |  |     if len(accounts) > 10: | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |         info_form += '<details><summary><b>' + translate['Show Accounts'] | 
					
						
							|  |  |  |         info_form += '</b></summary>\n' | 
					
						
							|  |  |  |     info_form += '<div class="container">\n' | 
					
						
							|  |  |  |     info_form += '<table class="accountsTable">\n' | 
					
						
							|  |  |  |     info_form += '  <colgroup>\n' | 
					
						
							| 
									
										
										
										
											2020-12-20 11:51:23 +00:00
										 |  |  |     for col in range(cols): | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |         info_form += '    <col span="1" class="accountsTableCol">\n' | 
					
						
							|  |  |  |     info_form += '  </colgroup>\n' | 
					
						
							|  |  |  |     info_form += '<tr>\n' | 
					
						
							| 
									
										
										
										
											2020-12-20 11:51:23 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-20 11:31:29 +00:00
										 |  |  |     col = 0 | 
					
						
							| 
									
										
										
										
											2024-05-12 12:35:26 +00:00
										 |  |  |     dir_str = data_dir(base_dir) | 
					
						
							| 
									
										
										
										
											2020-12-20 11:31:29 +00:00
										 |  |  |     for acct in accounts: | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |         acct_nickname = acct.split('@')[0] | 
					
						
							| 
									
										
										
										
											2024-05-12 12:35:26 +00:00
										 |  |  |         account_dir = os.path.join(dir_str, acct) | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |         actor_json = load_json(account_dir + '.json') | 
					
						
							| 
									
										
										
										
											2021-12-26 10:29:52 +00:00
										 |  |  |         if not actor_json: | 
					
						
							| 
									
										
										
										
											2020-12-20 11:31:29 +00:00
										 |  |  |             continue | 
					
						
							| 
									
										
										
										
											2021-12-26 10:29:52 +00:00
										 |  |  |         actor = actor_json['id'] | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |         avatar_url = '' | 
					
						
							| 
									
										
										
										
											2020-12-20 13:28:33 +00:00
										 |  |  |         ext = '' | 
					
						
							| 
									
										
										
										
											2021-12-26 10:29:52 +00:00
										 |  |  |         if actor_json.get('icon'): | 
					
						
							|  |  |  |             if actor_json['icon'].get('url'): | 
					
						
							| 
									
										
										
										
											2023-12-09 14:18:24 +00:00
										 |  |  |                 url_str = get_url_from_post(actor_json['icon']['url']) | 
					
						
							|  |  |  |                 avatar_url = remove_html(url_str) | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |                 if '.' in avatar_url: | 
					
						
							|  |  |  |                     ext = '.' + avatar_url.split('.')[-1] | 
					
						
							|  |  |  |         acct_url = \ | 
					
						
							| 
									
										
										
										
											2020-12-20 11:31:29 +00:00
										 |  |  |             '/users/' + nickname + '?options=' + actor + ';1;' + \ | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |             '/members/' + acct_nickname + ext | 
					
						
							|  |  |  |         info_form += '<td>\n<a href="' + acct_url + '">' | 
					
						
							| 
									
										
										
										
											2022-03-28 08:47:53 +00:00
										 |  |  |         info_form += '<img loading="lazy" decoding="async" style="width:90%" ' | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |         info_form += 'src="' + avatar_url + '" />' | 
					
						
							|  |  |  |         info_form += '<br><center>' | 
					
						
							|  |  |  |         if is_moderator(base_dir, acct_nickname): | 
					
						
							|  |  |  |             info_form += '<b><u>' + acct_nickname + '</u></b>' | 
					
						
							| 
									
										
										
										
											2020-12-20 12:38:47 +00:00
										 |  |  |         else: | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |             info_form += acct_nickname | 
					
						
							|  |  |  |         if is_editor(base_dir, acct_nickname): | 
					
						
							|  |  |  |             info_form += ' ✍' | 
					
						
							|  |  |  |         info_form += '</center></a>\n</td>\n' | 
					
						
							| 
									
										
										
										
											2020-12-20 11:31:29 +00:00
										 |  |  |         col += 1 | 
					
						
							|  |  |  |         if col == cols: | 
					
						
							|  |  |  |             # new row of accounts | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |             info_form += '</tr>\n<tr>\n' | 
					
						
							|  |  |  |     info_form += '</tr>\n</table>\n' | 
					
						
							|  |  |  |     info_form += '</div>\n' | 
					
						
							| 
									
										
										
										
											2020-12-20 11:51:23 +00:00
										 |  |  |     if len(accounts) > 10: | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |         info_form += '</details>\n' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-12 12:35:26 +00:00
										 |  |  |     suspended_filename = dir_str + '/suspended.txt' | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |     if os.path.isfile(suspended_filename): | 
					
						
							| 
									
										
										
										
											2022-06-09 14:46:30 +00:00
										 |  |  |         with open(suspended_filename, 'r', encoding='utf-8') as fp_sus: | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |             suspended_str = fp_sus.read() | 
					
						
							|  |  |  |             info_form += '<div class="container">\n' | 
					
						
							|  |  |  |             info_form += '  <br><b>' + \ | 
					
						
							| 
									
										
										
										
											2020-11-12 17:05:38 +00:00
										 |  |  |                 translate['Suspended accounts'] + '</b>' | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |             info_form += '  <br>' + \ | 
					
						
							| 
									
										
										
										
											2020-11-12 17:05:38 +00:00
										 |  |  |                 translate['These are currently suspended'] | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |             info_form += \ | 
					
						
							| 
									
										
										
										
											2020-11-12 17:05:38 +00:00
										 |  |  |                 '  <textarea id="message" ' + \ | 
					
						
							| 
									
										
										
										
											2021-02-28 14:26:04 +00:00
										 |  |  |                 'name="suspended" style="height:200px" spellcheck="false">' + \ | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |                 suspended_str + '</textarea>\n' | 
					
						
							|  |  |  |             info_form += '</div>\n' | 
					
						
							|  |  |  |             info_shown = True | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-12 12:35:26 +00:00
										 |  |  |     blocking_filename = dir_str + '/blocking.txt' | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |     if os.path.isfile(blocking_filename): | 
					
						
							| 
									
										
										
										
											2024-05-12 12:35:26 +00:00
										 |  |  |         blocking_reasons_filename = dir_str + '/blocking_reasons.txt' | 
					
						
							| 
									
										
										
										
											2022-11-23 15:02:33 +00:00
										 |  |  |         blocking_reasons_exist = False | 
					
						
							|  |  |  |         if os.path.isfile(blocking_reasons_filename): | 
					
						
							|  |  |  |             blocking_reasons_exist = True | 
					
						
							| 
									
										
										
										
											2022-06-09 14:46:30 +00:00
										 |  |  |         with open(blocking_filename, 'r', encoding='utf-8') as fp_block: | 
					
						
							| 
									
										
										
										
											2022-06-05 10:49:34 +00:00
										 |  |  |             blocked_lines = fp_block.readlines() | 
					
						
							| 
									
										
										
										
											2022-06-05 10:46:27 +00:00
										 |  |  |             blocked_str = '' | 
					
						
							| 
									
										
										
										
											2022-06-05 10:49:34 +00:00
										 |  |  |             if blocked_lines: | 
					
						
							|  |  |  |                 blocked_lines.sort() | 
					
						
							|  |  |  |                 for line in blocked_lines: | 
					
						
							|  |  |  |                     if not line: | 
					
						
							|  |  |  |                         continue | 
					
						
							| 
									
										
										
										
											2022-06-21 11:58:50 +00:00
										 |  |  |                     line = remove_eol(line).strip() | 
					
						
							| 
									
										
										
										
											2022-11-23 15:02:33 +00:00
										 |  |  |                     if blocking_reasons_exist: | 
					
						
							|  |  |  |                         reason = \ | 
					
						
							| 
									
										
										
										
											2022-11-23 18:40:45 +00:00
										 |  |  |                             get_global_block_reason(line, | 
					
						
							|  |  |  |                                                     blocking_reasons_filename) | 
					
						
							| 
									
										
										
										
											2022-11-23 15:02:33 +00:00
										 |  |  |                         if reason: | 
					
						
							| 
									
										
										
										
											2022-11-23 15:31:29 +00:00
										 |  |  |                             blocked_str += \ | 
					
						
							| 
									
										
										
										
											2022-11-23 15:45:37 +00:00
										 |  |  |                                 line + ' - ' + reason + '\n' | 
					
						
							| 
									
										
										
										
											2022-11-23 15:02:33 +00:00
										 |  |  |                             continue | 
					
						
							| 
									
										
										
										
											2022-06-05 10:49:34 +00:00
										 |  |  |                     blocked_str += line + '\n' | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |             info_form += '<div class="container">\n' | 
					
						
							|  |  |  |             info_form += \ | 
					
						
							| 
									
										
										
										
											2020-11-12 17:05:38 +00:00
										 |  |  |                 '  <br><b>' + \ | 
					
						
							|  |  |  |                 translate['Blocked accounts and hashtags'] + '</b>' | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |             info_form += \ | 
					
						
							| 
									
										
										
										
											2020-11-12 17:05:38 +00:00
										 |  |  |                 '  <br>' + \ | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |                 translate[msg_str1] | 
					
						
							|  |  |  |             info_form += \ | 
					
						
							| 
									
										
										
										
											2020-11-12 17:05:38 +00:00
										 |  |  |                 '  <textarea id="message" ' + \ | 
					
						
							| 
									
										
										
										
											2022-06-05 10:42:58 +00:00
										 |  |  |                 'name="blocked" style="height:2000px" spellcheck="false">' + \ | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |                 blocked_str + '</textarea>\n' | 
					
						
							|  |  |  |             info_form += '</div>\n' | 
					
						
							|  |  |  |             info_shown = True | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-12 12:35:26 +00:00
										 |  |  |     filters_filename = dir_str + '/filters.txt' | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |     if os.path.isfile(filters_filename): | 
					
						
							| 
									
										
										
										
											2022-06-09 14:46:30 +00:00
										 |  |  |         with open(filters_filename, 'r', encoding='utf-8') as fp_filt: | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |             filtered_str = fp_filt.read() | 
					
						
							|  |  |  |             info_form += '<div class="container">\n' | 
					
						
							|  |  |  |             info_form += \ | 
					
						
							| 
									
										
										
										
											2020-12-19 11:33:38 +00:00
										 |  |  |                 '  <br><b>' + \ | 
					
						
							|  |  |  |                 translate['Filtered words'] + '</b>' | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |             info_form += \ | 
					
						
							| 
									
										
										
										
											2020-12-19 11:33:38 +00:00
										 |  |  |                 '  <textarea id="message" ' + \ | 
					
						
							| 
									
										
										
										
											2021-02-28 14:26:04 +00:00
										 |  |  |                 'name="filtered" style="height:700px" spellcheck="true">' + \ | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |                 filtered_str + '</textarea>\n' | 
					
						
							|  |  |  |             info_form += '</div>\n' | 
					
						
							|  |  |  |             info_shown = True | 
					
						
							| 
									
										
										
										
											2020-12-19 11:33:38 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |     if not info_shown: | 
					
						
							|  |  |  |         info_form += \ | 
					
						
							| 
									
										
										
										
											2020-11-12 17:05:38 +00:00
										 |  |  |             '<center><p>' + \ | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |             translate[msg_str2] + \ | 
					
						
							| 
									
										
										
										
											2020-12-20 11:00:17 +00:00
										 |  |  |             '</p></center>\n' | 
					
						
							| 
									
										
										
										
											2022-01-04 10:13:28 +00:00
										 |  |  |     info_form += html_footer() | 
					
						
							|  |  |  |     return info_form |