コード例 #1
0
ファイル: WebAdmin.py プロジェクト: gamer-lineage2/s4L2J
 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()
コード例 #2
0
 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()
コード例 #3
0
ファイル: WebAdmin.py プロジェクト: gamer-lineage2/s4L2J
    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
コード例 #4
0
    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