import re
import sys
import json
from Config import config
from Plugin import PluginManager
from Crypt import CryptBitcoin
from . import UserPlugin
try:
local_master_addresses = set(json.load(open("%s/users.json" % config.data_dir)).keys()) # Users in users.json
except Exception as err:
local_master_addresses = set()
@PluginManager.registerTo("UiRequest")
class UiRequestPlugin(object):
def __init__(self, *args, **kwargs):
self.user_manager = sys.modules["User.UserManager"].user_manager
super(UiRequestPlugin, self).__init__(*args, **kwargs)
# Create new user and inject user welcome message if necessary
# Return: Html body also containing the injection
def actionWrapper(self, path, extra_headers=None):
match = re.match("/(?P
[A-Za-z0-9\._-]+)(?P/.*|$)", path)
if not match:
return False
inner_path = match.group("inner_path").lstrip("/")
html_request = "." not in inner_path or inner_path.endswith(".html") # Only inject html to html requests
user_created = False
if html_request:
user = self.getCurrentUser() # Get user from cookie
if not user: # No user found by cookie
user = self.user_manager.create()
user_created = True
else:
user = None
# Disable new site creation if --multiuser_no_new_sites enabled
if config.multiuser_no_new_sites:
path_parts = self.parsePath(path)
if not self.server.site_manager.get(match.group("address")) and (not user or user.master_address not in local_master_addresses):
self.sendHeader(404)
return self.formatError("Not Found", "Adding new sites disabled on this proxy", details=False)
if user_created:
if not extra_headers:
extra_headers = {}
extra_headers['Set-Cookie'] = "master_address=%s;path=/;max-age=2592000;" % user.master_address # = 30 days
loggedin = self.get.get("login") == "done"
back_generator = super(UiRequestPlugin, self).actionWrapper(path, extra_headers) # Get the wrapper frame output
if not back_generator: # Wrapper error or not string returned, injection not possible
return False
elif loggedin:
back = next(back_generator)
inject_html = """