def exec_script(self, engine_name, script, post_script="", attr={}): r = "" l2sem = L2ScriptEngineManager.getInstance() context = SimpleScriptContext() sw = StringWriter() pw = PrintWriter(sw, True) context.setAttribute("out_writer", pw, ScriptContext.ENGINE_SCOPE) for k in attr: context.setAttribute(str(k), attr[k], ScriptContext.ENGINE_SCOPE) context.setWriter(pw) context.setErrorWriter(pw) try: l2sem.eval(engine_name, script, context) r += sw.toString() except ScriptException, e: r += sw.toString() r += e.getMessage()
def handleImpl(self, exchange, ibuff): r = "" try: uri = exchange.getRequestURI() command = uri.getPath().split("/") if not command[1] == "ajax": raise query = {} try: for x in uri.getRawQuery().split("&"): x2 = URLDecoder().decode(x, "UTF-8") k, v = x2.split("=", 1) query[k] = v except: pass if command[2] == "webadmin": if command[3] == "stop": q = QuestManager.getInstance().getQuest(WebAdmin.qn) try: q.cancelQuestTimers("webadmin_stop") q.startQuestTimer("webadmin_stop", 1000, None, None) except: pass r = "webAdmin stop" elif command[3] == "restart": q = QuestManager.getInstance().getQuest(WebAdmin.qn) try: q.cancelQuestTimers("webadmin_restart") q.startQuestTimer("webadmin_restart", 1000, None, None) except: pass r = "webAdmin restart" else: exchange.sendResponseHeaders(501, 0) return elif command[2] == "quest": if command[3] == "list": r2 = {} for quest in QuestManager.getInstance().getAllManagedScripts(): qn = quest.getName() r2[qn] = {} if "req" in query: for c in query["req"].split(","): r2[qn][c] = self.getQuestInfo(c, quest) r2 = r2.items() r2.sort() r = JSON().toJSON(r2) rh = exchange.getResponseHeaders() rh.set("Content-Type", "application/json") elif command[3] == "unload": if not self.checkQuery(query, ["name"]): raise QuestManager.getInstance().getQuest(query["name"]).unload() elif command[3] == "reload": if not self.checkQuery(query, ["name"]): raise QuestManager.getInstance().getQuest(query["name"]).reload() elif command[3] == "get_source": if not self.checkQuery(query, ["name"]): raise file = QuestManager.getInstance().getQuest(query["name"]).getScriptFile() try: i = open(file.toString(), "r") except: exchange.sendResponseHeaders(404, 0) return r = i.read() i.close() rh = exchange.getResponseHeaders() rh.set("Content-Type", "text/plain; charset=utf-8") else: exchange.sendResponseHeaders(501, 0) return elif command[2] == "script": if command[3] == "writefile_exec": if not self.checkQuery(query, ["file"]): raise query["file"] = query["file"].replace("\\", "/") query["file"] = query["file"].split("/")[-1] path = sourcepath.replace("\\", "/") + "/custom/WebAdmin/WebRoot/temp/" + query["file"] o = open(path, "w") o.write(ibuff) o.close() file = File(path) try: L2ScriptEngineManager.getInstance().executeScript(file) except ScriptException, e: L2ScriptEngineManager.getInstance().reportScriptFileError(file, e) elif command[3] == "execjy": pre_script = """ import sys sys.stdout = out_writer sys.stderr = out_writer """ post_script = """ import sys sys.stdout = sys.__stdout__ sys.stderr = sys.__stderr__ """ r = self.exec_script("jython", pre_script + ibuff, post_script) elif command[3] == "execbsh": r = self.exec_script("bsh", ibuff) elif command[3] == "execjs": r = self.exec_script("js", ibuff) elif command[3] == "execjava": r = self.exec_script("java", ibuff) else: exchange.sendResponseHeaders(501, 0) return elif command[2] == "player": if command[3] == "list": r2 = {} for player in L2World.getInstance().getAllPlayersArray(): objid = self.getPlayerInfo("objid", player) r2[objid] = {} if "req" in query: for c in query["req"].split(","): r2[objid][c] = self.getPlayerInfo(c, player) r = JSON().toJSON(r2) rh = exchange.getResponseHeaders() rh.set("Content-Type", "application/json") elif command[3] == "info": if not self.checkQuery(query, ["objid", "req"]): raise player = L2World.getInstance().getPlayer(int(query["objid"])) if not player: raise r2 = {} for c in query["req"].split(","): r2[c] = self.getPlayerInfo(c, player) r = JSON().toJSON(r2) rh = exchange.getResponseHeaders() rh.set("Content-Type", "application/json") elif command[3] == "edit": if not self.checkQuery(query, ["objid"]): raise player = L2World.getInstance().getPlayer(int(query["objid"])) if not player: raise del query["objid"] for c in query: self.setPlayerInfo(c, query[c], player=player) elif command[3] == "teleport": if not self.checkQuery(query, ["objid", "x", "y", "z"]): raise x = int("%d" % float(query["x"])) y = int("%d" % float(query["y"])) z = int("%d" % float(query["z"])) player = L2World.getInstance().getPlayer(int(query["objid"])) if not player: raise player.teleToLocation(x, y, z, 0, False) else: exchange.sendResponseHeaders(501, 0) return
def handleImpl(self, exchange, ibuff): r = "" try: uri = exchange.getRequestURI() command = uri.getPath().split("/") if not command[1] == "ajax": raise query = {} try: for x in uri.getRawQuery().split("&"): x2 = URLDecoder().decode(x, 'UTF-8') k, v = x2.split("=", 1) query[k] = v except: pass if command[2] == "webadmin": if command[3] == "stop": q = QuestManager.getInstance().getQuest(WebAdmin.qn) try: q.cancelQuestTimers("webadmin_stop") q.startQuestTimer("webadmin_stop", 1000, None, None) except: pass r = "webAdmin stop" elif command[3] == "restart": q = QuestManager.getInstance().getQuest(WebAdmin.qn) try: q.cancelQuestTimers("webadmin_restart") q.startQuestTimer("webadmin_restart", 1000, None, None) except: pass r = "webAdmin restart" else: exchange.sendResponseHeaders(501, 0) return elif command[2] == "quest": if command[3] == "list": r2 = {} for quest in QuestManager.getInstance( ).getAllManagedScripts(): qn = quest.getName() r2[qn] = {} if 'req' in query: for c in query['req'].split(","): r2[qn][c] = self.getQuestInfo(c, quest) r2 = r2.items() r2.sort() r = JSON().toJSON(r2) rh = exchange.getResponseHeaders() rh.set("Content-Type", "application/json") elif command[3] == "unload": if not self.checkQuery(query, ['name']): raise QuestManager.getInstance().getQuest(query['name']).unload() elif command[3] == "reload": if not self.checkQuery(query, ['name']): raise QuestManager.getInstance().getQuest(query['name']).reload() elif command[3] == "get_source": if not self.checkQuery(query, ['name']): raise file = QuestManager.getInstance().getQuest( query['name']).getScriptFile() try: i = open(file.toString(), "r") except: exchange.sendResponseHeaders(404, 0) return r = i.read() i.close() rh = exchange.getResponseHeaders() rh.set("Content-Type", "text/plain; charset=utf-8") else: exchange.sendResponseHeaders(501, 0) return elif command[2] == "script": if command[3] == "writefile_exec": if not self.checkQuery(query, ['file']): raise query['file'] = query['file'].replace("\\", "/") query['file'] = query['file'].split("/")[-1] path = sourcepath.replace( "\\", "/") + "/custom/WebAdmin/WebRoot/temp/" + query['file'] o = open(path, "w") o.write(ibuff) o.close() file = File(path) try: L2ScriptEngineManager.getInstance().executeScript(file) except ScriptException, e: L2ScriptEngineManager.getInstance( ).reportScriptFileError(file, e) elif command[3] == "execjy": pre_script = """ import sys sys.stdout = out_writer sys.stderr = out_writer """ post_script = """ import sys sys.stdout = sys.__stdout__ sys.stderr = sys.__stderr__ """ r = self.exec_script("jython", pre_script + ibuff, post_script) elif command[3] == "execbsh": r = self.exec_script("bsh", ibuff) elif command[3] == "execjs": r = self.exec_script("js", ibuff) elif command[3] == "execjava": r = self.exec_script("java", ibuff) else: exchange.sendResponseHeaders(501, 0) return elif command[2] == "player": if command[3] == "list": r2 = {} for player in L2World.getInstance().getAllPlayersArray(): objid = self.getPlayerInfo("objid", player) r2[objid] = {} if 'req' in query: for c in query['req'].split(","): r2[objid][c] = self.getPlayerInfo(c, player) r = JSON().toJSON(r2) rh = exchange.getResponseHeaders() rh.set("Content-Type", "application/json") elif command[3] == "info": if not self.checkQuery(query, ['objid', 'req']): raise player = L2World.getInstance().getPlayer( int(query['objid'])) if not player: raise r2 = {} for c in query['req'].split(","): r2[c] = self.getPlayerInfo(c, player) r = JSON().toJSON(r2) rh = exchange.getResponseHeaders() rh.set("Content-Type", "application/json") elif command[3] == "edit": if not self.checkQuery(query, ['objid']): raise player = L2World.getInstance().getPlayer( int(query['objid'])) if not player: raise del query['objid'] for c in query: self.setPlayerInfo(c, query[c], player=player) elif command[3] == "teleport": if not self.checkQuery(query, ['objid', 'x', 'y', 'z']): raise x = int("%d" % float(query['x'])) y = int("%d" % float(query['y'])) z = int("%d" % float(query['z'])) player = L2World.getInstance().getPlayer( int(query['objid'])) if not player: raise player.teleToLocation(x, y, z, 0, False) else: exchange.sendResponseHeaders(501, 0) return