mirror of https://gitlab.com/bashrc2/epicyon
Move daemon profile functions to their own module
parent
3df5912f64
commit
6bacee0a3c
556
daemon_get.py
556
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,
|
||||
|
|
|
@ -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
|
Loading…
Reference in New Issue