diff --git a/daemon_get.py b/daemon_get.py index 50da00a71..c83b6cb39 100644 --- a/daemon_get.py +++ b/daemon_get.py @@ -13,10 +13,6 @@ import json import datetime import urllib.parse from shutil import copyfile -from skills import get_skills_from_list -from skills import no_of_actor_skills -from city import get_spoofed_city -from roles import get_actor_roles_list from languages import get_understood_languages from languages import get_reply_language from webfinger import webfinger_lookup @@ -46,8 +42,6 @@ from blocking import add_global_block from blocking import blocked_timeline_json from cache import get_person_from_cache from webapp_create_post import html_new_post -from webapp_profile import html_profile -from webapp_profile import html_edit_profile from webapp_conversation import html_conversation_view from webapp_moderation import html_account_info from webapp_calendar import html_calendar_delete_confirm @@ -116,7 +110,6 @@ from httpcodes import http_400 from httpcodes import http_503 from httpcodes import write2 from utils import is_public_post -from utils import get_occupation_skills from utils import is_public_post_from_url from utils import can_reply_to from utils import get_new_post_endpoints @@ -145,7 +138,6 @@ from utils import check_bad_path 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 save_person_qrcode from person import person_lookup from person import get_account_pub_key @@ -213,6 +205,10 @@ from daemon_get_newswire import edit_news_post2 from daemon_get_rss import get_rss2feed from daemon_get_rss import get_rss2site from daemon_get_rss import get_rss3feed +from daemon_get_profile import show_person_profile +from daemon_get_profile import show_skills +from daemon_get_profile import show_roles +from daemon_get_profile import edit_profile2 # Blogs can be longer, so don't show many per page MAX_POSTS_IN_BLOGS_FEED = 4 @@ -3611,12 +3607,12 @@ def daemon_http_get(self) -> None: return # edit profile in web interface - if _edit_profile2(self, calling_domain, self.path, - self.server.translate, - self.server.base_dir, - self.server.domain, - self.server.port, - cookie): + if edit_profile2(self, calling_domain, self.path, + self.server.translate, + self.server.base_dir, + self.server.domain, + self.server.port, + cookie): self.server.getreq_busy = False return @@ -3740,15 +3736,15 @@ def daemon_http_get(self) -> None: # roles on profile screen if self.path.endswith('/roles') and users_in_path: - if _show_roles(self, calling_domain, referer_domain, - self.path, - self.server.base_dir, - self.server.http_prefix, - self.server.domain, - getreq_start_time, - proxy_type, - cookie, self.server.debug, - curr_session): + if show_roles(self, calling_domain, referer_domain, + self.path, + self.server.base_dir, + self.server.http_prefix, + self.server.domain, + getreq_start_time, + proxy_type, + cookie, self.server.debug, + curr_session): self.server.getreq_busy = False return @@ -3758,15 +3754,15 @@ def daemon_http_get(self) -> None: # show skills on the profile page if self.path.endswith('/skills') and users_in_path: - if _show_skills(self, calling_domain, referer_domain, - self.path, - self.server.base_dir, - self.server.http_prefix, - self.server.domain, - getreq_start_time, - proxy_type, - cookie, self.server.debug, - curr_session): + if show_skills(self, calling_domain, referer_domain, + self.path, + self.server.base_dir, + self.server.http_prefix, + self.server.domain, + getreq_start_time, + proxy_type, + cookie, self.server.debug, + curr_session): self.server.getreq_busy = False return @@ -4235,18 +4231,18 @@ def daemon_http_get(self) -> None: self.server.debug) # look up a person - if _show_person_profile(self, authorized, - calling_domain, referer_domain, - self.path, - self.server.base_dir, - self.server.http_prefix, - self.server.domain, - self.server.onion_domain, - self.server.i2p_domain, - getreq_start_time, - proxy_type, - cookie, self.server.debug, - curr_session): + if show_person_profile(self, authorized, + calling_domain, referer_domain, + self.path, + self.server.base_dir, + self.server.http_prefix, + self.server.domain, + self.server.onion_domain, + self.server.i2p_domain, + getreq_start_time, + proxy_type, + cookie, self.server.debug, + curr_session): self.server.getreq_busy = False return @@ -6054,53 +6050,6 @@ def _show_known_crawlers(self, calling_domain: str, path: str, return True -def _edit_profile2(self, calling_domain: str, path: str, - translate: {}, base_dir: str, - domain: str, port: int, - cookie: str) -> bool: - """Show the edit profile screen - """ - if '/users/' in path and path.endswith('/editprofile'): - peertube_instances = self.server.peertube_instances - nickname = get_nickname_from_actor(path) - - access_keys = self.server.access_keys - if '/users/' in path: - if self.server.key_shortcuts.get(nickname): - access_keys = self.server.key_shortcuts[nickname] - - default_reply_interval_hrs = self.server.default_reply_interval_hrs - msg = html_edit_profile(self.server, translate, - base_dir, path, domain, port, - self.server.default_timeline, - self.server.theme_name, - peertube_instances, - self.server.text_mode_banner, - self.server.user_agents_blocked, - self.server.crawlers_allowed, - access_keys, - default_reply_interval_hrs, - self.server.cw_lists, - self.server.lists_enabled, - self.server.system_language, - self.server.min_images_for_accounts, - self.server.max_recent_posts, - self.server.reverse_sequence, - self.server.buy_sites, - self.server.block_military, - self.server.block_federated_endpoints) - if msg: - msg = msg.encode('utf-8') - msglen = len(msg) - set_headers(self, 'text/html', msglen, - cookie, calling_domain, False) - write2(self, msg) - else: - http_404(self, 105) - return True - return False - - def _edit_links2(self, calling_domain: str, path: str, translate: {}, base_dir: str, domain: str, cookie: str, theme: str) -> bool: @@ -6795,300 +6744,6 @@ def _show_replies_to_post(self, authorized: bool, return False -def _show_roles(self, calling_domain: str, referer_domain: str, - path: str, base_dir: str, http_prefix: str, - domain: str, getreq_start_time, - proxy_type: str, cookie: str, debug: str, - curr_session) -> bool: - """Show roles within profile screen - """ - named_status = path.split('/users/')[1] - if '/' not in named_status: - return False - - post_sections = named_status.split('/') - nickname = post_sections[0] - actor_filename = acct_dir(base_dir, nickname, domain) + '.json' - if not os.path.isfile(actor_filename): - return False - - actor_json = load_json(actor_filename) - if not actor_json: - return False - - if actor_json.get('hasOccupation'): - if request_http(self.headers, debug): - get_person = \ - person_lookup(domain, path.replace('/roles', ''), - base_dir) - if get_person: - default_timeline = \ - self.server.default_timeline - recent_posts_cache = \ - self.server.recent_posts_cache - cached_webfingers = \ - self.server.cached_webfingers - yt_replace_domain = \ - self.server.yt_replace_domain - twitter_replacement_domain = \ - self.server.twitter_replacement_domain - icons_as_buttons = \ - self.server.icons_as_buttons - - access_keys = self.server.access_keys - if self.server.key_shortcuts.get(nickname): - access_keys = self.server.key_shortcuts[nickname] - - roles_list = get_actor_roles_list(actor_json) - city = \ - get_spoofed_city(self.server.city, - base_dir, nickname, domain) - shared_items_federated_domains = \ - self.server.shared_items_federated_domains - - 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 - msg = \ - html_profile(self.server.signing_priv_key_pem, - self.server.rss_icon_at_top, - icons_as_buttons, - default_timeline, - recent_posts_cache, - self.server.max_recent_posts, - self.server.translate, - self.server.project_version, - base_dir, http_prefix, True, - get_person, 'roles', - curr_session, - cached_webfingers, - self.server.person_cache, - yt_replace_domain, - twitter_replacement_domain, - self.server.show_published_date_only, - self.server.newswire, - self.server.theme_name, - self.server.dormant_months, - self.server.peertube_instances, - self.server.allow_local_network_access, - self.server.text_mode_banner, - self.server.debug, - access_keys, city, - self.server.system_language, - self.server.max_like_count, - shared_items_federated_domains, - roles_list, - None, None, self.server.cw_lists, - self.server.lists_enabled, - self.server.content_license_url, - timezone, bold_reading, - self.server.buy_sites, None, - self.server.max_shares_on_profile, - self.server.sites_unavailable, - self.server.no_of_books, - self.server.auto_cw_cache) - msg = msg.encode('utf-8') - msglen = len(msg) - set_headers(self, 'text/html', msglen, - cookie, calling_domain, False) - write2(self, msg) - fitness_performance(getreq_start_time, self.server.fitness, - '_GET', '_show_roles', debug) - else: - if secure_mode(curr_session, proxy_type, False, - self.server, self.headers, self.path): - roles_list = get_actor_roles_list(actor_json) - msg_str = json.dumps(roles_list, ensure_ascii=False) - msg_str = convert_domains(calling_domain, - referer_domain, - msg_str, http_prefix, - domain, - self.server.onion_domain, - self.server.i2p_domain) - msg = msg_str.encode('utf-8') - msglen = len(msg) - protocol_str = \ - get_json_content_from_accept(self.headers['Accept']) - set_headers(self, protocol_str, msglen, - None, calling_domain, False) - write2(self, msg) - fitness_performance(getreq_start_time, self.server.fitness, - '_GET', '_show_roles json', debug) - else: - http_404(self, 65) - return True - return False - - -def _show_skills(self, calling_domain: str, referer_domain: str, - path: str, base_dir: str, http_prefix: str, - domain: str, getreq_start_time, proxy_type: str, - cookie: str, debug: str, curr_session) -> bool: - """Show skills on the profile screen - """ - named_status = path.split('/users/')[1] - if '/' in named_status: - post_sections = named_status.split('/') - nickname = post_sections[0] - actor_filename = acct_dir(base_dir, nickname, domain) + '.json' - if os.path.isfile(actor_filename): - actor_json = load_json(actor_filename) - if actor_json: - if no_of_actor_skills(actor_json) > 0: - if request_http(self.headers, self.server.debug): - get_person = \ - person_lookup(domain, - path.replace('/skills', ''), - base_dir) - if get_person: - default_timeline = \ - self.server.default_timeline - recent_posts_cache = \ - self.server.recent_posts_cache - cached_webfingers = \ - self.server.cached_webfingers - yt_replace_domain = \ - self.server.yt_replace_domain - twitter_replacement_domain = \ - self.server.twitter_replacement_domain - show_published_date_only = \ - self.server.show_published_date_only - icons_as_buttons = \ - self.server.icons_as_buttons - allow_local_network_access = \ - self.server.allow_local_network_access - access_keys = self.server.access_keys - if self.server.key_shortcuts.get(nickname): - access_keys = \ - self.server.key_shortcuts[nickname] - actor_skills_list = \ - get_occupation_skills(actor_json) - skills = \ - get_skills_from_list(actor_skills_list) - city = get_spoofed_city(self.server.city, - base_dir, - nickname, domain) - shared_items_fed_domains = \ - self.server.shared_items_federated_domains - signing_priv_key_pem = \ - self.server.signing_priv_key_pem - content_license_url = \ - self.server.content_license_url - peertube_instances = \ - self.server.peertube_instances - timezone = None - nick = nickname - if self.server.account_timezone.get(nick): - timezone = \ - self.server.account_timezone.get(nick) - bold_reading = False - if self.server.bold_reading.get(nick): - bold_reading = True - max_shares_on_profile = \ - self.server.max_shares_on_profile - msg = \ - html_profile(signing_priv_key_pem, - self.server.rss_icon_at_top, - icons_as_buttons, - default_timeline, - recent_posts_cache, - self.server.max_recent_posts, - self.server.translate, - self.server.project_version, - base_dir, http_prefix, True, - get_person, 'skills', - curr_session, - cached_webfingers, - self.server.person_cache, - yt_replace_domain, - twitter_replacement_domain, - show_published_date_only, - self.server.newswire, - self.server.theme_name, - self.server.dormant_months, - peertube_instances, - allow_local_network_access, - self.server.text_mode_banner, - self.server.debug, - access_keys, city, - self.server.system_language, - self.server.max_like_count, - shared_items_fed_domains, - skills, - None, None, - self.server.cw_lists, - self.server.lists_enabled, - content_license_url, - timezone, bold_reading, - self.server.buy_sites, - None, - max_shares_on_profile, - self.server.sites_unavailable, - self.server.no_of_books, - self.server.auto_cw_cache) - msg = msg.encode('utf-8') - msglen = len(msg) - set_headers(self, 'text/html', msglen, - cookie, calling_domain, - False) - write2(self, msg) - fitness_performance(getreq_start_time, - self.server.fitness, - '_GET', '_show_skills', - self.server.debug) - else: - if secure_mode(curr_session, - proxy_type, False, - self.server, - self.headers, - self.path): - actor_skills_list = \ - get_occupation_skills(actor_json) - skills = \ - get_skills_from_list(actor_skills_list) - msg_str = json.dumps(skills, - ensure_ascii=False) - 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) - 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_skills json', - debug) - else: - http_404(self, 66) - return True - actor = path.replace('/skills', '') - actor_absolute = \ - get_instance_url(calling_domain, - self.server.http_prefix, - self.server.domain_full, - self.server.onion_domain, - self.server.i2p_domain) + \ - actor - redirect_headers(self, actor_absolute, cookie, calling_domain) - return True - - def _show_notify_post(self, authorized: bool, calling_domain: str, referer_domain: str, path: str, @@ -7232,137 +6887,6 @@ def _show_individual_post(self, ssml_getreq: bool, authorized: bool, return result -def _show_person_profile(self, authorized: bool, - calling_domain: str, - referer_domain: str, path: str, - base_dir: str, http_prefix: str, - domain: str, - onion_domain: str, i2p_domain: str, - getreq_start_time, - proxy_type: str, cookie: str, - debug: str, - curr_session) -> bool: - """Shows the profile for a person - """ - # look up a person - actor_json = person_lookup(domain, path, base_dir) - if not actor_json: - return False - add_alternate_domains(actor_json, domain, onion_domain, i2p_domain) - if request_http(self.headers, debug): - curr_session = \ - establish_session("showPersonProfile", - curr_session, proxy_type, - self.server) - if not curr_session: - http_404(self, 86) - return True - - access_keys = self.server.access_keys - city = None - timezone = None - if '/users/' in path: - nickname = path.split('/users/')[1] - if '/' in nickname: - nickname = nickname.split('/')[0] - if self.server.key_shortcuts.get(nickname): - access_keys = \ - self.server.key_shortcuts[nickname] - - city = get_spoofed_city(self.server.city, - base_dir, nickname, domain) - 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 - max_shares_on_profile = \ - self.server.max_shares_on_profile - sites_unavailable = \ - self.server.sites_unavailable - msg = \ - html_profile(self.server.signing_priv_key_pem, - self.server.rss_icon_at_top, - self.server.icons_as_buttons, - self.server.default_timeline, - self.server.recent_posts_cache, - self.server.max_recent_posts, - self.server.translate, - self.server.project_version, - base_dir, http_prefix, authorized, - actor_json, 'posts', curr_session, - self.server.cached_webfingers, - self.server.person_cache, - self.server.yt_replace_domain, - self.server.twitter_replacement_domain, - self.server.show_published_date_only, - self.server.newswire, - self.server.theme_name, - self.server.dormant_months, - self.server.peertube_instances, - self.server.allow_local_network_access, - self.server.text_mode_banner, - self.server.debug, - access_keys, city, - self.server.system_language, - self.server.max_like_count, - self.server.shared_items_federated_domains, - None, None, None, - self.server.cw_lists, - self.server.lists_enabled, - self.server.content_license_url, - timezone, bold_reading, - self.server.buy_sites, - None, - max_shares_on_profile, - sites_unavailable, - self.server.no_of_books, - self.server.auto_cw_cache).encode('utf-8') - msglen = len(msg) - set_headers(self, 'text/html', msglen, - cookie, calling_domain, False) - write2(self, msg) - fitness_performance(getreq_start_time, - self.server.fitness, - '_GET', '_show_person_profile', - debug) - if self.server.debug: - print('DEBUG: html actor sent') - else: - if secure_mode(curr_session, proxy_type, False, - self.server, self.headers, self.path): - accept_str = self.headers['Accept'] - msg_str = json.dumps(actor_json, ensure_ascii=False) - msg_str = convert_domains(calling_domain, - referer_domain, - msg_str, http_prefix, - domain, - self.server.onion_domain, - self.server.i2p_domain) - msg = msg_str.encode('utf-8') - msglen = len(msg) - if 'application/ld+json' in accept_str: - set_headers(self, 'application/ld+json', msglen, - cookie, calling_domain, False) - elif 'application/jrd+json' in accept_str: - set_headers(self, 'application/jrd+json', msglen, - cookie, calling_domain, False) - else: - set_headers(self, 'application/activity+json', msglen, - cookie, calling_domain, False) - write2(self, msg) - fitness_performance(getreq_start_time, - self.server.fitness, - '_GET', '_show_person_profile json', - self.server.debug) - if self.server.debug: - print('DEBUG: json actor sent') - else: - http_404(self, 87) - return True - - def _show_post_from_file(self, post_filename: str, liked_by: str, react_by: str, react_emoji: str, authorized: bool, diff --git a/daemon_get_profile.py b/daemon_get_profile.py new file mode 100644 index 000000000..0370a9d03 --- /dev/null +++ b/daemon_get_profile.py @@ -0,0 +1,506 @@ +__filename__ = "daemon_get_profile.py" +__author__ = "Bob Mottram" +__license__ = "AGPL3+" +__version__ = "1.5.0" +__maintainer__ = "Bob Mottram" +__email__ = "bob@libreserver.org" +__status__ = "Production" +__module_group__ = "Core" + +import os +import json +from roles import get_actor_roles_list +from skills import no_of_actor_skills +from skills import get_skills_from_list +from utils import get_nickname_from_actor +from utils import load_json +from utils import get_json_content_from_accept +from utils import get_occupation_skills +from utils import get_instance_url +from utils import acct_dir +from utils import convert_domains +from httpcodes import write2 +from httpcodes import http_404 +from person import person_lookup +from person import add_alternate_domains +from httprequests import request_http +from httpheaders import redirect_headers +from httpheaders import set_headers +from session import establish_session +from city import get_spoofed_city +from webapp_profile import html_profile +from webapp_profile import html_edit_profile +from fitnessFunctions import fitness_performance +from securemode import secure_mode + + +def show_person_profile(self, authorized: bool, + calling_domain: str, + referer_domain: str, path: str, + base_dir: str, http_prefix: str, + domain: str, + onion_domain: str, i2p_domain: str, + getreq_start_time, + proxy_type: str, cookie: str, + debug: str, + curr_session) -> bool: + """Shows the profile for a person + """ + # look up a person + actor_json = person_lookup(domain, path, base_dir) + if not actor_json: + return False + add_alternate_domains(actor_json, domain, onion_domain, i2p_domain) + if request_http(self.headers, debug): + curr_session = \ + establish_session("showPersonProfile", + curr_session, proxy_type, + self.server) + if not curr_session: + http_404(self, 86) + return True + + access_keys = self.server.access_keys + city = None + timezone = None + if '/users/' in path: + nickname = path.split('/users/')[1] + if '/' in nickname: + nickname = nickname.split('/')[0] + if self.server.key_shortcuts.get(nickname): + access_keys = \ + self.server.key_shortcuts[nickname] + + city = get_spoofed_city(self.server.city, + base_dir, nickname, domain) + 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 + max_shares_on_profile = \ + self.server.max_shares_on_profile + sites_unavailable = \ + self.server.sites_unavailable + msg = \ + html_profile(self.server.signing_priv_key_pem, + self.server.rss_icon_at_top, + self.server.icons_as_buttons, + self.server.default_timeline, + self.server.recent_posts_cache, + self.server.max_recent_posts, + self.server.translate, + self.server.project_version, + base_dir, http_prefix, authorized, + actor_json, 'posts', curr_session, + self.server.cached_webfingers, + self.server.person_cache, + self.server.yt_replace_domain, + self.server.twitter_replacement_domain, + self.server.show_published_date_only, + self.server.newswire, + self.server.theme_name, + self.server.dormant_months, + self.server.peertube_instances, + self.server.allow_local_network_access, + self.server.text_mode_banner, + self.server.debug, + access_keys, city, + self.server.system_language, + self.server.max_like_count, + self.server.shared_items_federated_domains, + None, None, None, + self.server.cw_lists, + self.server.lists_enabled, + self.server.content_license_url, + timezone, bold_reading, + self.server.buy_sites, + None, + max_shares_on_profile, + sites_unavailable, + self.server.no_of_books, + self.server.auto_cw_cache).encode('utf-8') + msglen = len(msg) + set_headers(self, 'text/html', msglen, + cookie, calling_domain, False) + write2(self, msg) + fitness_performance(getreq_start_time, + self.server.fitness, + '_GET', '_show_person_profile', + debug) + if self.server.debug: + print('DEBUG: html actor sent') + else: + if secure_mode(curr_session, proxy_type, False, + self.server, self.headers, self.path): + accept_str = self.headers['Accept'] + msg_str = json.dumps(actor_json, ensure_ascii=False) + msg_str = convert_domains(calling_domain, + referer_domain, + msg_str, http_prefix, + domain, + self.server.onion_domain, + self.server.i2p_domain) + msg = msg_str.encode('utf-8') + msglen = len(msg) + if 'application/ld+json' in accept_str: + set_headers(self, 'application/ld+json', msglen, + cookie, calling_domain, False) + elif 'application/jrd+json' in accept_str: + set_headers(self, 'application/jrd+json', msglen, + cookie, calling_domain, False) + else: + set_headers(self, 'application/activity+json', msglen, + cookie, calling_domain, False) + write2(self, msg) + fitness_performance(getreq_start_time, + self.server.fitness, + '_GET', '_show_person_profile json', + self.server.debug) + if self.server.debug: + print('DEBUG: json actor sent') + else: + http_404(self, 87) + return True + + +def show_roles(self, calling_domain: str, referer_domain: str, + path: str, base_dir: str, http_prefix: str, + domain: str, getreq_start_time, + proxy_type: str, cookie: str, debug: str, + curr_session) -> bool: + """Show roles within profile screen + """ + named_status = path.split('/users/')[1] + if '/' not in named_status: + return False + + post_sections = named_status.split('/') + nickname = post_sections[0] + actor_filename = acct_dir(base_dir, nickname, domain) + '.json' + if not os.path.isfile(actor_filename): + return False + + actor_json = load_json(actor_filename) + if not actor_json: + return False + + if actor_json.get('hasOccupation'): + if request_http(self.headers, debug): + get_person = \ + person_lookup(domain, path.replace('/roles', ''), + base_dir) + if get_person: + default_timeline = \ + self.server.default_timeline + recent_posts_cache = \ + self.server.recent_posts_cache + cached_webfingers = \ + self.server.cached_webfingers + yt_replace_domain = \ + self.server.yt_replace_domain + twitter_replacement_domain = \ + self.server.twitter_replacement_domain + icons_as_buttons = \ + self.server.icons_as_buttons + + access_keys = self.server.access_keys + if self.server.key_shortcuts.get(nickname): + access_keys = self.server.key_shortcuts[nickname] + + roles_list = get_actor_roles_list(actor_json) + city = \ + get_spoofed_city(self.server.city, + base_dir, nickname, domain) + shared_items_federated_domains = \ + self.server.shared_items_federated_domains + + 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 + msg = \ + html_profile(self.server.signing_priv_key_pem, + self.server.rss_icon_at_top, + icons_as_buttons, + default_timeline, + recent_posts_cache, + self.server.max_recent_posts, + self.server.translate, + self.server.project_version, + base_dir, http_prefix, True, + get_person, 'roles', + curr_session, + cached_webfingers, + self.server.person_cache, + yt_replace_domain, + twitter_replacement_domain, + self.server.show_published_date_only, + self.server.newswire, + self.server.theme_name, + self.server.dormant_months, + self.server.peertube_instances, + self.server.allow_local_network_access, + self.server.text_mode_banner, + self.server.debug, + access_keys, city, + self.server.system_language, + self.server.max_like_count, + shared_items_federated_domains, + roles_list, + None, None, self.server.cw_lists, + self.server.lists_enabled, + self.server.content_license_url, + timezone, bold_reading, + self.server.buy_sites, None, + self.server.max_shares_on_profile, + self.server.sites_unavailable, + self.server.no_of_books, + self.server.auto_cw_cache) + msg = msg.encode('utf-8') + msglen = len(msg) + set_headers(self, 'text/html', msglen, + cookie, calling_domain, False) + write2(self, msg) + fitness_performance(getreq_start_time, self.server.fitness, + '_GET', '_show_roles', debug) + else: + if secure_mode(curr_session, proxy_type, False, + self.server, self.headers, self.path): + roles_list = get_actor_roles_list(actor_json) + msg_str = json.dumps(roles_list, ensure_ascii=False) + msg_str = convert_domains(calling_domain, + referer_domain, + msg_str, http_prefix, + domain, + self.server.onion_domain, + self.server.i2p_domain) + msg = msg_str.encode('utf-8') + msglen = len(msg) + protocol_str = \ + get_json_content_from_accept(self.headers['Accept']) + set_headers(self, protocol_str, msglen, + None, calling_domain, False) + write2(self, msg) + fitness_performance(getreq_start_time, self.server.fitness, + '_GET', '_show_roles json', debug) + else: + http_404(self, 65) + return True + return False + + +def show_skills(self, calling_domain: str, referer_domain: str, + path: str, base_dir: str, http_prefix: str, + domain: str, getreq_start_time, proxy_type: str, + cookie: str, debug: str, curr_session) -> bool: + """Show skills on the profile screen + """ + named_status = path.split('/users/')[1] + if '/' in named_status: + post_sections = named_status.split('/') + nickname = post_sections[0] + actor_filename = acct_dir(base_dir, nickname, domain) + '.json' + if os.path.isfile(actor_filename): + actor_json = load_json(actor_filename) + if actor_json: + if no_of_actor_skills(actor_json) > 0: + if request_http(self.headers, self.server.debug): + get_person = \ + person_lookup(domain, + path.replace('/skills', ''), + base_dir) + if get_person: + default_timeline = \ + self.server.default_timeline + recent_posts_cache = \ + self.server.recent_posts_cache + cached_webfingers = \ + self.server.cached_webfingers + yt_replace_domain = \ + self.server.yt_replace_domain + twitter_replacement_domain = \ + self.server.twitter_replacement_domain + show_published_date_only = \ + self.server.show_published_date_only + icons_as_buttons = \ + self.server.icons_as_buttons + allow_local_network_access = \ + self.server.allow_local_network_access + access_keys = self.server.access_keys + if self.server.key_shortcuts.get(nickname): + access_keys = \ + self.server.key_shortcuts[nickname] + actor_skills_list = \ + get_occupation_skills(actor_json) + skills = \ + get_skills_from_list(actor_skills_list) + city = get_spoofed_city(self.server.city, + base_dir, + nickname, domain) + shared_items_fed_domains = \ + self.server.shared_items_federated_domains + signing_priv_key_pem = \ + self.server.signing_priv_key_pem + content_license_url = \ + self.server.content_license_url + peertube_instances = \ + self.server.peertube_instances + timezone = None + nick = nickname + if self.server.account_timezone.get(nick): + timezone = \ + self.server.account_timezone.get(nick) + bold_reading = False + if self.server.bold_reading.get(nick): + bold_reading = True + max_shares_on_profile = \ + self.server.max_shares_on_profile + msg = \ + html_profile(signing_priv_key_pem, + self.server.rss_icon_at_top, + icons_as_buttons, + default_timeline, + recent_posts_cache, + self.server.max_recent_posts, + self.server.translate, + self.server.project_version, + base_dir, http_prefix, True, + get_person, 'skills', + curr_session, + cached_webfingers, + self.server.person_cache, + yt_replace_domain, + twitter_replacement_domain, + show_published_date_only, + self.server.newswire, + self.server.theme_name, + self.server.dormant_months, + peertube_instances, + allow_local_network_access, + self.server.text_mode_banner, + self.server.debug, + access_keys, city, + self.server.system_language, + self.server.max_like_count, + shared_items_fed_domains, + skills, + None, None, + self.server.cw_lists, + self.server.lists_enabled, + content_license_url, + timezone, bold_reading, + self.server.buy_sites, + None, + max_shares_on_profile, + self.server.sites_unavailable, + self.server.no_of_books, + self.server.auto_cw_cache) + msg = msg.encode('utf-8') + msglen = len(msg) + set_headers(self, 'text/html', msglen, + cookie, calling_domain, + False) + write2(self, msg) + fitness_performance(getreq_start_time, + self.server.fitness, + '_GET', '_show_skills', + self.server.debug) + else: + if secure_mode(curr_session, + proxy_type, False, + self.server, + self.headers, + self.path): + actor_skills_list = \ + get_occupation_skills(actor_json) + skills = \ + get_skills_from_list(actor_skills_list) + msg_str = json.dumps(skills, + ensure_ascii=False) + 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) + 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_skills json', + debug) + else: + http_404(self, 66) + return True + actor = path.replace('/skills', '') + actor_absolute = \ + get_instance_url(calling_domain, + self.server.http_prefix, + self.server.domain_full, + self.server.onion_domain, + self.server.i2p_domain) + \ + actor + redirect_headers(self, actor_absolute, cookie, calling_domain) + return True + + +def edit_profile2(self, calling_domain: str, path: str, + translate: {}, base_dir: str, + domain: str, port: int, + cookie: str) -> bool: + """Show the edit profile screen + """ + if '/users/' in path and path.endswith('/editprofile'): + peertube_instances = self.server.peertube_instances + nickname = get_nickname_from_actor(path) + + access_keys = self.server.access_keys + if '/users/' in path: + if self.server.key_shortcuts.get(nickname): + access_keys = self.server.key_shortcuts[nickname] + + default_reply_interval_hrs = self.server.default_reply_interval_hrs + msg = html_edit_profile(self.server, translate, + base_dir, path, domain, port, + self.server.default_timeline, + self.server.theme_name, + peertube_instances, + self.server.text_mode_banner, + self.server.user_agents_blocked, + self.server.crawlers_allowed, + access_keys, + default_reply_interval_hrs, + self.server.cw_lists, + self.server.lists_enabled, + self.server.system_language, + self.server.min_images_for_accounts, + self.server.max_recent_posts, + self.server.reverse_sequence, + self.server.buy_sites, + self.server.block_military, + self.server.block_federated_endpoints) + if msg: + msg = msg.encode('utf-8') + msglen = len(msg) + set_headers(self, 'text/html', msglen, + cookie, calling_domain, False) + write2(self, msg) + else: + http_404(self, 105) + return True + return False