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 000000000..d673496b5 Binary files /dev/null and b/data/default.bak.db differ diff --git a/data/default.db b/data/default.db new file mode 100755 index 000000000..d673496b5 Binary files /dev/null and b/data/default.db differ 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']