def main(): # change path to launcher global __file__ __file__ = os.path.abspath(__file__) if os.path.islink(__file__): __file__ = getattr(os, 'readlink', lambda x: x)(__file__) os.chdir(os.path.dirname(os.path.abspath(__file__))) web_control.confirm_xxnet_exit() setup_win_python.check_setup() module_init.start_all_auto() web_control.start() if config.get(["modules", "launcher", "show_systray"], 1): sys_tray.serve_forever() else: while True: time.sleep(100) module_init.stop_all() sys.exit()
def main(): # change path to launcher global __file__ __file__ = os.path.abspath(__file__) if os.path.islink(__file__): __file__ = getattr(os, "readlink", lambda x: x)(__file__) os.chdir(os.path.dirname(os.path.abspath(__file__))) web_control.confirm_xxnet_exit() setup_win_python.check_setup() module_init.start_all_auto() web_control.start() if has_desktop and config.get(["modules", "launcher", "popup_webui"], 1) == 1: webbrowser.open("http://127.0.0.1:8085/") update.start() if config.get(["modules", "launcher", "show_systray"], 1): sys_tray.serve_forever() else: while True: time.sleep(100) module_init.stop_all() sys.exit()
def main(): # change path to launcher global __file__ __file__ = os.path.abspath(__file__) if os.path.islink(__file__): __file__ = getattr(os, 'readlink', lambda x: x)(__file__) os.chdir(os.path.dirname(os.path.abspath(__file__))) launcher_log.info("start XX-Net %s", update_from_github.current_version()) web_control.confirm_xxnet_exit() setup_win_python.check_setup() module_init.start_all_auto() web_control.start() if has_desktop and config.get(["modules", "launcher", "popup_webui"], 1) == 1: host_port = config.get(["modules", "launcher", "control_port"], 8085) webbrowser.open("http://127.0.0.1:%s/" % host_port) update.start() if config.get(["modules", "launcher", "show_systray"], 1): sys_tray.serve_forever() else: while True: time.sleep(100) module_init.stop_all() sys.exit()
def do_GET(self): try: refer = self.headers.getheader('Referer') netloc = urlparse.urlparse(refer).netloc if not netloc.startswith("127.0.0.1") and not netloc.startswitch("localhost"): logging.warn("web control ref:%s refuse", netloc) return except: pass logging.debug ('launcher web_control %s "%s %s ', self.address_string(), self.command, self.path) # check for '..', which will leak file if re.search(r'(\.{2})', self.path) is not None: self.wfile.write(b'HTTP/1.1 404\r\n\r\n') logging.warn('%s %s %s haking', self.address_string(), self.command, self.path ) return url_path = urlparse.urlparse(self.path).path if url_path == '/': return self.req_index_handler() if len(url_path.split('/')) >= 3 and url_path.split('/')[1] == "modules": module = url_path.split('/')[2] #config.load() modules_versoin = config.get(['modules', module, 'current_version'], None) file_path = os.path.join(root_path, module, modules_versoin, url_path.split('/')[3:].join('/')) else: file_path = os.path.join(current_path, 'web_ui' + url_path) if os.path.isfile(file_path): if file_path.endswith('.js'): mimetype = 'application/javascript' elif file_path.endswith('.css'): mimetype = 'text/css' elif file_path.endswith('.html'): mimetype = 'text/html' elif file_path.endswith('.jpg'): mimetype = 'image/jpeg' elif file_path.endswith('.png'): mimetype = 'image/png' else: mimetype = 'text/plain' self.send_file(file_path, mimetype) elif url_path == '/config': self.req_config_handler() elif url_path == '/init_module': self.req_init_module_handler() elif url_path == '/quit': self.send_response('text/html', '{"status":"success"}') module_init.stop_all() os._exit(0) elif url_path == '/restart': self.send_response('text/html', '{"status":"success"}') update_from_github.restart_xxnet() else: self.wfile.write(b'HTTP/1.1 404\r\nContent-Type: text/plain\r\nConnection: close\r\n\r\n404 Not Found') logging.info('%s "%s %s HTTP/1.1" 404 -', self.address_string(), self.command, self.path)
def do_GET(self): try: refer = self.headers.getheader("Referer") netloc = urlparse.urlparse(refer).netloc if not netloc.startswith("127.0.0.1") and not netloc.startswitch("localhost"): logging.warn("web control ref:%s refuse", netloc) return except: pass logging.debug("launcher web_control %s %s %s ", self.address_string(), self.command, self.path) # check for '..', which will leak file if re.search(r"(\.{2})", self.path) is not None: self.wfile.write(b"HTTP/1.1 404\r\n\r\n") logging.warn("%s %s %s haking", self.address_string(), self.command, self.path) return url_path = urlparse.urlparse(self.path).path if url_path == "/": return self.req_index_handler() if len(url_path.split("/")) >= 3 and url_path.split("/")[1] == "modules": module = url_path.split("/")[2] # config.load() modules_version = config.get(["modules", module, "current_version"], None) file_path = os.path.join(root_path, module, modules_version, url_path.split("/")[3:].join("/")) else: file_path = os.path.join(current_path, "web_ui" + url_path) if os.path.isfile(file_path): if file_path.endswith(".js"): mimetype = "application/javascript" elif file_path.endswith(".css"): mimetype = "text/css" elif file_path.endswith(".html"): mimetype = "text/html" elif file_path.endswith(".jpg"): mimetype = "image/jpeg" elif file_path.endswith(".png"): mimetype = "image/png" else: mimetype = "text/plain" self.send_file(file_path, mimetype) elif url_path == "/config": self.req_config_handler() elif url_path == "/download": self.req_download_handler() elif url_path == "/init_module": self.req_init_module_handler() elif url_path == "/quit": self.send_response("text/html", '{"status":"success"}') module_init.stop_all() os._exit(0) elif url_path == "/restart": self.send_response("text/html", '{"status":"success"}') update_from_github.restart_xxnet() else: self.wfile.write(b"HTTP/1.1 404\r\nContent-Type: text/plain\r\nConnection: close\r\n\r\n404 Not Found") logging.info('%s "%s %s HTTP/1.1" 404 -', self.address_string(), self.command, self.path)
def on_quit(self, widget, data=None): proxy_setting = config.get(["modules", "launcher", "proxy"], "disable") if proxy_setting != "disable": win32_proxy_manager.disable_proxy() module_init.stop_all() nid = win32_adapter.NotifyData(self.systray._hwnd, 0) win32_adapter.Shell_NotifyIcon(2, ctypes.byref(nid)) os._exit(0)
def on_quit(self, widget, data=None): if self.get_proxy_state() != "unknown": win32_proxy_manager.disable_proxy() module_init.stop_all() nid = win32_adapter.NotifyData(self.systray._hwnd, 0) win32_adapter.Shell_NotifyIcon(2, ctypes.byref(nid)) os._exit(0)
def uncaught_exception_handler(etype, value, tb): if etype == KeyboardInterrupt: # Ctrl + C on console xlog.warn("KeyboardInterrupt, exiting...") module_init.stop_all() os._exit(0) exc_info = ''.join(traceback.format_exception(etype, value, tb)) print(("uncaught Exception:\n" + exc_info)) xlog.error("uncaught Exception, type=%s value=%s traceback:%s", etype, value, exc_info)
def do_GET(self): try: refer = self.headers.getheader('Referer') netloc = urlparse.urlparse(refer).netloc if not netloc.startswith("127.0.0.1") and not netloc.startswitch("localhost"): logging.warn("web control ref:%s refuse", netloc) return except: pass logging.debug ('launcher web_control %s "%s %s ', self.address_string(), self.command, self.path) # check for '..', which will leak file if re.search(r'(\.{2})', self.path) is not None: self.wfile.write(b'HTTP/1.1 404\r\n\r\n') logging.warn('%s %s %s haking', self.address_string(), self.command, self.path ) return url_path = urlparse.urlparse(self.path).path if url_path == '/': return self.req_index_handler() if len(url_path.split('/')) >= 3 and url_path.split('/')[1] == "modules": module = url_path.split('/')[2] #config.load() modules_versoin = config.get(['modules', module, 'current_version'], None) file_path = os.path.join(root_path, module, modules_versoin, url_path.split('/')[3:].join('/')) else: file_path = os.path.join(current_path, 'web_ui' + url_path) if os.path.isfile(file_path): if file_path.endswith('.js'): mimetype = 'application/javascript' elif file_path.endswith('.css'): mimetype = 'text/css' elif file_path.endswith('.html'): mimetype = 'text/html' elif file_path.endswith('.jpg'): mimetype = 'image/jpeg' elif file_path.endswith('.png'): mimetype = 'image/png' else: mimetype = 'text/plain' self.send_file(file_path, mimetype) elif url_path == '/config': self.req_config_handler() elif url_path == '/init_module': self.req_init_module_handler() elif url_path == '/quit': self.send_response('text/html', '{"status":"success"}') module_init.stop_all() os._exit(0) else: self.wfile.write(b'HTTP/1.1 404\r\nContent-Type: text/plain\r\nConnection: close\r\n\r\n404 Not Found') logging.info('%s "%s %s HTTP/1.1" 404 -', self.address_string(), self.command, self.path)
def restart_xxnet(): import module_init module_init.stop_all() import web_control web_control.stop() current_path = os.path.dirname(os.path.abspath(__file__)) start_sript = os.path.abspath( os.path.join(current_path, os.pardir, "start.py")) subprocess.Popen([sys.executable, start_sript], shell=False)
def restart_xxnet(version): import module_init module_init.stop_all() import web_control web_control.stop() start_script = os.path.join(top_path, "code", version, "launcher", "start.py") subprocess.Popen([sys.executable, start_script]) time.sleep(20)
def main(): # change path to launcher global __file__ __file__ = os.path.abspath(__file__) if os.path.islink(__file__): __file__ = getattr(os, 'readlink', lambda x: x)(__file__) os.chdir(os.path.dirname(os.path.abspath(__file__))) current_version = update_from_github.current_version() xlog.info("start XX-Net %s", current_version) web_control.confirm_xxnet_exit() setup_win_python.check_setup() last_run_version = config.get(["modules", "launcher", "last_run_version"], "0.0.0") if last_run_version != current_version: import post_update post_update.run(last_run_version) config.set(["modules", "launcher", "last_run_version"], current_version) config.save() allow_remote = 0 if len(sys.argv) > 1: for s in sys.argv[1:]: xlog.info("command args:%s", s) if s == "-allow_remote": allow_remote = 1 module_init.xargs["allow_remote"] = 1 module_init.start_all_auto() web_control.start(allow_remote) if has_desktop and config.get(["modules", "launcher", "popup_webui"], 1) == 1: host_port = config.get(["modules", "launcher", "control_port"], 8085) import webbrowser webbrowser.open("http://127.0.0.1:%s/" % host_port) update.start() update_from_github.delete_to_save_disk() if config.get(["modules", "launcher", "show_systray"], 1): sys_tray.serve_forever() else: while True: time.sleep(100) module_init.stop_all() sys.exit()
def restart_xxnet(): import module_init module_init.stop_all() import web_control web_control.stop() current_path = os.path.dirname(os.path.abspath(__file__)) start_sript = os.path.abspath( os.path.join(current_path, "start.py")) subprocess.Popen([sys.executable, start_sript]) time.sleep(10) os._exit(0)
def restart_xxnet(): import module_init module_init.stop_all() import web_control web_control.stop() current_path = os.path.dirname(os.path.abspath(__file__)) start_script = os.path.join(current_path, "start.py") subprocess.Popen([sys.executable, start_script]) time.sleep(10) os._exit(0)
def uncaught_exception_handler(etype, value, tb): if etype == KeyboardInterrupt: # Ctrl + C on console xlog.warn("KeyboardInterrupt, exiting...") module_init.stop_all() os._exit(0) exc_info = ''.join(traceback.format_exception(etype, value, tb)) print(("uncaught Exception:\n" + exc_info)) with open(os.path.join(data_launcher_path, "error.log"), "a") as fd: now = datetime.now() time_str = now.strftime("%b %d %H:%M:%S.%f")[:19] fd.write("%s type:%s value=%s traceback:%s" % (time_str, etype, value, exc_info)) xlog.error("uncaught Exception, type=%s value=%s traceback:%s", etype, value, exc_info)
def do_GET(self): logging.debug('HTTP %s "%s %s ', self.address_string(), self.command, self.path) # check for '..', which will leak file if re.search(r'(\.{2})', self.path) is not None: self.wfile.write(b'HTTP/1.1 404\r\n\r\n') logging.warn('%s %s %s haking', self.address_string(), self.command, self.path) return path = urlparse.urlparse(self.path).path if path == '/': path = 'index.html' filename = os.path.normpath('./html/' + path) if os.path.isfile(filename): if filename.endswith('.js'): mimetype = 'application/javascript' elif filename.endswith('.css'): mimetype = 'text/css' elif filename.endswith('.html'): mimetype = 'text/html' elif filename.endswith('.jpg'): mimetype = 'image/jpeg' elif filename.endswith('.png'): mimetype = 'image/png' else: mimetype = 'text/plain' self.send_file(filename, mimetype) elif path == '/status': self.req_status_handler() elif path == '/goagent_config': self.req_goagent_config_handler() elif path == '/goagent_deploy': self.req_goagent_deploy_handler() elif path == '/quit': module_init.stop_all() #stop() os._exit(0) elif path == '/config': self.req_config_handler() else: self.wfile.write( b'HTTP/1.1 404\r\nContent-Type: text/plain\r\nConnection: close\r\n\r\n404 Not Found' ) logging.info('%s "%s %s HTTP/1.1" 404 -', self.address_string(), self.command, self.path)
def install_module(module, new_version): import module_init import os, subprocess, sys current_path = os.path.dirname(os.path.abspath(__file__)) new_module_version_path = os.path.abspath( os.path.join(current_path, os.pardir, os.pardir, module, new_version)) #check path exist if not os.path.isdir(new_module_version_path): logging.error("install module %s dir %s not exist", module, new_module_version_path) return #call setup.py setup_script = os.path.join(new_module_version_path, "setup.py") if not os.path.isfile(setup_script): logging.warn("update %s fail. setup script %s not exist", module, setup_script) return config.set(["modules", module, "current_version"], str(new_version)) config.save() if module == "launcher": module_init.stop_all() import web_control web_control.stop() subprocess.Popen([sys.executable, setup_script], shell=False) os._exit(0) else: logging.info("Setup %s version %s ...", module, new_version) try: module_init.stop(module) subprocess.call([sys.executable, setup_script], shell=False) logging.info("Finished new version setup.") logging.info("Restarting new version ...") module_init.start(module) except Exception as e: logging.error("install module %s %s fail:%s", module, new_version, e)
def windowWillClose_(self, notification): listNetworkServicesCommand = 'networksetup -listallnetworkservices' executeResult = subprocess.check_output(listNetworkServicesCommand, shell=True) services = executeResult.split('\n') services = filter(lambda service : service and service.find('*') == -1 and self.getProxyState(service) != 'disable', services) # Remove disabled services and empty lines if len(services) > 0: disableAutoProxyCommand = ';'.join(map(self.getDisableAutoProxyCommand, services)) disableGlobalProxyCommand = ';'.join(map(self.getDisableGlobalProxyCommand, services)) rootCommand = """osascript -e 'do shell script "%s;%s" with administrator privileges' """ % (disableAutoProxyCommand, disableGlobalProxyCommand) executeCommand = rootCommand.encode('utf-8') xlog.info("try disable proxy:%s", executeCommand) os.system(executeCommand) self.updateConfig('disable') module_init.stop_all() os._exit(0) NSApp.terminate_(self)
def windowWillClose_(self, notification): executeResult = subprocess.check_output(['networksetup', '-listallnetworkservices']) services = executeResult.split('\n') services = filter(lambda service : service and service.find('*') == -1 and getProxyState(service) != 'disable', services) # Remove disabled services and empty lines if len(services) > 0: try: map(helperDisableAutoProxy, services) map(helperDisableGlobalProxy, services) except: disableAutoProxyCommand = ';'.join(map(getDisableAutoProxyCommand, services)) disableGlobalProxyCommand = ';'.join(map(getDisableGlobalProxyCommand, services)) executeCommand = 'do shell script "%s;%s" with administrator privileges' % (disableAutoProxyCommand, disableGlobalProxyCommand) xlog.info("try disable proxy:%s", executeCommand) subprocess.call(['osascript', '-e', executeCommand]) module_init.stop_all() os._exit(0) AppKit.NSApp.terminate_(self)
def windowWillClose_(self, notification): executeResult = subprocess.check_output(['networksetup', '-listallnetworkservices']) services = executeResult.split('\n') services = filter(lambda service : service and service.find('*') == -1 and getProxyState(service) != 'disable', services) # Remove disabled services and empty lines if len(services) > 0: try: map(helperDisableAutoProxy, services) map(helperDisableGlobalProxy, services) except: disableAutoProxyCommand = ';'.join(map(getDisableAutoProxyCommand, services)) disableGlobalProxyCommand = ';'.join(map(getDisableGlobalProxyCommand, services)) executeCommand = 'do shell script "%s;%s" with administrator privileges' % (disableAutoProxyCommand, disableGlobalProxyCommand) xlog.info("try disable proxy:%s", executeCommand) subprocess.call(['osascript', '-e', executeCommand]) module_init.stop_all() os._exit(0) NSApp.terminate_(self)
def main(): # change path to launcher global __file__ __file__ = os.path.abspath(__file__) if os.path.islink(__file__): __file__ = getattr(os, 'readlink', lambda x: x)(__file__) os.chdir(os.path.dirname(os.path.abspath(__file__))) module_init.start_all_auto() web_control.start() webbrowser.open("http://127.0.0.1:8085/") update.start() sys_tray.serve_forever() module_init.stop_all() sys.exit()
def restart_xxnet(version=None): import module_init module_init.stop_all() import web_control web_control.stop() # New process will hold the listen port # We should close all listen port before create new process xlog.info("Close web control port.") if version is None: current_version_file = os.path.join(top_path, "code", "version.txt") with open(current_version_file, "r") as fd: version = fd.read() xlog.info("restart to xx-net version:%s", version) start_script = os.path.join(top_path, "code", version, "launcher", "start.py") subprocess.Popen([sys.executable, start_script]) time.sleep(20) xlog.info("Exit old process...") os._exit(0)
def on_restart_each_module(self, widget=None, data=None): module_init.stop_all() module_init.start_all_auto()
def windowWillClose_(self, notification): module_init.stop_all() NSApp.terminate_(self)
module_init.start_all_auto() web_control.start(allow_remote) if has_desktop and config.get(["modules", "launcher", "popup_webui"], 1) == 1: host_port = config.get(["modules", "launcher", "control_port"], 8085) import webbrowser webbrowser.open("http://localhost:%s/" % host_port) update.start() update_from_github.cleanup() if config.get(["modules", "launcher", "show_systray"], 1): sys_tray.serve_forever() else: while True: time.sleep(1) if __name__ == '__main__': try: main() except KeyboardInterrupt: # Ctrl + C on console module_init.stop_all() os._exit(0) sys.exit() except Exception as e: xlog.exception("launcher except:%r", e) raw_input("Press Enter to continue...")
def on_quit(self, _): module_init.stop_all() rumps.quit_application()
def exit_handler(): print('Stopping all modules before exit!') module_init.stop_all() web_control.stop()
def restartEachModule_(self, _): module_init.stop_all() module_init.start_all_auto()
def req_config_handler(self): req = urlparse.urlparse(self.path).query reqs = urlparse.parse_qs(req, keep_blank_values=True) data = '' if reqs['cmd'] == ['get_config']: config.load() if module_init.xargs.get("allow_remote", 0): allow_remote_connect = 1 else: allow_remote_connect = config.get(["modules", "launcher", "allow_remote_connect"], 0) dat = { "check_update": config.get(["update", "check_update"], "notice-stable"), "language": config.get(["language"], i18n_translator.lang), "popup_webui": config.get(["modules", "launcher", "popup_webui"], 1), "allow_remote_connect": allow_remote_connect, "allow_remote_switch": config.get(["modules", "launcher", "allow_remote_connect"], 0), "show_systray": config.get(["modules", "launcher", "show_systray"], 1), "auto_start": config.get(["modules", "launcher", "auto_start"], 0), "show_detail": config.get(["modules", "gae_proxy", "show_detail"], 0), "gae_proxy_enable": config.get(["modules", "gae_proxy", "auto_start"], 0), "x_tunnel_enable": config.get(["modules", "x_tunnel", "auto_start"], 0), "smart_router_enable": config.get(["modules", "smart_router", "auto_start"], 0), "system-proxy": config.get(["modules", "launcher", "proxy"], "smart_router"), "show-compat-suggest": config.get(["show_compat_suggest"], 1), "no_mess_system": config.get(["no_mess_system"], 0), "keep_old_ver_num": config.get(["modules", "launcher", "keep_old_ver_num"], -1), # -1 means not set yet "postUpdateStat": config.get(["update", "postUpdateStat"], "noChange"), } data = json.dumps(dat) elif reqs['cmd'] == ['set_config']: if 'skip_version' in reqs: skip_version = reqs['skip_version'][0] skip_version_type = reqs['skip_version_type'][0] if skip_version_type not in ["stable", "test"]: data = '{"res":"fail"}' else: config.set(["update", "skip_%s_version" % skip_version_type], skip_version) config.save() if skip_version in update_from_github.update_info: update_from_github.update_info = '' data = '{"res":"success"}' elif 'check_update' in reqs: check_update = reqs['check_update'][0] if check_update not in ["dont-check", "stable", "notice-stable", "test", "notice-test"]: data = '{"res":"fail, check_update:%s"}' % check_update else: if config.get(["update", "check_update"]) != check_update: update_from_github.init_update_info(check_update) config.set(["update", "check_update"], check_update) config.save() data = '{"res":"success"}' elif 'language' in reqs: language = reqs['language'][0] if language not in i18n_translator.get_valid_languages(): data = '{"res":"fail, language:%s"}' % language else: config.set(["language"], language) config.save() i18n_translator.lang = language self.load_module_menus() data = '{"res":"success"}' elif 'popup_webui' in reqs: popup_webui = int(reqs['popup_webui'][0]) if popup_webui != 0 and popup_webui != 1: data = '{"res":"fail, popup_webui:%s"}' % popup_webui else: config.set(["modules", "launcher", "popup_webui"], popup_webui) config.save() data = '{"res":"success"}' elif 'allow_remote_switch' in reqs: allow_remote_switch = int(reqs['allow_remote_switch'][0]) if allow_remote_switch != 0 and allow_remote_switch != 1: data = '{"res":"fail, allow_remote_connect:%s"}' % allow_remote_switch else: config.set(["modules", "launcher", "allow_remote_connect"], allow_remote_switch) config.save() try: del module_init.xargs["allow_remote"] except: pass if allow_remote_switch: module_init.call_each_module("set_bind_ip", { "ip": "0.0.0.0" }) else: module_init.call_each_module("set_bind_ip", { "ip": "127.0.0.1" }) data = '{"res":"success"}' xlog.debug("restart web control.") stop() module_init.stop_all() time.sleep(1) start() module_init.start_all_auto() xlog.debug("launcher web control restarted.") elif 'show_systray' in reqs: show_systray = int(reqs['show_systray'][0]) if show_systray != 0 and show_systray != 1: data = '{"res":"fail, show_systray:%s"}' % show_systray else: config.set(["modules", "launcher", "show_systray"], show_systray) config.save() data = '{"res":"success"}' elif 'show_compat_suggest' in reqs: show_compat_suggest = int(reqs['show_compat_suggest'][0]) if show_compat_suggest != 0 and show_compat_suggest != 1: data = '{"res":"fail, show_compat_suggest:%s"}' % show_compat_suggest else: config.set(["show_compat_suggest"], show_compat_suggest) config.save() data = '{"res":"success"}' elif 'no_mess_system' in reqs: no_mess_system = int(reqs['no_mess_system'][0]) if no_mess_system != 0 and no_mess_system != 1: data = '{"res":"fail, no_mess_system:%s"}' % no_mess_system else: config.set(["no_mess_system"], no_mess_system) config.save() data = '{"res":"success"}' elif 'keep_old_ver_num' in reqs: keep_old_ver_num = int(reqs['keep_old_ver_num'][0]) if keep_old_ver_num < 0 or keep_old_ver_num > 99: data = '{"res":"fail, keep_old_ver_num:%s not in range 0 to 99"}' % keep_old_ver_num else: config.set(["modules", "launcher", "keep_old_ver_num"], keep_old_ver_num) config.save() data = '{"res":"success"}' elif 'auto_start' in reqs: auto_start = int(reqs['auto_start'][0]) if auto_start != 0 and auto_start != 1: data = '{"res":"fail, auto_start:%s"}' % auto_start else: if auto_start: autorun.enable() else: autorun.disable() config.set(["modules", "launcher", "auto_start"], auto_start) config.save() data = '{"res":"success"}' elif 'show_detail' in reqs: show_detail = int(reqs['show_detail'][0]) if show_detail != 0 and show_detail != 1: data = '{"res":"fail, show_detail:%s"}' % show_detail else: config.set(["modules", "gae_proxy", "show_detail"], show_detail) config.save() data = '{"res":"success"}' elif 'gae_proxy_enable' in reqs: gae_proxy_enable = int(reqs['gae_proxy_enable'][0]) if gae_proxy_enable != 0 and gae_proxy_enable != 1: data = '{"res":"fail, gae_proxy_enable:%s"}' % gae_proxy_enable else: config.set(["modules", "gae_proxy", "auto_start"], gae_proxy_enable) config.save() if gae_proxy_enable: module_init.start("gae_proxy") else: module_init.stop("gae_proxy") self.load_module_menus() data = '{"res":"success"}' elif 'x_tunnel_enable' in reqs: x_tunnel_enable = int(reqs['x_tunnel_enable'][0]) if x_tunnel_enable != 0 and x_tunnel_enable != 1: data = '{"res":"fail, x_tunnel_enable:%s"}' % x_tunnel_enable else: config.set(["modules", "x_tunnel", "auto_start"], x_tunnel_enable) config.save() if x_tunnel_enable: module_init.start("x_tunnel") else: module_init.stop("x_tunnel") self.load_module_menus() data = '{"res":"success"}' elif 'smart_router_enable' in reqs: smart_router_enable = int(reqs['smart_router_enable'][0]) if smart_router_enable != 0 and smart_router_enable != 1: data = '{"res":"fail, smart_router_enable:%s"}' % smart_router_enable else: config.set(["modules", "smart_router", "auto_start"], smart_router_enable) config.save() if smart_router_enable: module_init.start("smart_router") else: module_init.stop("smart_router") self.load_module_menus() data = '{"res":"success"}' elif 'postUpdateStat' in reqs: postUpdateStat = reqs['postUpdateStat'][0] if postUpdateStat not in ["noChange", "isNew", "isPostUpdate"]: data = '{"res":"fail, postUpdateStat:%s"}' % postUpdateStat else: config.set(["update", "postUpdateStat"], postUpdateStat) config.save() data = '{"res":"success"}' else: data = '{"res":"fail"}' elif reqs['cmd'] == ['get_version']: current_version = update_from_github.current_version() data = '{"current_version":"%s"}' % current_version self.send_response('text/html', data)
def windowWillClose_(self, notification): self.disableProxy_(None) module_init.stop_all() os._exit(0) NSApp.terminate_(self)
def on_restart_goagent(self, widget=None, data=None): module_init.stop_all() module_init.start_all_auto()
def do_GET(self): try: refer = self.headers.getheader('Referer') netloc = urlparse(refer).netloc if not netloc.startswith("127.0.0.1") and not netloc.startswitch( "localhost"): launcher_log.warn("web control ref:%s refuse", netloc) return except: pass # check for '..', which will leak file if re.search(r'(\.{2})', self.path) is not None: self.wfile.write(b'HTTP/1.1 404\r\n\r\n') launcher_log.warn('%s %s %s haking', self.address_string(), self.command, self.path) return url_path = urlparse(self.path).path if url_path == '/': return self.req_index_handler() url_path_list = self.path.split('/') if len(url_path_list) >= 3 and url_path_list[1] == "module": module = url_path_list[2] if len(url_path_list) >= 4 and url_path_list[3] == "control": if module not in module_init.proc_handler: launcher_log.warn("request %s no module in path", url_path) self.send_not_found() return path = '/' + '/'.join(url_path_list[4:]) controler = module_init.proc_handler[module][ "imp"].local.web_control.ControlHandler( self.client_address, self.headers, self.command, path, self.rfile, self.wfile) controler.do_GET() return else: file_path = os.path.join(root_path, module, url_path_list[3:].join('/')) else: file_path = os.path.join(current_path, 'web_ui' + url_path) launcher_log.debug('launcher web_control %s %s %s ', self.address_string(), self.command, self.path) if os.path.isfile(file_path): if file_path.endswith('.js'): mimetype = 'application/javascript' elif file_path.endswith('.css'): mimetype = 'text/css' elif file_path.endswith('.html'): mimetype = 'text/html' elif file_path.endswith('.jpg'): mimetype = 'image/jpeg' elif file_path.endswith('.png'): mimetype = 'image/png' else: mimetype = 'text/plain' self.send_file(file_path, mimetype) elif url_path == '/config': self.req_config_handler() elif url_path == '/log': self.req_log_handler() elif url_path == '/download': self.req_download_handler() elif url_path == '/init_module': self.req_init_module_handler() elif url_path == '/quit': self.send_response('text/html', '{"status":"success"}') module_init.stop_all() os._exit(0) elif url_path == '/restart': self.send_response('text/html', '{"status":"success"}') module_init.stop_all() module_init.start_all_auto() else: self.wfile.write( b'HTTP/1.1 404\r\nContent-Type: text/plain\r\nConnection: close\r\n\r\n404 Not Found' ) launcher_log.info('%s "%s %s HTTP/1.1" 404 -', self.address_string(), self.command, self.path)
def req_config_handler(self): req = urlparse(self.path).query reqs = parse_qs(req, keep_blank_values=True) data = '' if reqs['cmd'] == ['get_config']: if module_init.xargs.get("allow_remote", 0): allow_remote_connect = 1 else: allow_remote_connect = config.allow_remote_connect dat = { "check_update": config.check_update, "language": config.language or i18n_translator.lang, "popup_webui": config.popup_webui, "allow_remote_connect": allow_remote_connect, "allow_remote_switch": config.allow_remote_connect, "show_systray": config.show_systray, "auto_start": config.auto_start, "show_detail": config.gae_show_detail, "gae_proxy_enable": config.enable_gae_proxy, "x_tunnel_enable": config.enable_x_tunnel, "smart_router_enable": config.enable_smart_router, "system-proxy": config.os_proxy_mode, "show-compat-suggest": config.show_compat_suggest, "no_mess_system": config.no_mess_system, "keep_old_ver_num": config.keep_old_ver_num, "postUpdateStat": config.postUpdateStat, } data = json.dumps(dat) elif reqs['cmd'] == ['set_config']: if 'skip_version' in reqs: skip_version = reqs['skip_version'][0] skip_version_type = reqs['skip_version_type'][0] if skip_version_type not in ["stable", "test"]: data = '{"res":"fail"}' else: setattr(config, "skip_%s_version" % skip_version_type, skip_version) config.save() if skip_version in update_from_github.update_info: update_from_github.update_info = '' data = '{"res":"success"}' elif 'check_update' in reqs: check_update = reqs['check_update'][0] if check_update not in [ "dont-check", "stable", "notice-stable", "test", "notice-test" ]: data = '{"res":"fail, check_update:%s"}' % check_update else: if config.check_update != check_update: update_from_github.init_update_info(check_update) config.check_update = check_update config.save() data = '{"res":"success"}' elif 'language' in reqs: language = reqs['language'][0] if language not in valid_language: data = '{"res":"fail, language:%s"}' % language else: config.language = language config.save() i18n_translator.lang = language self.load_module_menus() data = '{"res":"success"}' elif 'popup_webui' in reqs: popup_webui = int(reqs['popup_webui'][0]) if popup_webui != 0 and popup_webui != 1: data = '{"res":"fail, popup_webui:%s"}' % popup_webui else: config.popup_webui = popup_webui config.save() data = '{"res":"success"}' elif 'allow_remote_switch' in reqs: allow_remote_switch = int(reqs['allow_remote_switch'][0]) if allow_remote_switch != 0 and allow_remote_switch != 1: data = '{"res":"fail, allow_remote_connect:%s"}' % allow_remote_switch else: try: del module_init.xargs["allow_remote"] except: pass if allow_remote_switch: module_init.call_each_module("set_bind_ip", {"ip": "0.0.0.0"}) else: module_init.call_each_module("set_bind_ip", {"ip": "127.0.0.1"}) config.allow_remote_connect = allow_remote_switch config.save() xlog.debug("restart web control.") stop() module_init.stop_all() time.sleep(1) start(allow_remote_switch) module_init.start_all_auto() xlog.debug("launcher web control restarted.") data = '{"res":"success"}' elif 'show_systray' in reqs: show_systray = int(reqs['show_systray'][0]) if show_systray != 0 and show_systray != 1: data = '{"res":"fail, show_systray:%s"}' % show_systray else: config.show_systray = show_systray config.save() data = '{"res":"success"}' elif 'show_compat_suggest' in reqs: show_compat_suggest = int(reqs['show_compat_suggest'][0]) if show_compat_suggest != 0 and show_compat_suggest != 1: data = '{"res":"fail, show_compat_suggest:%s"}' % show_compat_suggest else: config.show_compat_suggest = show_compat_suggest config.save() data = '{"res":"success"}' elif 'no_mess_system' in reqs: no_mess_system = int(reqs['no_mess_system'][0]) if no_mess_system != 0 and no_mess_system != 1: data = '{"res":"fail, no_mess_system:%s"}' % no_mess_system else: config.no_mess_system = no_mess_system config.save() data = '{"res":"success"}' elif 'keep_old_ver_num' in reqs: keep_old_ver_num = int(reqs['keep_old_ver_num'][0]) if keep_old_ver_num < 0 or keep_old_ver_num > 99: data = '{"res":"fail, keep_old_ver_num:%s not in range 0 to 99"}' % keep_old_ver_num else: config.keep_old_ver_num = keep_old_ver_num config.save() data = '{"res":"success"}' elif 'auto_start' in reqs: auto_start = int(reqs['auto_start'][0]) if auto_start != 0 and auto_start != 1: data = '{"res":"fail, auto_start:%s"}' % auto_start else: if auto_start: autorun.enable() else: autorun.disable() config.auto_start = auto_start config.save() data = '{"res":"success"}' elif 'show_detail' in reqs: show_detail = int(reqs['show_detail'][0]) if show_detail != 0 and show_detail != 1: data = '{"res":"fail, show_detail:%s"}' % show_detail else: config.gae_show_detail = show_detail config.save() data = '{"res":"success"}' elif 'gae_proxy_enable' in reqs: gae_proxy_enable = int(reqs['gae_proxy_enable'][0]) if gae_proxy_enable != 0 and gae_proxy_enable != 1: data = '{"res":"fail, gae_proxy_enable:%s"}' % gae_proxy_enable else: config.enable_gae_proxy = gae_proxy_enable config.save() if gae_proxy_enable: module_init.start("gae_proxy") else: module_init.stop("gae_proxy") self.load_module_menus() data = '{"res":"success"}' elif 'x_tunnel_enable' in reqs: x_tunnel_enable = int(reqs['x_tunnel_enable'][0]) if x_tunnel_enable != 0 and x_tunnel_enable != 1: data = '{"res":"fail, x_tunnel_enable:%s"}' % x_tunnel_enable else: config.enable_x_tunnel = x_tunnel_enable config.save() if x_tunnel_enable: module_init.start("x_tunnel") else: module_init.stop("x_tunnel") self.load_module_menus() data = '{"res":"success"}' elif 'smart_router_enable' in reqs: smart_router_enable = int(reqs['smart_router_enable'][0]) if smart_router_enable != 0 and smart_router_enable != 1: data = '{"res":"fail, smart_router_enable:%s"}' % smart_router_enable else: config.enable_smart_router = smart_router_enable config.save() if smart_router_enable: module_init.start("smart_router") else: module_init.stop("smart_router") self.load_module_menus() data = '{"res":"success"}' elif 'postUpdateStat' in reqs: postUpdateStat = reqs['postUpdateStat'][0] if postUpdateStat not in ["noChange", "isNew", "isPostUpdate"]: data = '{"res":"fail, postUpdateStat:%s"}' % postUpdateStat else: config.postUpdateStat = postUpdateStat config.save() data = '{"res":"success"}' else: data = '{"res":"fail"}' elif reqs['cmd'] == ['get_version']: current_version = update_from_github.current_version() data = '{"current_version":"%s"}' % current_version self.send_response('text/html', data)
def on_quit(self, widget, data=None): module_init.stop_all() os._exit(0) gtk.main_quit()
def req_config_handler(self): req = urlparse.urlparse(self.path).query reqs = urlparse.parse_qs(req, keep_blank_values=True) data = '' if reqs['cmd'] == ['get_config']: config.load() check_update = config.get(["update", "check_update"], "notice-stable") if module_init.xargs.get("allow_remote", 0): allow_remote_connect = 1 else: allow_remote_connect = config.get( ["modules", "launcher", "allow_remote_connect"], 0) dat = { "check_update": check_update, "language": config.get(["language"], i18n_translator.lang), "popup_webui": config.get(["modules", "launcher", "popup_webui"], 1), "allow_remote_connect": allow_remote_connect, "allow_remote_switch": config.get(["modules", "launcher", "allow_remote_connect"], 0), "show_systray": config.get(["modules", "launcher", "show_systray"], 1), "auto_start": config.get(["modules", "launcher", "auto_start"], 0), "show_detail": config.get(["modules", "gae_proxy", "show_detail"], 0), "gae_proxy_enable": config.get(["modules", "gae_proxy", "show_detail"], 0), "x_tunnel_enable": config.get(["modules", "x_tunnel", "auto_start"], 0), "smart_router_enable": config.get(["modules", "smart_router", "auto_start"], 0), "no_mess_system": config.get(["no_mess_system"], 0) } data = json.dumps(dat) if reqs['cmd'] == ['get_version']: current_version = update_from_github.current_version() data = '{"current_version":"%s"}' % (current_version) elif reqs['cmd'] == ['set_config']: if 'skip_version' in reqs: skip_version = reqs['skip_version'][0] skip_version_type = reqs['skip_version_type'][0] if skip_version_type not in ["stable", "test"]: data = '{"res":"fail"}' else: config.set( ["update", "skip_%s_version" % skip_version_type], skip_version) config.save() if skip_version in update_from_github.update_info: update_from_github.update_info = '' data = '{"res":"success"}' elif 'check_update' in reqs: check_update = reqs['check_update'][0] if check_update not in [ "dont-check", "stable", "notice-stable", "test", "notice-test" ]: data = '{"res":"fail, check_update:%s"}' % check_update else: if config.get(["update", "check_update"]) != check_update: update_from_github.init_update_info(check_update) config.set(["update", "check_update"], check_update) config.save() data = '{"res":"success"}' elif 'language' in reqs: language = reqs['language'][0] if language not in i18n_translator.get_valid_languages(): data = '{"res":"fail, language:%s"}' % language else: config.set(["language"], language) config.save() i18n_translator.lang = language self.load_module_menus() data = '{"res":"success"}' elif 'popup_webui' in reqs: popup_webui = int(reqs['popup_webui'][0]) if popup_webui != 0 and popup_webui != 1: data = '{"res":"fail, popup_webui:%s"}' % popup_webui else: config.set(["modules", "launcher", "popup_webui"], popup_webui) config.save() data = '{"res":"success"}' elif 'allow_remote_switch' in reqs: allow_remote_switch = int(reqs['allow_remote_switch'][0]) if allow_remote_switch != 0 and allow_remote_switch != 1: data = '{"res":"fail, allow_remote_connect:%s"}' % allow_remote_switch else: config.set(["modules", "launcher", "allow_remote_connect"], allow_remote_switch) config.save() try: del module_init.xargs["allow_remote"] except: pass if allow_remote_switch: module_init.call_each_module("set_bind_ip", {"ip": "0.0.0.0"}) else: module_init.call_each_module("set_bind_ip", {"ip": "127.0.0.1"}) data = '{"res":"success"}' xlog.debug("restart web control.") stop() module_init.stop_all() time.sleep(1) start() module_init.start_all_auto() xlog.debug("launcher web control restarted.") elif 'show_systray' in reqs: show_systray = int(reqs['show_systray'][0]) if show_systray != 0 and show_systray != 1: data = '{"res":"fail, show_systray:%s"}' % show_systray else: config.set(["modules", "launcher", "show_systray"], show_systray) config.save() data = '{"res":"success"}' elif 'no_mess_system' in reqs: no_mess_system = int(reqs['no_mess_system'][0]) if no_mess_system != 0 and no_mess_system != 1: data = '{"res":"fail, show_systray:%s"}' % no_mess_system else: config.set(["no_mess_system"], no_mess_system) config.save() data = '{"res":"success"}' elif 'auto_start' in reqs: auto_start = int(reqs['auto_start'][0]) if auto_start != 0 and auto_start != 1: data = '{"res":"fail, auto_start:%s"}' % auto_start else: if auto_start: autorun.enable() else: autorun.disable() config.set(["modules", "launcher", "auto_start"], auto_start) config.save() data = '{"res":"success"}' elif 'show_detail' in reqs: show_detail = int(reqs['show_detail'][0]) if show_detail != 0 and show_detail != 1: data = '{"res":"fail, show_detail:%s"}' % show_detail else: config.set(["modules", "gae_proxy", "show_detail"], show_detail) config.save() data = '{"res":"success"}' elif 'gae_proxy_enable' in reqs: gae_proxy_enable = int(reqs['gae_proxy_enable'][0]) if gae_proxy_enable != 0 and gae_proxy_enable != 1: data = '{"res":"fail, gae_proxy_enable:%s"}' % gae_proxy_enable else: config.set(["modules", "gae_proxy", "auto_start"], gae_proxy_enable) config.save() if gae_proxy_enable: module_init.start("gae_proxy") else: module_init.stop("gae_proxy") self.load_module_menus() data = '{"res":"success"}' elif 'x_tunnel_enable' in reqs: x_tunnel_enable = int(reqs['x_tunnel_enable'][0]) if x_tunnel_enable != 0 and x_tunnel_enable != 1: data = '{"res":"fail, x_tunnel_enable:%s"}' % x_tunnel_enable else: config.set(["modules", "x_tunnel", "auto_start"], x_tunnel_enable) config.save() if x_tunnel_enable: module_init.start("x_tunnel") else: module_init.stop("x_tunnel") self.load_module_menus() data = '{"res":"success"}' elif 'smart_router_enable' in reqs: smart_router_enable = int(reqs['smart_router_enable'][0]) if smart_router_enable != 0 and smart_router_enable != 1: data = '{"res":"fail, smart_router_enable:%s"}' % smart_router_enable else: config.set(["modules", "smart_router", "auto_start"], smart_router_enable) config.save() if smart_router_enable: module_init.start("smart_router") else: module_init.stop("smart_router") self.load_module_menus() data = '{"res":"success"}' else: data = '{"res":"fail"}' self.send_response('text/html', data)
def do_GET(self): refer = self.headers.getheader('Referer') if refer: refer_loc = urlparse.urlparse(refer).netloc host = self.headers.getheader('host') if refer_loc != host: xlog.warn("web control ref:%s host:%s", refer_loc, host) return # check for '..', which will leak file if re.search(r'(\.{2})', self.path) is not None: self.wfile.write(b'HTTP/1.1 404\r\n\r\n') xlog.warn('%s %s %s haking', self.address_string(), self.command, self.path) return url_path = urlparse.urlparse(self.path).path if url_path == '/': return self.req_index_handler() url_path_list = self.path.split('/') if len(url_path_list) >= 3 and url_path_list[1] == "module": module = url_path_list[2] if len(url_path_list) >= 4 and url_path_list[3] == "control": if module not in module_init.proc_handler: xlog.warn("request %s no module in path", url_path) self.send_not_found() return if "imp" not in module_init.proc_handler[module]: xlog.warn("request module:%s start fail", module) self.send_not_found() return path = '/' + '/'.join(url_path_list[4:]) controler = module_init.proc_handler[module][ "imp"].local.web_control.ControlHandler( self.client_address, self.headers, self.command, path, self.rfile, self.wfile) controler.do_GET() return else: relate_path = '/'.join(url_path_list[3:]) file_path = os.path.join(root_path, module, "web_ui", relate_path) if not os.path.isfile(file_path): return self.send_not_found() # i18n code lines (Both the locale dir & the template dir are module-dependent) locale_dir = os.path.abspath( os.path.join(root_path, module, 'lang')) content = i18n_translator.render(locale_dir, file_path) return self.send_response('text/html', content) else: file_path = os.path.join(current_path, 'web_ui' + url_path) if os.path.isfile(file_path): if file_path.endswith('.js'): mimetype = 'application/javascript' elif file_path.endswith('.css'): mimetype = 'text/css' elif file_path.endswith('.html'): mimetype = 'text/html' elif file_path.endswith('.jpg'): mimetype = 'image/jpeg' elif file_path.endswith('.png'): mimetype = 'image/png' else: mimetype = 'text/plain' self.send_file(file_path, mimetype) else: xlog.debug('launcher web_control %s %s %s ', self.address_string(), self.command, self.path) if url_path == '/config': self.req_config_handler() elif url_path == '/update': self.req_update_handler() elif url_path == '/config_proxy': self.req_config_proxy_handler() elif url_path == '/init_module': self.req_init_module_handler() elif url_path == '/quit': self.send_response('text/html', '{"status":"success"}') module_init.stop_all() os._exit(0) elif url_path == "/debug": self.req_debug_handler() elif url_path == '/restart': self.send_response('text/html', '{"status":"success"}') update_from_github.restart_xxnet() else: self.send_not_found() xlog.info('%s "%s %s HTTP/1.1" 404 -', self.address_string(), self.command, self.path)
def do_GET(self): try: refer = self.headers.getheader('Referer') netloc = urlparse.urlparse(refer).netloc if not netloc.startswith("127.0.0.1") and not netloc.startswitch("localhost"): launcher_log.warn("web control ref:%s refuse", netloc) return except: pass # check for '..', which will leak file if re.search(r'(\.{2})', self.path) is not None: self.wfile.write(b'HTTP/1.1 404\r\n\r\n') launcher_log.warn('%s %s %s haking', self.address_string(), self.command, self.path ) return url_path = urlparse.urlparse(self.path).path if url_path == '/': return self.req_index_handler() url_path_list = self.path.split('/') if len(url_path_list) >= 3 and url_path_list[1] == "module": module = url_path_list[2] if len(url_path_list) >= 4 and url_path_list[3] == "control": if module not in module_init.proc_handler: launcher_log.warn("request %s no module in path", url_path) self.send_not_found() return path = '/' + '/'.join(url_path_list[4:]) controler = module_init.proc_handler[module]["imp"].local.web_control.ControlHandler(self.client_address, self.headers, self.command, path, self.rfile, self.wfile) controler.do_GET() return else: file_path = os.path.join(root_path, module, url_path_list[3:].join('/')) else: file_path = os.path.join(current_path, 'web_ui' + url_path) launcher_log.debug ('launcher web_control %s %s %s ', self.address_string(), self.command, self.path) if os.path.isfile(file_path): if file_path.endswith('.js'): mimetype = 'application/javascript' elif file_path.endswith('.css'): mimetype = 'text/css' elif file_path.endswith('.html'): mimetype = 'text/html' elif file_path.endswith('.jpg'): mimetype = 'image/jpeg' elif file_path.endswith('.png'): mimetype = 'image/png' else: mimetype = 'text/plain' self.send_file(file_path, mimetype) elif url_path == '/config': self.req_config_handler() elif url_path == '/download': self.req_download_handler() elif url_path == '/init_module': self.req_init_module_handler() elif url_path == '/quit': self.send_response('text/html', '{"status":"success"}') module_init.stop_all() os._exit(0) elif url_path == '/restart': self.send_response('text/html', '{"status":"success"}') update_from_github.restart_xxnet() else: self.wfile.write(b'HTTP/1.1 404\r\nContent-Type: text/plain\r\nConnection: close\r\n\r\n404 Not Found') launcher_log.info('%s "%s %s HTTP/1.1" 404 -', self.address_string(), self.command, self.path)
def on_reset(self, _): module_init.stop_all() module_init.start_all_auto()
def do_GET(self): refer = self.headers.getheader('Referer') if refer: refer_loc = urlparse.urlparse(refer).netloc host = self.headers.getheader('host') if refer_loc != host: xlog.warn("web control ref:%s host:%s", refer_loc, host) return # check for '..', which will leak file if re.search(r'(\.{2})', self.path) is not None: self.wfile.write(b'HTTP/1.1 404\r\n\r\n') xlog.warn('%s %s %s haking', self.address_string(), self.command, self.path ) return url_path = urlparse.urlparse(self.path).path if url_path == '/': return self.req_index_handler() url_path_list = self.path.split('/') if len(url_path_list) >= 3 and url_path_list[1] == "module": module = url_path_list[2] if len(url_path_list) >= 4 and url_path_list[3] == "control": if module not in module_init.proc_handler: xlog.warn("request %s no module in path", url_path) self.send_not_found() return if "imp" not in module_init.proc_handler[module]: xlog.warn("request module:%s start fail", module) self.send_not_found() return path = '/' + '/'.join(url_path_list[4:]) controler = module_init.proc_handler[module]["imp"].local.web_control.ControlHandler(self.client_address, self.headers, self.command, path, self.rfile, self.wfile) controler.do_GET() return else: relate_path = '/'.join(url_path_list[3:]) file_path = os.path.join(root_path, module, "web_ui", relate_path) if not os.path.isfile(file_path): return self.send_not_found() # i18n code lines (Both the locale dir & the template dir are module-dependent) locale_dir = os.path.abspath(os.path.join(root_path, module, 'lang')) content = i18n_translator.render(locale_dir, file_path) return self.send_response('text/html', content) else: file_path = os.path.join(current_path, 'web_ui' + url_path) xlog.debug ('launcher web_control %s %s %s ', self.address_string(), self.command, self.path) if os.path.isfile(file_path): if file_path.endswith('.js'): mimetype = 'application/javascript' elif file_path.endswith('.css'): mimetype = 'text/css' elif file_path.endswith('.html'): mimetype = 'text/html' elif file_path.endswith('.jpg'): mimetype = 'image/jpeg' elif file_path.endswith('.png'): mimetype = 'image/png' else: mimetype = 'text/plain' self.send_file(file_path, mimetype) elif url_path == '/config': self.req_config_handler() elif url_path == '/update': self.req_update_handler() elif url_path == '/init_module': self.req_init_module_handler() elif url_path == '/quit': self.send_response('text/html', '{"status":"success"}') module_init.stop_all() os._exit(0) elif url_path == '/restart': self.send_response('text/html', '{"status":"success"}') update_from_github.restart_xxnet() else: self.send_not_found() xlog.info('%s "%s %s HTTP/1.1" 404 -', self.address_string(), self.command, self.path)
def on_restart_gae_proxy(self, widget=None, data=None): module_init.stop_all() module_init.start_all_auto()
def on_restart_ossftp_proxy(self, widget=None, data=None): module_init.stop_all() module_init.start_all_auto()
def on_quit(self, widget, data=None): proxy_setting = config.get(["modules", "launcher", "proxy"], "disable") if proxy_setting != "disable": win32_proxy_manager.disable_proxy() module_init.stop_all() os._exit(0)
def on_quit(self, widget, data=None): win32_proxy_manager.disable_proxy() module_init.stop_all() os._exit(0)
def do_GET(self): refer = self.headers.getheader("Referer") if refer: refer_loc = urlparse.urlparse(refer).netloc host = self.headers.getheader("host") if refer_loc != host: xlog.warn("web control ref:%s host:%s", refer_loc, host) return # check for '..', which will leak file if re.search(r"(\.{2})", self.path) is not None: self.wfile.write(b"HTTP/1.1 404\r\n\r\n") xlog.warn("%s %s %s haking", self.address_string(), self.command, self.path) return url_path = urlparse.urlparse(self.path).path if url_path == "/": return self.req_index_handler() url_path_list = self.path.split("/") if len(url_path_list) >= 3 and url_path_list[1] == "module": module = url_path_list[2] if len(url_path_list) >= 4 and url_path_list[3] == "control": if module not in module_init.proc_handler: xlog.warn("request %s no module in path", url_path) self.send_not_found() return if "imp" not in module_init.proc_handler[module]: xlog.warn("request module:%s start fail", module) self.send_not_found() return path = "/" + "/".join(url_path_list[4:]) controler = module_init.proc_handler[module]["imp"].local.web_control.ControlHandler( self.client_address, self.headers, self.command, path, self.rfile, self.wfile ) controler.do_GET() return else: file_path = os.path.join(root_path, module, url_path_list[3:].join("/")) else: file_path = os.path.join(current_path, "web_ui" + url_path) xlog.debug("launcher web_control %s %s %s ", self.address_string(), self.command, self.path) if os.path.isfile(file_path): if file_path.endswith(".js"): mimetype = "application/javascript" elif file_path.endswith(".css"): mimetype = "text/css" elif file_path.endswith(".html"): mimetype = "text/html" elif file_path.endswith(".jpg"): mimetype = "image/jpeg" elif file_path.endswith(".png"): mimetype = "image/png" else: mimetype = "text/plain" self.send_file(file_path, mimetype) elif url_path == "/config": self.req_config_handler() elif url_path == "/download": self.req_download_handler() elif url_path == "/init_module": self.req_init_module_handler() elif url_path == "/quit": self.send_response("text/html", '{"status":"success"}') module_init.stop_all() os._exit(0) elif url_path == "/restart": self.send_response("text/html", '{"status":"success"}') update_from_github.restart_xxnet() else: self.send_not_found() xlog.info('%s "%s %s HTTP/1.1" 404 -', self.address_string(), self.command, self.path)