mirror of https://gitlab.com/bashrc2/epicyon
106 lines
3.9 KiB
Python
106 lines
3.9 KiB
Python
__filename__ = "daemon_post_image.py"
|
|
__author__ = "Bob Mottram"
|
|
__license__ = "AGPL3+"
|
|
__version__ = "1.5.0"
|
|
__maintainer__ = "Bob Mottram"
|
|
__email__ = "bob@libreserver.org"
|
|
__status__ = "Production"
|
|
__module_group__ = "Core POST"
|
|
|
|
import errno
|
|
import urllib.parse
|
|
from socket import error as SocketError
|
|
from httpheaders import redirect_headers
|
|
from utils import acct_dir
|
|
from utils import save_json
|
|
|
|
|
|
def keyboard_shortcuts(self, calling_domain: str, cookie: str,
|
|
base_dir: str, http_prefix: str, nickname: str,
|
|
domain: str, domain_full: str,
|
|
onion_domain: str, i2p_domain: str,
|
|
access_keys2: {}, default_timeline: str,
|
|
access_keys: {}, key_shortcuts: {}) -> None:
|
|
"""Receive POST from webapp_accesskeys
|
|
"""
|
|
users_path = '/users/' + nickname
|
|
origin_path_str = \
|
|
http_prefix + '://' + domain_full + users_path + '/' + \
|
|
default_timeline
|
|
length = int(self.headers['Content-length'])
|
|
|
|
try:
|
|
access_keys_params = self.rfile.read(length).decode('utf-8')
|
|
except SocketError as ex:
|
|
if ex.errno == errno.ECONNRESET:
|
|
print('EX: POST access_keys_params ' +
|
|
'connection reset by peer')
|
|
else:
|
|
print('EX: POST access_keys_params socket error')
|
|
self.send_response(400)
|
|
self.end_headers()
|
|
self.server.postreq_busy = False
|
|
return
|
|
except ValueError as ex:
|
|
print('EX: POST access_keys_params rfile.read failed, ' +
|
|
str(ex))
|
|
self.send_response(400)
|
|
self.end_headers()
|
|
self.server.postreq_busy = False
|
|
return
|
|
access_keys_params = \
|
|
urllib.parse.unquote_plus(access_keys_params)
|
|
|
|
# key shortcuts screen, back button
|
|
# See html_access_keys
|
|
if 'submitAccessKeysCancel=' in access_keys_params or \
|
|
'submitAccessKeys=' not in access_keys_params:
|
|
if calling_domain.endswith('.onion') and onion_domain:
|
|
origin_path_str = \
|
|
'http://' + onion_domain + users_path + '/' + \
|
|
default_timeline
|
|
elif calling_domain.endswith('.i2p') and i2p_domain:
|
|
origin_path_str = \
|
|
'http://' + i2p_domain + users_path + \
|
|
'/' + default_timeline
|
|
redirect_headers(self, origin_path_str, cookie, calling_domain, 303)
|
|
self.server.postreq_busy = False
|
|
return
|
|
|
|
save_keys = False
|
|
access_keys_template = access_keys
|
|
for variable_name, _ in access_keys_template.items():
|
|
if not access_keys2.get(variable_name):
|
|
access_keys2[variable_name] = \
|
|
access_keys_template[variable_name]
|
|
|
|
variable_name2 = variable_name.replace(' ', '_')
|
|
if variable_name2 + '=' in access_keys_params:
|
|
new_key = access_keys_params.split(variable_name2 + '=')[1]
|
|
if '&' in new_key:
|
|
new_key = new_key.split('&')[0]
|
|
if new_key:
|
|
if len(new_key) > 1:
|
|
new_key = new_key[0]
|
|
if new_key != access_keys2[variable_name]:
|
|
access_keys2[variable_name] = new_key
|
|
save_keys = True
|
|
|
|
if save_keys:
|
|
access_keys_filename = \
|
|
acct_dir(base_dir, nickname, domain) + '/access_keys.json'
|
|
save_json(access_keys2, access_keys_filename)
|
|
if not key_shortcuts.get(nickname):
|
|
key_shortcuts[nickname] = access_keys2.copy()
|
|
|
|
# redirect back from key shortcuts screen
|
|
if calling_domain.endswith('.onion') and onion_domain:
|
|
origin_path_str = \
|
|
'http://' + onion_domain + users_path + '/' + default_timeline
|
|
elif calling_domain.endswith('.i2p') and i2p_domain:
|
|
origin_path_str = \
|
|
'http://' + i2p_domain + users_path + '/' + default_timeline
|
|
redirect_headers(self, origin_path_str, cookie, calling_domain, 303)
|
|
self.server.postreq_busy = False
|
|
return
|