From e92fc4cfd1a21e20250e94804f2054576f8d41ae Mon Sep 17 00:00:00 2001 From: midoks Date: Sun, 14 Oct 2018 11:49:24 +0800 Subject: [PATCH] u --- class/public.py | 16 ++- data/db.py | 290 ++++++++++++++++++++++++++++++++++++++++++++ data/default.bak.db | Bin 0 -> 17408 bytes data/default.db | Bin 0 -> 17408 bytes static/js/soft.js | 2 +- views/plugins.py | 8 +- 6 files changed, 306 insertions(+), 10 deletions(-) create mode 100755 data/db.py create mode 100755 data/default.bak.db create mode 100755 data/default.db diff --git a/class/public.py b/class/public.py index 6dad7a2b5..32eade083 100755 --- a/class/public.py +++ b/class/public.py @@ -10,17 +10,23 @@ import shlex import datetime import subprocess import re - -from random import Random -from flask import jsonify +import hashlib def getRunDir(): return os.getcwd() +runDir = getRunDir() +print runDir + "/class/" +sys.path.append(runDir + "/class/") +import db + +from random import Random +from flask import jsonify + def M(table): - import db + sql = db.Sql() return sql.table(table) @@ -28,7 +34,6 @@ def M(table): def md5(str): # 生成MD5 try: - import hashlib m = hashlib.md5() m.update(str) return m.hexdigest() @@ -89,7 +94,6 @@ def returnJson(status, msg, args=()): def returnMsg(status, msg, args=()): - import json # 取通用字曲返回 logMessage = json.loads( readFile('static/language/' + get_language() + '/public.json')) diff --git a/data/db.py b/data/db.py new file mode 100755 index 000000000..05dda89ea --- /dev/null +++ b/data/db.py @@ -0,0 +1,290 @@ +#coding: utf-8 +# +------------------------------------------------------------------- +# | 宝塔Linux面板 +# +------------------------------------------------------------------- +# | Copyright (c) 2015-2016 宝塔软件(http://bt.cn) All rights reserved. +# +------------------------------------------------------------------- +# | Author: 黄文良 <287962566@qq.com> +# +------------------------------------------------------------------- + +import sqlite3 +import os + +class Sql(): + #------------------------------ + # 数据库操作类 For sqlite3 + #------------------------------ + __DB_FILE = None # 数据库文件 + __DB_CONN = None # 数据库连接对象 + __DB_TABLE = "" # 被操作的表名称 + __OPT_WHERE = "" # where条件 + __OPT_LIMIT = "" # limit条件 + __OPT_ORDER = "" # order条件 + __OPT_FIELD = "*" # field条件 + __OPT_PARAM = () # where值 + + def __init__(self): + self.__DB_FILE = 'data/default.db' + + def __GetConn(self): + #取数据库对象 + try: + if self.__DB_CONN == None: + self.__DB_CONN = sqlite3.connect(self.__DB_FILE) + except Exception,ex: + return "error: " + str(ex) + + def dbfile(self,name): + self.__DB_FILE = 'data/' + name + '.db' + return self + + def table(self,table): + #设置表名 + self.__DB_TABLE = table + return self + + + def where(self,where,param): + #WHERE条件 + if where: + self.__OPT_WHERE = " WHERE " + where + self.__OPT_PARAM = param + return self + + + def order(self,order): + #ORDER条件 + if len(order): + self.__OPT_ORDER = " ORDER BY "+order + return self + + + def limit(self,limit): + #LIMIT条件 + if len(limit): + self.__OPT_LIMIT = " LIMIT "+limit + return self + + + def field(self,field): + #FIELD条件 + if len(field): + self.__OPT_FIELD = field + return self + + + def select(self): + #查询数据集 + self.__GetConn() + try: + sql = "SELECT " + self.__OPT_FIELD + " FROM " + self.__DB_TABLE + self.__OPT_WHERE + self.__OPT_ORDER + self.__OPT_LIMIT + result = self.__DB_CONN.execute(sql,self.__OPT_PARAM) + data = result.fetchall() + #构造字曲系列 + if self.__OPT_FIELD != "*": + field = self.__OPT_FIELD.split(',') + tmp = [] + for row in data: + i=0 + tmp1 = {} + for key in field: + tmp1[key] = row[i] + i += 1 + tmp.append(tmp1) + del(tmp1) + data = tmp + del(tmp) + else: + #将元组转换成列表 + tmp = map(list,data) + data = tmp + del(tmp) + self.__close() + return data + except Exception,ex: + return "error: " + str(ex) + + + def getField(self,keyName): + #取回指定字段 + result = self.field(keyName).select(); + if len(result) == 1: + return result[0][keyName] + return result + + + def setField(self,keyName,keyValue): + #更新指定字段 + return self.save(keyName,(keyValue,)) + + + def find(self): + #取一行数据 + result = self.limit("1").select() + if len(result) == 1: + return result[0] + return result + + + def count(self): + #取行数 + key="COUNT(*)" + data = self.field(key).select() + try: + return int(data[0][key]) + except: + return 0 + + + def add(self,keys,param): + #插入数据 + self.__GetConn() + self.__DB_CONN.text_factory = str + try: + values="" + for key in keys.split(','): + values += "?," + values = self.checkInput(values[0:len(values)-1]); + sql = "INSERT INTO "+self.__DB_TABLE+"("+keys+") "+"VALUES("+values+")" + result = self.__DB_CONN.execute(sql,param) + id = result.lastrowid + self.__close() + self.__DB_CONN.commit() + return id + except Exception,ex: + return "error: " + str(ex) + + def checkInput(self,data): + if not data: return data; + if type(data) != str: return data; + checkList = [ + {'d':'<','r':'<'}, + {'d':'>','r':'>'}, + {'d':'\'','r':'‘'}, + {'d':'"','r':'“'}, + {'d':'&','r':'&'}, + {'d':'#','r':'#'}, + {'d':'<','r':'<'} + ] + for v in checkList: + data = data.replace(v['d'],v['r']); + return data; + + def addAll(self,keys,param): + #插入数据 + self.__GetConn() + self.__DB_CONN.text_factory = str + try: + values="" + for key in keys.split(','): + values += "?," + values = values[0:len(values)-1] + sql = "INSERT INTO "+self.__DB_TABLE+"("+keys+") "+"VALUES("+values+")" + result = self.__DB_CONN.execute(sql,param) + return True + except Exception,ex: + return "error: " + str(ex) + + def commit(self): + self.__close() + self.__DB_CONN.commit() + + + def save(self,keys,param): + #更新数据 + self.__GetConn() + self.__DB_CONN.text_factory = str + try: + opt = "" + for key in keys.split(','): + opt += key + "=?," + opt = opt[0:len(opt)-1] + sql = "UPDATE " + self.__DB_TABLE + " SET " + opt+self.__OPT_WHERE + + import public + public.writeFile('/tmp/test.pl',sql) + + #处理拼接WHERE与UPDATE参数 + tmp = list(param) + for arg in self.__OPT_PARAM: + tmp.append(arg) + self.__OPT_PARAM = tuple(tmp) + result = self.__DB_CONN.execute(sql,self.__OPT_PARAM) + self.__close() + self.__DB_CONN.commit() + return result.rowcount + except Exception,ex: + return "error: " + str(ex) + + def delete(self,id=None): + #删除数据 + self.__GetConn() + try: + if id: + self.__OPT_WHERE = " WHERE id=?" + self.__OPT_PARAM = (id,) + sql = "DELETE FROM " + self.__DB_TABLE + self.__OPT_WHERE + result = self.__DB_CONN.execute(sql,self.__OPT_PARAM) + self.__close() + self.__DB_CONN.commit() + return result.rowcount + except Exception,ex: + return "error: " + str(ex) + + + def execute(self,sql,param): + #执行SQL语句返回受影响行 + self.__GetConn() + try: + result = self.__DB_CONN.execute(sql,param) + self.__DB_CONN.commit() + return result.rowcount + except Exception,ex: + return "error: " + str(ex) + + + def query(self,sql,param): + #执行SQL语句返回数据集 + self.__GetConn() + try: + result = self.__DB_CONN.execute(sql,param) + #将元组转换成列表 + data = map(list,result) + return data + except Exception,ex: + return "error: " + str(ex) + + def create(self,name): + #创建数据表 + self.__GetConn() + import public + script = public.readFile('data/' + name + '.sql') + result = self.__DB_CONN.executescript(script) + self.__DB_CONN.commit() + return result.rowcount + + def fofile(self,filename): + #执行脚本 + self.__GetConn() + import public + script = public.readFile(filename) + result = self.__DB_CONN.executescript(script) + self.__DB_CONN.commit() + return result.rowcount + + def __close(self): + #清理条件属性 + self.__OPT_WHERE = "" + self.__OPT_FIELD = "*" + self.__OPT_ORDER = "" + self.__OPT_LIMIT = "" + self.__OPT_PARAM = () + + def close(self): + #释放资源 + try: + self.__DB_CONN.close() + self.__DB_CONN = None + except: + pass + diff --git a/data/default.bak.db b/data/default.bak.db new file mode 100755 index 0000000000000000000000000000000000000000..d673496b5ab1f0d03cbd881004af0f67b1d05baf GIT binary patch literal 17408 zcmeHN-A~(A6t{B|l291q0a>VGu~Z>}%7^Vh2uPDkyR<_sltNI)q>UKI0gJ>Av9r*< z1*EFlG;Mp^r1pWWlO`c`f50^LvG04>+g>KMY5#!jWiLCvHwm^WrEW9|=w8{^*T?tc zoZmU;+BqkSw{B>b%IAzyLALlf6J%JHxy17f!*s#f4QHctKqJ_=fh+51AJ*(*hW{E2 z!P5Zx$L`aG{w0mW22eUhfFf`V2t*^WNF>y0FXi;=V_2FlK@p$`oD2kP|3~Og2K|j{ zaG`}FKoK}A2t*L#qGeMpnH>St$L6$>T9NblP?SZzQN_@6+8TZTpA}_OIVb}D5wQKA zMSn1G&_WTQ2%HH72G}seUFeT+`kJP1jaDj^(N$U5C>L=PZcBz?$=QOY)A#?GP&gHW zBJf5CQ2&1;*ytdNz?ne6_Wuxbk74eyH`(35ZPfR6#HxP4hPmEec3ZLJ)x1i+R!AMV zvXGiir}*^rrEpq=M4S~kPa%%xM;QVab2!p!XS!ZLq7waia1rEkv6!NA$n zTzbgvY27KR&AynT%LSmMQy-BIMaNwDc}~l#o<64bxn~kNo3*sYJne(?fi~{qMRpkr zVQ%Ijx4L4gn`Kp3RL?DPiRF1XU@trbBL}N-6z0yKXSd%cz-W3_)7MtXCFq(XQ>XgI z=78u~qabU#6CBxEcitK$%MGRnhw7CeQKyW#Cb1?`hul09qHmTf>MF#wK2u8$u83u< z6y3axPewmC)gXzHE6cR8`gu#{?cl+5V5%Ck*=}@DL^5j_=b| zTSlPzaa)*+#n>H$Ej4SqoouRRvk`V%Ym@HVUJvXQ9s{<+%^p%wHqDArf~~q~*RrCh z#k!wi`z?Yq?mu;Js@1M=nCt6ftD9K3Mi{$sZFh^-Ap4gLZ)!~@Udhq5NSN#CVYllX zSw%Ak=Q$52K=RLp_ce4hnBEPqzPG)WB)0zt(Gr7xM|$iA_kU}urlTnW zrx^k2|EF1dly{0iYY0&PZw)^>nj&zT5upBmnzcuHrwFu$fbIVwro;r^3;cvWWtX7& zKbLBzGt6-uyA#9FTuU}LOk8!lqo zS_C!{?F7&37*Cwh!&Rr75lr*V$$iSWL$k_wU5fi6pu>O+Wya?T?P(XC;}9LlZL=2Y=q%v`{P~1`2V_+D8;3mG&v!U z!y!+M#gmg`vY?L1NkPmhadA=_5fjM~VMG)pK}-yb(y%D-;`o#(O^qi6DLFBjkj4{< XOPiY`icz57|0hl1lpl(~@geXZ>^V8& literal 0 HcmV?d00001 diff --git a/data/default.db b/data/default.db new file mode 100755 index 0000000000000000000000000000000000000000..d673496b5ab1f0d03cbd881004af0f67b1d05baf GIT binary patch literal 17408 zcmeHN-A~(A6t{B|l291q0a>VGu~Z>}%7^Vh2uPDkyR<_sltNI)q>UKI0gJ>Av9r*< z1*EFlG;Mp^r1pWWlO`c`f50^LvG04>+g>KMY5#!jWiLCvHwm^WrEW9|=w8{^*T?tc zoZmU;+BqkSw{B>b%IAzyLALlf6J%JHxy17f!*s#f4QHctKqJ_=fh+51AJ*(*hW{E2 z!P5Zx$L`aG{w0mW22eUhfFf`V2t*^WNF>y0FXi;=V_2FlK@p$`oD2kP|3~Og2K|j{ zaG`}FKoK}A2t*L#qGeMpnH>St$L6$>T9NblP?SZzQN_@6+8TZTpA}_OIVb}D5wQKA zMSn1G&_WTQ2%HH72G}seUFeT+`kJP1jaDj^(N$U5C>L=PZcBz?$=QOY)A#?GP&gHW zBJf5CQ2&1;*ytdNz?ne6_Wuxbk74eyH`(35ZPfR6#HxP4hPmEec3ZLJ)x1i+R!AMV zvXGiir}*^rrEpq=M4S~kPa%%xM;QVab2!p!XS!ZLq7waia1rEkv6!NA$n zTzbgvY27KR&AynT%LSmMQy-BIMaNwDc}~l#o<64bxn~kNo3*sYJne(?fi~{qMRpkr zVQ%Ijx4L4gn`Kp3RL?DPiRF1XU@trbBL}N-6z0yKXSd%cz-W3_)7MtXCFq(XQ>XgI z=78u~qabU#6CBxEcitK$%MGRnhw7CeQKyW#Cb1?`hul09qHmTf>MF#wK2u8$u83u< z6y3axPewmC)gXzHE6cR8`gu#{?cl+5V5%Ck*=}@DL^5j_=b| zTSlPzaa)*+#n>H$Ej4SqoouRRvk`V%Ym@HVUJvXQ9s{<+%^p%wHqDArf~~q~*RrCh z#k!wi`z?Yq?mu;Js@1M=nCt6ftD9K3Mi{$sZFh^-Ap4gLZ)!~@Udhq5NSN#CVYllX zSw%Ak=Q$52K=RLp_ce4hnBEPqzPG)WB)0zt(Gr7xM|$iA_kU}urlTnW zrx^k2|EF1dly{0iYY0&PZw)^>nj&zT5upBmnzcuHrwFu$fbIVwro;r^3;cvWWtX7& zKbLBzGt6-uyA#9FTuU}LOk8!lqo zS_C!{?F7&37*Cwh!&Rr75lr*V$$iSWL$k_wU5fi6pu>O+Wya?T?P(XC;}9LlZL=2Y=q%v`{P~1`2V_+D8;3mG&v!U z!y!+M#gmg`vY?L1NkPmhadA=_5fjM~VMG)pK}-yb(y%D-;`o#(O^qi6DLFBjkj4{< XOPiY`icz57|0hl1lpl(~@geXZ>^V8& literal 0 HcmV?d00001 diff --git a/static/js/soft.js b/static/js/soft.js index f161b3209..5120258e7 100755 --- a/static/js/soft.js +++ b/static/js/soft.js @@ -1765,7 +1765,7 @@ function GetSList(isdisplay) { var condition = (search + type + page).slice(1); $.post('/plugins/list?' + condition, '', function(rdata) { - console.log(rdata); + // console.log(rdata); layer.close(loadT); var tBody = ''; var sBody = ''; diff --git a/views/plugins.py b/views/plugins.py index 5e5a4d863..73c8be38d 100644 --- a/views/plugins.py +++ b/views/plugins.py @@ -40,6 +40,8 @@ def file(): @plugins.route("/list", methods=['GET', 'POST']) def list(): + public.M('tasks') + data = json.loads(public.readFile("data/type.json")) ret = {} ret["type"] = data @@ -73,16 +75,16 @@ def list(): def install(): rundir = public.getRunDir() - name = request.form.get('name', '') if name.strip() == '': - return public.retJson(-1, "123", ()) + return public.retJson(-1, "缺少name数据!", ()) infoJsonPos = __plugin_name + '/' + name + '/' + 'info.json' if not os.path.exists(infoJsonPos): - return public.retJson(-1, "1233", ()) + return public.retJson(-1, "info.json数据不存在!", ()) + pluginInfo = json.loads(public.readFile(infoJsonPos)) sh = __plugin_name + '/' + name + '/' + pluginInfo['shell']