mirror of
https://github.com/midoks/mdserver-web.git
synced 2026-10-18 23:45:52 +08:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a1d8523dd9 | ||
|
|
295e456a20 | ||
|
|
453cb4cf14 | ||
|
|
56a1ffed2a | ||
|
|
b94f302fbe | ||
|
|
3a278f4cc6 | ||
|
|
67b7f9cf43 | ||
|
|
b3dc24428c | ||
|
|
233e6dfc0f | ||
|
|
07e74a8947 | ||
|
|
4eed1e8a93 | ||
|
|
1b91af6f22 | ||
|
|
9bc824906b | ||
|
|
394f345764 | ||
|
|
a10a11817b | ||
|
|
6b82dd5eca | ||
|
|
a5d976ad36 | ||
|
|
4bb4746a1b | ||
|
|
9fad06585f | ||
|
|
50ed66d26a | ||
|
|
ed17622a0b | ||
|
|
b8e993cd04 | ||
|
|
7fe6744c09 | ||
|
|
beb085e95c | ||
|
|
657f408a8b | ||
|
|
3994f1505e | ||
|
|
0ecc9307f1 | ||
|
|
93de3dd3ab | ||
|
|
f99225f172 | ||
|
|
cd9b043525 | ||
|
|
0e5c59dae2 | ||
|
|
1a5c7b9a3f | ||
|
|
2282776020 | ||
|
|
cd2b07f5d2 | ||
|
|
a5d4d53883 | ||
|
|
9e463cec7a | ||
|
|
e489bd43b8 | ||
|
|
983eb38165 | ||
|
|
677894ca35 | ||
|
|
a302ded8b2 | ||
|
|
3eeee10de6 | ||
|
|
160998ba6e | ||
|
|
8ece38c082 | ||
|
|
52d4215a80 | ||
|
|
029b548af0 | ||
|
|
4db10d22a7 | ||
|
|
1d3ca158cb | ||
|
|
74e19287e4 | ||
|
|
ece8dd8b19 | ||
|
|
d082297b25 |
@@ -1,4 +1,4 @@
|
|||||||
### mdserver-web 0.9.2
|
### mdserver-web 0.9.5
|
||||||
|
|
||||||
简单的Linux面板,感谢BT.CN写出如此好的web管理软件。我一看到,就知道这是我一直想要的页面化管理方式。
|
简单的Linux面板,感谢BT.CN写出如此好的web管理软件。我一看到,就知道这是我一直想要的页面化管理方式。
|
||||||
复制了后台管理界面,按照自己想要的方式写了一版。
|
复制了后台管理界面,按照自己想要的方式写了一版。
|
||||||
@@ -71,13 +71,14 @@ docker run -itd --name mw-server --privileged=true -p 7200:7200 -p 80:80 -p 443:
|
|||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
### 版本更新 0.9.3
|
### 版本更新 0.9.5
|
||||||
|
|
||||||
|
* 页面更新优化[2].
|
||||||
|
* 修复maridb的用户管理[2].
|
||||||
|
* Gogs初始化提示更人性.
|
||||||
|
* MySQL&&MariaDB修改密码修复.
|
||||||
|
* MySQL&&MariaDB导入修复.
|
||||||
|
|
||||||
* 批量域名添加修复。
|
|
||||||
* 常用命令说明。
|
|
||||||
* 重写页面更新功能。
|
|
||||||
* MySQL8.0安装地址修改。
|
|
||||||
* 删除MySQL[Yum]插件。
|
|
||||||
|
|
||||||
### JSDelivr安装地址
|
### JSDelivr安装地址
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ from flask import request
|
|||||||
|
|
||||||
class config_api:
|
class config_api:
|
||||||
|
|
||||||
__version = '0.9.3'
|
__version = '0.9.5'
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
pass
|
pass
|
||||||
|
|||||||
@@ -1140,10 +1140,10 @@ class site_api:
|
|||||||
if conf.find(rep) == -1:
|
if conf.find(rep) == -1:
|
||||||
rep = '#error_page 404/404.html;'
|
rep = '#error_page 404/404.html;'
|
||||||
data = '''
|
data = '''
|
||||||
# AUTH_START
|
#AUTH_START
|
||||||
auth_basic "Authorization";
|
auth_basic "Authorization";
|
||||||
auth_basic_user_file %s;
|
auth_basic_user_file %s;
|
||||||
# AUTH_END''' % (filename,)
|
#AUTH_END''' % (filename,)
|
||||||
conf = conf.replace(rep, rep + data)
|
conf = conf.replace(rep, rep + data)
|
||||||
mw.writeFile(configFile, conf)
|
mw.writeFile(configFile, conf)
|
||||||
# 写密码配置
|
# 写密码配置
|
||||||
@@ -2026,7 +2026,7 @@ location ^~ {from} {
|
|||||||
return 404;
|
return 404;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
# SECURITY-END
|
#SECURITY-END
|
||||||
include %s/enable-php-''' % (fix.strip().replace(',', '|'), domains.strip().replace(',', ' '), pre_path)
|
include %s/enable-php-''' % (fix.strip().replace(',', '|'), domains.strip().replace(',', ' '), pre_path)
|
||||||
conf = re.sub(re_path, rconf, conf)
|
conf = re.sub(re_path, rconf, conf)
|
||||||
mw.writeLog('网站管理', '站点[' + name + ']已开启防盗链!')
|
mw.writeLog('网站管理', '站点[' + name + ']已开启防盗链!')
|
||||||
|
|||||||
@@ -684,22 +684,23 @@ class system_api:
|
|||||||
|
|
||||||
dist_mw = toPath + '/mw.zip'
|
dist_mw = toPath + '/mw.zip'
|
||||||
if not os.path.exists(dist_mw):
|
if not os.path.exists(dist_mw):
|
||||||
mw.execShell('wget -O ' + dist_mw + ' ' + newUrl)
|
mw.execShell(
|
||||||
|
'wget --no-check-certificate -O ' + dist_mw + ' ' + newUrl)
|
||||||
|
|
||||||
dist_to = toPath + "/mdserver-web-" + version
|
dist_to = toPath + "/mdserver-web-" + version
|
||||||
if not os.path.exists(dist_to):
|
if not os.path.exists(dist_to):
|
||||||
mw.execShell('unzip -o ' + toPath +
|
os.system('unzip -o ' + toPath +
|
||||||
'/mw.zip' + ' -d ' + toPath)
|
'/mw.zip' + ' -d ' + toPath)
|
||||||
|
|
||||||
cmd_cp = "cp -rf " + toPath + '/mdserver-web-' + \
|
cmd_cp = 'cp -rf ' + toPath + '/mdserver-web-' + \
|
||||||
version + "/* " + mw.getServerDir() + "/mdserver-web"
|
version + '/* ' + mw.getServerDir() + '/mdserver-web'
|
||||||
mw.execShell(cmd_cp)
|
mw.execShell(cmd_cp)
|
||||||
|
|
||||||
mw.execShell('rm -rf ' + toPath + '/mdserver-web-' + version)
|
mw.execShell('rm -rf ' + toPath + '/mdserver-web-' + version)
|
||||||
mw.execShell('rm -rf ' + toPath + '/mw.zip')
|
mw.execShell('rm -rf ' + toPath + '/mw.zip')
|
||||||
|
|
||||||
self.restartMw()
|
self.restartMw()
|
||||||
return mw.returnJson(True, '安装更新成功,需自己重启!')
|
return mw.returnJson(True, '安装更新成功!')
|
||||||
|
|
||||||
return mw.returnJson(False, '已经是最新,无需更新!')
|
return mw.returnJson(False, '已经是最新,无需更新!')
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ class ORM:
|
|||||||
__DB_PASS = None
|
__DB_PASS = None
|
||||||
__DB_USER = 'root'
|
__DB_USER = 'root'
|
||||||
__DB_PORT = 3306
|
__DB_PORT = 3306
|
||||||
|
__DB_NAME = ''
|
||||||
__DB_HOST = 'localhost'
|
__DB_HOST = 'localhost'
|
||||||
__DB_CONN = None
|
__DB_CONN = None
|
||||||
__DB_CUR = None
|
__DB_CUR = None
|
||||||
@@ -27,21 +28,25 @@ class ORM:
|
|||||||
if os.path.exists(self.__DB_SOCKET):
|
if os.path.exists(self.__DB_SOCKET):
|
||||||
try:
|
try:
|
||||||
self.__DB_CONN = pymysql.connect(host=self.__DB_HOST, user=self.__DB_USER, passwd=self.__DB_PASS,
|
self.__DB_CONN = pymysql.connect(host=self.__DB_HOST, user=self.__DB_USER, passwd=self.__DB_PASS,
|
||||||
|
database=self.__DB_NAME,
|
||||||
port=int(self.__DB_PORT), charset=self.__DB_CHARSET, connect_timeout=1,
|
port=int(self.__DB_PORT), charset=self.__DB_CHARSET, connect_timeout=1,
|
||||||
unix_socket=self.__DB_SOCKET, cursorclass=pymysql.cursors.DictCursor)
|
unix_socket=self.__DB_SOCKET, cursorclass=pymysql.cursors.DictCursor)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.__DB_HOST = '127.0.0.1'
|
self.__DB_HOST = '127.0.0.1'
|
||||||
self.__DB_CONN = pymysql.connect(host=self.__DB_HOST, user=self.__DB_USER, passwd=self.__DB_PASS,
|
self.__DB_CONN = pymysql.connect(host=self.__DB_HOST, user=self.__DB_USER, passwd=self.__DB_PASS,
|
||||||
|
database=self.__DB_NAME,
|
||||||
port=int(self.__DB_PORT), charset=self.__DB_CHARSET, connect_timeout=1,
|
port=int(self.__DB_PORT), charset=self.__DB_CHARSET, connect_timeout=1,
|
||||||
unix_socket=self.__DB_SOCKET, cursorclass=pymysql.cursors.DictCursor)
|
unix_socket=self.__DB_SOCKET, cursorclass=pymysql.cursors.DictCursor)
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
self.__DB_CONN = pymysql.connect(host=self.__DB_HOST, user=self.__DB_USER, passwd=self.__DB_PASS,
|
self.__DB_CONN = pymysql.connect(host=self.__DB_HOST, user=self.__DB_USER, passwd=self.__DB_PASS,
|
||||||
|
database=self.__DB_NAME,
|
||||||
port=int(self.__DB_PORT), charset=self.__DB_CHARSET, connect_timeout=1,
|
port=int(self.__DB_PORT), charset=self.__DB_CHARSET, connect_timeout=1,
|
||||||
cursorclass=pymysql.cursors.DictCursor)
|
cursorclass=pymysql.cursors.DictCursor)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.__DB_HOST = '127.0.0.1'
|
self.__DB_HOST = '127.0.0.1'
|
||||||
self.__DB_CONN = pymysql.connect(host=self.__DB_HOST, user=self.__DB_USER, passwd=self.__DB_PASS,
|
self.__DB_CONN = pymysql.connect(host=self.__DB_HOST, user=self.__DB_USER, passwd=self.__DB_PASS,
|
||||||
|
database=self.__DB_NAME,
|
||||||
port=int(self.__DB_PORT), charset=self.__DB_CHARSET, connect_timeout=1,
|
port=int(self.__DB_PORT), charset=self.__DB_CHARSET, connect_timeout=1,
|
||||||
cursorclass=pymysql.cursors.DictCursor)
|
cursorclass=pymysql.cursors.DictCursor)
|
||||||
|
|
||||||
@@ -69,6 +74,9 @@ class ORM:
|
|||||||
def getPwd(self):
|
def getPwd(self):
|
||||||
return self.__DB_PASS
|
return self.__DB_PASS
|
||||||
|
|
||||||
|
def setDbName(self, name):
|
||||||
|
self.__DB_NAME = name
|
||||||
|
|
||||||
def execute(self, sql):
|
def execute(self, sql):
|
||||||
# 执行SQL语句返回受影响行
|
# 执行SQL语句返回受影响行
|
||||||
if not self.__Conn():
|
if not self.__Conn():
|
||||||
|
|||||||
@@ -48,6 +48,11 @@ def mw_reset_pwd():
|
|||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|
||||||
|
if os.geteuid() != 0:
|
||||||
|
print("请使用root账户执行该命令.")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
os.chdir("/www/server/mdserver-web")
|
os.chdir("/www/server/mdserver-web")
|
||||||
sys.path.append(os.getcwd() + "/class/core")
|
sys.path.append(os.getcwd() + "/class/core")
|
||||||
|
|
||||||
|
|||||||
@@ -388,7 +388,7 @@ def postReceiveLog():
|
|||||||
def getGogsConf():
|
def getGogsConf():
|
||||||
conf = getConf()
|
conf = getConf()
|
||||||
if not os.path.exists(conf):
|
if not os.path.exists(conf):
|
||||||
return mw.returnJson(False, "请先安装初始化!")
|
return mw.returnJson(False, "请先安装初始化!<br/>默认地址:http://" + mw.getLocalIp() + ":3000")
|
||||||
|
|
||||||
gets = [
|
gets = [
|
||||||
{'name': 'DOMAIN', 'type': -1, 'ps': '服务器域名'},
|
{'name': 'DOMAIN', 'type': -1, 'ps': '服务器域名'},
|
||||||
@@ -455,7 +455,7 @@ def userList():
|
|||||||
|
|
||||||
conf = getConf()
|
conf = getConf()
|
||||||
if not os.path.exists(conf):
|
if not os.path.exists(conf):
|
||||||
return mw.returnJson(False, "请先安装初始化!")
|
return mw.returnJson(False, "请先安装初始化!<br/>默认地址:http://" + mw.getLocalIp() + ":3000")
|
||||||
|
|
||||||
import math
|
import math
|
||||||
args = getArgs()
|
args = getArgs()
|
||||||
|
|||||||
@@ -45,11 +45,11 @@ skip-name-resolve = on
|
|||||||
|
|
||||||
log-bin=mysql-bin
|
log-bin=mysql-bin
|
||||||
binlog_format=mixed
|
binlog_format=mixed
|
||||||
expire_logs_days = 10
|
|
||||||
slow_query_log=1
|
slow_query_log=1
|
||||||
slow-query-log-file={$SERVER_APP_PATH}/data/mysql-slow.log
|
slow-query-log-file={$SERVER_APP_PATH}/data/mysql-slow.log
|
||||||
long_query_time=3
|
long_query_time=3
|
||||||
#log_queries_not_using_indexes=on
|
#log_queries_not_using_indexes=on
|
||||||
|
binlog-expire-logs-seconds = 2592000
|
||||||
|
|
||||||
relay-log=mdserver
|
relay-log=mdserver
|
||||||
relay-log-index=mdserver
|
relay-log-index=mdserver
|
||||||
|
|||||||
+42
-26
@@ -150,7 +150,7 @@ def pSqliteDb(dbname='databases'):
|
|||||||
return conn
|
return conn
|
||||||
|
|
||||||
|
|
||||||
def pMysqlDb():
|
def pMysqlDb(name=''):
|
||||||
# pymysql
|
# pymysql
|
||||||
db = mw.getMyORM()
|
db = mw.getMyORM()
|
||||||
# MySQLdb |
|
# MySQLdb |
|
||||||
@@ -159,6 +159,7 @@ def pMysqlDb():
|
|||||||
db.setDbConf(getConf())
|
db.setDbConf(getConf())
|
||||||
db.setPort(getDbPort())
|
db.setPort(getDbPort())
|
||||||
db.setSocket(getSocketFile())
|
db.setSocket(getSocketFile())
|
||||||
|
db.setDbName(name)
|
||||||
|
|
||||||
pwd = pSqliteDb('config').where('id=?', (1,)).getField('mysql_root')
|
pwd = pSqliteDb('config').where('id=?', (1,)).getField('mysql_root')
|
||||||
db.setPwd(pwd)
|
db.setPwd(pwd)
|
||||||
@@ -631,7 +632,7 @@ def isSqlError(mysqlMsg):
|
|||||||
|
|
||||||
|
|
||||||
def __createUser(dbname, username, password, address):
|
def __createUser(dbname, username, password, address):
|
||||||
pdb = pMysqlDb()
|
pdb = pMysqlDb('mysql')
|
||||||
|
|
||||||
if username == 'root':
|
if username == 'root':
|
||||||
dbname = '*'
|
dbname = '*'
|
||||||
@@ -691,8 +692,8 @@ def importDbBackup():
|
|||||||
mw.execShell(cmd)
|
mw.execShell(cmd)
|
||||||
|
|
||||||
pwd = pSqliteDb('config').where('id=?', (1,)).getField('mysql_root')
|
pwd = pSqliteDb('config').where('id=?', (1,)).getField('mysql_root')
|
||||||
|
sock = getSocketFile()
|
||||||
mysql_cmd = mw.getRootDir() + '/server/mysql/bin/mysql -uroot -p' + pwd + \
|
mysql_cmd = getServerDir() + '/bin/mysql -S ' + sock + ' -uroot -p' + pwd + \
|
||||||
' ' + name + ' < ' + file_path_sql
|
' ' + name + ' < ' + file_path_sql
|
||||||
|
|
||||||
# print(mysql_cmd)
|
# print(mysql_cmd)
|
||||||
@@ -797,7 +798,7 @@ def syncGetDatabases():
|
|||||||
if isError != None:
|
if isError != None:
|
||||||
return isError
|
return isError
|
||||||
users = pdb.query(
|
users = pdb.query(
|
||||||
"select User,Host from mysql.user where User!='root' AND Host!='localhost' AND Host!=''")
|
"select User,Host from user where User!='root' AND Host!='localhost' AND Host!=''")
|
||||||
nameArr = ['information_schema', 'performance_schema', 'mysql', 'sys']
|
nameArr = ['information_schema', 'performance_schema', 'mysql', 'sys']
|
||||||
n = 0
|
n = 0
|
||||||
|
|
||||||
@@ -893,16 +894,19 @@ def setRootPwd(version=''):
|
|||||||
|
|
||||||
password = args['password']
|
password = args['password']
|
||||||
try:
|
try:
|
||||||
pdb = pMysqlDb()
|
pdb = pMysqlDb('mysql')
|
||||||
result = pdb.query("show databases")
|
result = pdb.query("show databases")
|
||||||
isError = isSqlError(result)
|
isError = isSqlError(result)
|
||||||
if isError != None:
|
if isError != None:
|
||||||
return isError
|
return isError
|
||||||
|
|
||||||
result = pdb.execute(
|
cmd = "ALTER USER 'root'@'localhost' IDENTIFIED BY '" + password + "';"
|
||||||
"update mysql.user set Password=password('" + password + "') where User='root'")
|
r = pdb.execute(cmd)
|
||||||
pdb.execute("flush privileges")
|
# print(r)
|
||||||
|
|
||||||
pSqliteDb('config').where('id=?', (1,)).save('mysql_root', (password,))
|
pSqliteDb('config').where('id=?', (1,)).save('mysql_root', (password,))
|
||||||
|
orm = pMysqlDb()
|
||||||
|
orm.execute("flush privileges")
|
||||||
return mw.returnJson(True, '数据库root密码修改成功!')
|
return mw.returnJson(True, '数据库root密码修改成功!')
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
return mw.returnJson(False, '修改错误:' + str(ex))
|
return mw.returnJson(False, '修改错误:' + str(ex))
|
||||||
@@ -910,7 +914,7 @@ def setRootPwd(version=''):
|
|||||||
|
|
||||||
def setUserPwd(version=''):
|
def setUserPwd(version=''):
|
||||||
args = getArgs()
|
args = getArgs()
|
||||||
data = checkArgs(args, ['password', 'name'])
|
data = checkArgs(args, ['password', 'name', 'id'])
|
||||||
if not data[0]:
|
if not data[0]:
|
||||||
return data[1]
|
return data[1]
|
||||||
|
|
||||||
@@ -920,16 +924,28 @@ def setUserPwd(version=''):
|
|||||||
try:
|
try:
|
||||||
pdb = pMysqlDb()
|
pdb = pMysqlDb()
|
||||||
psdb = pSqliteDb('databases')
|
psdb = pSqliteDb('databases')
|
||||||
name = psdb.where('id=?', (uid,)).getField('name')
|
data = psdb.field('id,name,accept').where('id=?', (uid,)).find()
|
||||||
|
|
||||||
result = pdb.execute("update mysql.user set Password=password('" +
|
cmd = "SET PASSWORD FOR '" + username + \
|
||||||
newpassword + "') where User='" + username + "'")
|
"'@'localhost' = PASSWORD('" + newpassword + "')"
|
||||||
|
r = pdb.execute(cmd)
|
||||||
|
# print(cmd, r)
|
||||||
|
|
||||||
|
accept = data['accept']
|
||||||
|
alist = accept.split(',')
|
||||||
|
for x in alist:
|
||||||
|
cmd = "SET PASSWORD FOR '" + username + \
|
||||||
|
"'@'" + x + "' = PASSWORD('" + newpassword + "')"
|
||||||
|
r = pdb.execute(cmd)
|
||||||
|
# print(cmd, r)
|
||||||
|
|
||||||
pdb.execute("flush privileges")
|
|
||||||
psdb.where("id=?", (uid,)).setField('password', newpassword)
|
psdb.where("id=?", (uid,)).setField('password', newpassword)
|
||||||
return mw.returnJson(True, mw.getInfo('修改数据库[{1}]密码成功!', (name,)))
|
|
||||||
|
orm = pMysqlDb()
|
||||||
|
orm.execute("flush privileges")
|
||||||
|
return mw.returnJson(True, mw.getInfo('修改数据库[{1}]密码成功!', (data['name'],)))
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
return mw.returnJson(False, mw.getInfo('修改数据库[{1}]密码失败[{2}]!', (name, str(ex),)))
|
return mw.returnJson(False, mw.getInfo('修改数据库[{1}]密码失败[{2}]!', (data['name'], str(ex),)))
|
||||||
|
|
||||||
|
|
||||||
def setDbPs():
|
def setDbPs():
|
||||||
@@ -1022,7 +1038,7 @@ def delDb():
|
|||||||
id = args['id']
|
id = args['id']
|
||||||
name = args['name']
|
name = args['name']
|
||||||
psdb = pSqliteDb('databases')
|
psdb = pSqliteDb('databases')
|
||||||
pdb = pMysqlDb()
|
pdb = pMysqlDb('mysql')
|
||||||
find = psdb.where("id=?", (id,)).field(
|
find = psdb.where("id=?", (id,)).field(
|
||||||
'id,pid,name,username,password,accept,ps,addtime').find()
|
'id,pid,name,username,password,accept,ps,addtime').find()
|
||||||
accept = find['accept']
|
accept = find['accept']
|
||||||
@@ -1031,7 +1047,7 @@ def delDb():
|
|||||||
# 删除MYSQL
|
# 删除MYSQL
|
||||||
result = pdb.execute("drop database `" + name + "`")
|
result = pdb.execute("drop database `" + name + "`")
|
||||||
|
|
||||||
users = pdb.query("select Host from mysql.user where User='" +
|
users = pdb.query("select Host from user where User='" +
|
||||||
username + "' AND Host!='localhost'")
|
username + "' AND Host!='localhost'")
|
||||||
pdb.execute("drop user '" + username + "'@'localhost'")
|
pdb.execute("drop user '" + username + "'@'localhost'")
|
||||||
for us in users:
|
for us in users:
|
||||||
@@ -1051,9 +1067,9 @@ def getDbAccess():
|
|||||||
if not data[0]:
|
if not data[0]:
|
||||||
return data[1]
|
return data[1]
|
||||||
username = args['username']
|
username = args['username']
|
||||||
pdb = pMysqlDb()
|
pdb = pMysqlDb('mysql')
|
||||||
|
|
||||||
users = pdb.query("select Host from mysql.user where User='" +
|
users = pdb.query("select Host from user where User='" +
|
||||||
username + "' AND Host!='localhost'")
|
username + "' AND Host!='localhost'")
|
||||||
|
|
||||||
if len(users) < 1:
|
if len(users) < 1:
|
||||||
@@ -1072,7 +1088,7 @@ def setDbAccess():
|
|||||||
return data[1]
|
return data[1]
|
||||||
name = args['username']
|
name = args['username']
|
||||||
access = args['access']
|
access = args['access']
|
||||||
pdb = pMysqlDb()
|
pdb = pMysqlDb('mysql')
|
||||||
psdb = pSqliteDb('databases')
|
psdb = pSqliteDb('databases')
|
||||||
|
|
||||||
dbname = psdb.where('username=?', (name,)).getField('name')
|
dbname = psdb.where('username=?', (name,)).getField('name')
|
||||||
@@ -1083,7 +1099,7 @@ def setDbAccess():
|
|||||||
else:
|
else:
|
||||||
password = psdb.where("username=?", (name,)).getField('password')
|
password = psdb.where("username=?", (name,)).getField('password')
|
||||||
|
|
||||||
users = pdb.query("select Host from mysql.user where User='" +
|
users = pdb.query("select Host from user where User='" +
|
||||||
name + "' AND Host!='localhost'")
|
name + "' AND Host!='localhost'")
|
||||||
|
|
||||||
for us in users:
|
for us in users:
|
||||||
@@ -1105,11 +1121,11 @@ def setDbRw(version=''):
|
|||||||
uid = args['id']
|
uid = args['id']
|
||||||
rw = args['rw']
|
rw = args['rw']
|
||||||
|
|
||||||
pdb = pMysqlDb()
|
pdb = pMysqlDb('mysql')
|
||||||
psdb = pSqliteDb('databases')
|
psdb = pSqliteDb('databases')
|
||||||
dbname = psdb.where("id=?", (uid,)).getField('name')
|
dbname = psdb.where("id=?", (uid,)).getField('name')
|
||||||
users = pdb.query(
|
users = pdb.query(
|
||||||
"select Host from mysql.user where User='" + username + "'")
|
"select Host from user where User='" + username + "'")
|
||||||
|
|
||||||
# show grants for demo@"127.0.0.1";
|
# show grants for demo@"127.0.0.1";
|
||||||
for x in users:
|
for x in users:
|
||||||
@@ -1374,7 +1390,7 @@ def setDbMasterAccess():
|
|||||||
pdb = pMysqlDb()
|
pdb = pMysqlDb()
|
||||||
psdb = pSqliteDb('master_replication_user')
|
psdb = pSqliteDb('master_replication_user')
|
||||||
password = psdb.where("username=?", (username,)).getField('password')
|
password = psdb.where("username=?", (username,)).getField('password')
|
||||||
users = pdb.query("select Host from mysql.user where User='" +
|
users = pdb.query("select Host from user where User='" +
|
||||||
username + "' AND Host!='localhost'")
|
username + "' AND Host!='localhost'")
|
||||||
for us in users:
|
for us in users:
|
||||||
pdb.execute("drop user '" + username + "'@'" + us["Host"] + "'")
|
pdb.execute("drop user '" + username + "'@'" + us["Host"] + "'")
|
||||||
@@ -1706,7 +1722,7 @@ def delMasterRepSlaveUser(version=''):
|
|||||||
pdb.execute("drop user '" + name + "'@'%'")
|
pdb.execute("drop user '" + name + "'@'%'")
|
||||||
pdb.execute("drop user '" + name + "'@'localhost'")
|
pdb.execute("drop user '" + name + "'@'localhost'")
|
||||||
|
|
||||||
users = pdb.query("select Host from mysql.user where User='" +
|
users = pdb.query("select Host from user where User='" +
|
||||||
name + "' AND Host!='localhost'")
|
name + "' AND Host!='localhost'")
|
||||||
for us in users:
|
for us in users:
|
||||||
pdb.execute("drop user '" + name + "'@'" + us["Host"] + "'")
|
pdb.execute("drop user '" + name + "'@'" + us["Host"] + "'")
|
||||||
|
|||||||
@@ -445,10 +445,9 @@ function syncToDatabase(type){
|
|||||||
|
|
||||||
function setRootPwd(type, pwd){
|
function setRootPwd(type, pwd){
|
||||||
if (type==1){
|
if (type==1){
|
||||||
var data = $("#mod_pwd").serialize();
|
var password = $("#MyPassword").val();
|
||||||
myPost('set_root_pwd', data, function(data){
|
myPost('set_root_pwd', {password:password}, function(data){
|
||||||
var rdata = $.parseJSON(data.data);
|
var rdata = $.parseJSON(data.data);
|
||||||
// console.log(rdata);
|
|
||||||
showMsg(rdata.msg,function(){
|
showMsg(rdata.msg,function(){
|
||||||
dbList();
|
dbList();
|
||||||
$('.layui-layer-close1').click();
|
$('.layui-layer-close1').click();
|
||||||
@@ -459,26 +458,23 @@ function setRootPwd(type, pwd){
|
|||||||
|
|
||||||
var index = layer.open({
|
var index = layer.open({
|
||||||
type: 1,
|
type: 1,
|
||||||
skin: 'demo-class',
|
|
||||||
area: '500px',
|
area: '500px',
|
||||||
title: '修改数据库密码',
|
title: '修改数据库密码',
|
||||||
closeBtn: 1,
|
closeBtn: 1,
|
||||||
shift: 5,
|
shift: 5,
|
||||||
|
btn:["提交","关闭"],
|
||||||
shadeClose: true,
|
shadeClose: true,
|
||||||
content: "<form class='bt-form pd20 pb70' id='mod_pwd'>\
|
content: "<form class='bt-form pd20' id='mod_pwd'>\
|
||||||
<div class='line'>\
|
<div class='line'>\
|
||||||
<span class='tname'>root密码</span>\
|
<span class='tname'>root密码</span>\
|
||||||
<div class='info-r'><input class='bt-input-text mr5' type='text' name='password' id='MyPassword' style='width:330px' value='"+pwd+"' /><span title='随机密码' class='glyphicon glyphicon-repeat cursor' onclick='repeatPwd(16)'></span></div>\
|
<div class='info-r'><input class='bt-input-text mr5' type='text' name='password' id='MyPassword' style='width:330px' value='"+pwd+"' />\
|
||||||
</div>\
|
<span title='随机密码' class='glyphicon glyphicon-repeat cursor' onclick='repeatPwd(16)'></span>\
|
||||||
<div class='bt-form-submit-btn'>\
|
</div>\
|
||||||
<button id='my_mod_close' type='button' class='btn btn-danger btn-sm btn-title'>关闭</button>\
|
|
||||||
<button type='button' class='btn btn-success btn-sm btn-title' onclick=\"setRootPwd(1)\" >提交</button>\
|
|
||||||
</div>\
|
</div>\
|
||||||
</form>",
|
</form>",
|
||||||
});
|
yes:function(){
|
||||||
|
setRootPwd(1);
|
||||||
$('#my_mod_close').click(function(){
|
}
|
||||||
$('.layui-layer-close1').click();
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -632,12 +628,17 @@ function setDbPass(id, username, password){
|
|||||||
</div>\
|
</div>\
|
||||||
<div class='line'>\
|
<div class='line'>\
|
||||||
<span class='tname'>密码</span>\
|
<span class='tname'>密码</span>\
|
||||||
<div class='info-r'><input class='bt-input-text mr5' type='text' name='password' id='MyPassword' style='width:330px' value='"+password+"' /><span title='随机密码' class='glyphicon glyphicon-repeat cursor' onclick='repeatPwd(16)'></span></div>\
|
<div class='info-r'>\
|
||||||
|
<input class='bt-input-text mr5' type='text' name='password' id='MyPassword' style='width:330px' value='"+password+"' />\
|
||||||
|
<span title='随机密码' class='glyphicon glyphicon-repeat cursor' onclick='repeatPwd(16)'></span></div>\
|
||||||
</div>\
|
</div>\
|
||||||
<input type='hidden' name='id' value='"+id+"'>\
|
<input type='hidden' name='id' value='"+id+"'>\
|
||||||
</form>",
|
</form>",
|
||||||
yes:function(index){
|
yes:function(index){
|
||||||
var data = $("#mod_pwd").serialize();
|
var data = {};
|
||||||
|
data['name'] = $('input[name=name]').val();
|
||||||
|
data['password'] = $('#MyPassword').val();
|
||||||
|
data['id'] = $('input[name=id]').val();
|
||||||
myPost('set_user_pwd', data, function(data){
|
myPost('set_user_pwd', data, function(data){
|
||||||
var rdata = $.parseJSON(data.data);
|
var rdata = $.parseJSON(data.data);
|
||||||
showMsg(rdata.msg,function(){
|
showMsg(rdata.msg,function(){
|
||||||
@@ -809,7 +810,14 @@ function openPhpmyadmin(name,username,password){
|
|||||||
layer.msg('phpMyAdmin未启动',{icon:2,shade: [0.3, '#000']});
|
layer.msg('phpMyAdmin未启动',{icon:2,shade: [0.3, '#000']});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// console.log(data);
|
|
||||||
|
data = syncPost('/plugins/run',{'name':'phpmyadmin','func':'get_cfg'});
|
||||||
|
var rdata = $.parseJSON(data.data);
|
||||||
|
if (rdata.choose != 'mariadb'){
|
||||||
|
layer.msg('当前为['+rdata.choose+']模式,若要使用请切换模式.',{icon:2,shade: [0.3, '#000']});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
data = syncPost('/plugins/run',{'name':'phpmyadmin','func':'get_home_page'});
|
data = syncPost('/plugins/run',{'name':'phpmyadmin','func':'get_home_page'});
|
||||||
var rdata = $.parseJSON(data.data);
|
var rdata = $.parseJSON(data.data);
|
||||||
if (!rdata.status){
|
if (!rdata.status){
|
||||||
|
|||||||
@@ -71,10 +71,15 @@ Install_app()
|
|||||||
if [ "$sysName" == "Darwin" ];then
|
if [ "$sysName" == "Darwin" ];then
|
||||||
OPTIONS='-DPLUGIN_TOKUDB=NO'
|
OPTIONS='-DPLUGIN_TOKUDB=NO'
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
INSTALL_CMD=cmake
|
||||||
|
CMAKE3=`which cmake3`
|
||||||
|
if [ "$?" == "0" ];then
|
||||||
|
INSTALL_CMD=cmake3
|
||||||
|
fi
|
||||||
|
|
||||||
if [ ! -d $serverPath/mariadb ];then
|
if [ ! -d $serverPath/mariadb ];then
|
||||||
cd ${mariadbDir}/mariadb-${MY_VER} && cmake \
|
cd ${mariadbDir}/mariadb-${MY_VER} && $INSTALL_CMD \
|
||||||
-DCMAKE_INSTALL_PREFIX=$serverPath/mariadb \
|
-DCMAKE_INSTALL_PREFIX=$serverPath/mariadb \
|
||||||
-DMYSQL_DATADIR=$serverPath/mariadb/data/ \
|
-DMYSQL_DATADIR=$serverPath/mariadb/data/ \
|
||||||
-DMYSQL_USER=mysql \
|
-DMYSQL_USER=mysql \
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ Install_app()
|
|||||||
make -j${cpuCore} && make install && make clean
|
make -j${cpuCore} && make install && make clean
|
||||||
|
|
||||||
if [ -d $serverPath/mariadb ];then
|
if [ -d $serverPath/mariadb ];then
|
||||||
echo '10.7' > $serverPath/mariadb/version.pl
|
echo '10.8' > $serverPath/mariadb/version.pl
|
||||||
echo '安装完成' > $install_tmp
|
echo '安装完成' > $install_tmp
|
||||||
else
|
else
|
||||||
# rm -rf ${mariadbDir}/mariadb-${MY_VER}
|
# rm -rf ${mariadbDir}/mariadb-${MY_VER}
|
||||||
|
|||||||
@@ -821,8 +821,8 @@ def importDbBackup():
|
|||||||
mw.execShell(cmd)
|
mw.execShell(cmd)
|
||||||
|
|
||||||
pwd = pSqliteDb('config').where('id=?', (1,)).getField('mysql_root')
|
pwd = pSqliteDb('config').where('id=?', (1,)).getField('mysql_root')
|
||||||
|
sock = getSocketFile()
|
||||||
mysql_cmd = mw.getRootDir() + '/server/mysql/bin/mysql -uroot -p' + pwd + \
|
mysql_cmd = getServerDir() + '/bin/mysql -S ' + sock + ' -uroot -p' + pwd + \
|
||||||
' ' + name + ' < ' + file_path_sql
|
' ' + name + ' < ' + file_path_sql
|
||||||
|
|
||||||
# print(mysql_cmd)
|
# print(mysql_cmd)
|
||||||
|
|||||||
+27
-17
@@ -445,10 +445,9 @@ function syncToDatabase(type){
|
|||||||
|
|
||||||
function setRootPwd(type, pwd){
|
function setRootPwd(type, pwd){
|
||||||
if (type==1){
|
if (type==1){
|
||||||
var data = $("#mod_pwd").serialize();
|
var password = $("#MyPassword").val();
|
||||||
myPost('set_root_pwd', data, function(data){
|
myPost('set_root_pwd', {password:password}, function(data){
|
||||||
var rdata = $.parseJSON(data.data);
|
var rdata = $.parseJSON(data.data);
|
||||||
// console.log(rdata);
|
|
||||||
showMsg(rdata.msg,function(){
|
showMsg(rdata.msg,function(){
|
||||||
dbList();
|
dbList();
|
||||||
$('.layui-layer-close1').click();
|
$('.layui-layer-close1').click();
|
||||||
@@ -459,26 +458,23 @@ function setRootPwd(type, pwd){
|
|||||||
|
|
||||||
var index = layer.open({
|
var index = layer.open({
|
||||||
type: 1,
|
type: 1,
|
||||||
skin: 'demo-class',
|
|
||||||
area: '500px',
|
area: '500px',
|
||||||
title: '修改数据库密码',
|
title: '修改数据库密码',
|
||||||
closeBtn: 1,
|
closeBtn: 1,
|
||||||
shift: 5,
|
shift: 5,
|
||||||
|
btn:["提交","关闭"],
|
||||||
shadeClose: true,
|
shadeClose: true,
|
||||||
content: "<form class='bt-form pd20 pb70' id='mod_pwd'>\
|
content: "<form class='bt-form pd20' id='mod_pwd'>\
|
||||||
<div class='line'>\
|
<div class='line'>\
|
||||||
<span class='tname'>root密码</span>\
|
<span class='tname'>root密码</span>\
|
||||||
<div class='info-r'><input class='bt-input-text mr5' type='text' name='password' id='MyPassword' style='width:330px' value='"+pwd+"' /><span title='随机密码' class='glyphicon glyphicon-repeat cursor' onclick='repeatPwd(16)'></span></div>\
|
<div class='info-r'><input class='bt-input-text mr5' type='text' name='password' id='MyPassword' style='width:330px' value='"+pwd+"' />\
|
||||||
</div>\
|
<span title='随机密码' class='glyphicon glyphicon-repeat cursor' onclick='repeatPwd(16)'></span>\
|
||||||
<div class='bt-form-submit-btn'>\
|
</div>\
|
||||||
<button id='my_mod_close' type='button' class='btn btn-danger btn-sm btn-title'>关闭</button>\
|
|
||||||
<button type='button' class='btn btn-success btn-sm btn-title' onclick=\"setRootPwd(1)\" >提交</button>\
|
|
||||||
</div>\
|
</div>\
|
||||||
</form>",
|
</form>",
|
||||||
});
|
yes:function(){
|
||||||
|
setRootPwd(1);
|
||||||
$('#my_mod_close').click(function(){
|
}
|
||||||
$('.layui-layer-close1').click();
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -632,12 +628,18 @@ function setDbPass(id, username, password){
|
|||||||
</div>\
|
</div>\
|
||||||
<div class='line'>\
|
<div class='line'>\
|
||||||
<span class='tname'>密码</span>\
|
<span class='tname'>密码</span>\
|
||||||
<div class='info-r'><input class='bt-input-text mr5' type='text' name='password' id='MyPassword' style='width:330px' value='"+password+"' /><span title='随机密码' class='glyphicon glyphicon-repeat cursor' onclick='repeatPwd(16)'></span></div>\
|
<div class='info-r'>\
|
||||||
|
<input class='bt-input-text mr5' type='text' name='password' id='MyPassword' style='width:330px' value='"+password+"' />\
|
||||||
|
<span title='随机密码' class='glyphicon glyphicon-repeat cursor' onclick='repeatPwd(16)'></span></div>\
|
||||||
</div>\
|
</div>\
|
||||||
<input type='hidden' name='id' value='"+id+"'>\
|
<input type='hidden' name='id' value='"+id+"'>\
|
||||||
</form>",
|
</form>",
|
||||||
yes:function(index){
|
yes:function(index){
|
||||||
var data = $("#mod_pwd").serialize();
|
// var data = $("#mod_pwd").serialize();
|
||||||
|
var data = {};
|
||||||
|
data['name'] = $('input[name=name]').val();
|
||||||
|
data['password'] = $('#MyPassword').val();
|
||||||
|
data['id'] = $('input[name=id]').val();
|
||||||
myPost('set_user_pwd', data, function(data){
|
myPost('set_user_pwd', data, function(data){
|
||||||
var rdata = $.parseJSON(data.data);
|
var rdata = $.parseJSON(data.data);
|
||||||
showMsg(rdata.msg,function(){
|
showMsg(rdata.msg,function(){
|
||||||
@@ -809,6 +811,14 @@ function openPhpmyadmin(name,username,password){
|
|||||||
layer.msg('phpMyAdmin未启动',{icon:2,shade: [0.3, '#000']});
|
layer.msg('phpMyAdmin未启动',{icon:2,shade: [0.3, '#000']});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
data = syncPost('/plugins/run',{'name':'phpmyadmin','func':'get_cfg'});
|
||||||
|
var rdata = $.parseJSON(data.data);
|
||||||
|
if (rdata.choose == 'mariadb'){
|
||||||
|
layer.msg('当前为[mariadb]模式,若要使用请切换模式.',{icon:2,shade: [0.3, '#000']});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// console.log(data);
|
// console.log(data);
|
||||||
data = syncPost('/plugins/run',{'name':'phpmyadmin','func':'get_home_page'});
|
data = syncPost('/plugins/run',{'name':'phpmyadmin','func':'get_home_page'});
|
||||||
var rdata = $.parseJSON(data.data);
|
var rdata = $.parseJSON(data.data);
|
||||||
|
|||||||
@@ -12,6 +12,37 @@ config = C:read_file_body_decode(cpath .. 'config.json')
|
|||||||
local site_config = C:read_file_body_decode(cpath .. 'site.json')
|
local site_config = C:read_file_body_decode(cpath .. 'site.json')
|
||||||
C:setConfData(config, site_config)
|
C:setConfData(config, site_config)
|
||||||
|
|
||||||
|
-- D func
|
||||||
|
local function D(msg)
|
||||||
|
local _msg = ''
|
||||||
|
if type(msg) == 'table' then
|
||||||
|
for key, val in pairs(msg) do
|
||||||
|
_msg = key..':'..val.."\n"
|
||||||
|
end
|
||||||
|
elseif type(msg) == 'string' then
|
||||||
|
_msg = msg
|
||||||
|
elseif type(msg) == 'nil' then
|
||||||
|
_msg = 'nil'
|
||||||
|
else
|
||||||
|
_msg = msg
|
||||||
|
end
|
||||||
|
|
||||||
|
if not debug_mode then return true end
|
||||||
|
local fp = io.open(cpath..'debug.log', 'ab')
|
||||||
|
if fp == nil then
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
local localtime = os.date("%Y-%m-%d %H:%M:%S")
|
||||||
|
if server_name then
|
||||||
|
fp:write(tostring(_msg) .. "\n")
|
||||||
|
else
|
||||||
|
fp:write(localtime..":"..tostring(_msg) .. "\n")
|
||||||
|
end
|
||||||
|
fp:flush()
|
||||||
|
fp:close()
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
function initParams()
|
function initParams()
|
||||||
local data = {}
|
local data = {}
|
||||||
data['ip'] = C:get_client_ip()
|
data['ip'] = C:get_client_ip()
|
||||||
@@ -314,6 +345,7 @@ end
|
|||||||
function post_data_chekc()
|
function post_data_chekc()
|
||||||
if params['method'] =="POST" then
|
if params['method'] =="POST" then
|
||||||
if C:return_post_data() then return false end
|
if C:return_post_data() then return false end
|
||||||
|
ngx.req.read_body()
|
||||||
request_args = ngx.req.get_post_args()
|
request_args = ngx.req.get_post_args()
|
||||||
if not request_args then return false end
|
if not request_args then return false end
|
||||||
|
|
||||||
|
|||||||
@@ -146,7 +146,7 @@ def contentReplace(content, version):
|
|||||||
|
|
||||||
def makeOpenrestyConf():
|
def makeOpenrestyConf():
|
||||||
phpversions = ['00', '52', '53', '54', '55', '56',
|
phpversions = ['00', '52', '53', '54', '55', '56',
|
||||||
'70', '71', '72', '73', '74', '80', '81']
|
'70', '71', '72', '73', '74', '80', '81', '82']
|
||||||
|
|
||||||
sdir = mw.getServerDir()
|
sdir = mw.getServerDir()
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ serverPath=$(dirname "$rootPath")
|
|||||||
sourcePath=${serverPath}/source/php
|
sourcePath=${serverPath}/source/php
|
||||||
|
|
||||||
LIBNAME=redis
|
LIBNAME=redis
|
||||||
LIBV=5.3.7
|
LIBV=5.3.6
|
||||||
sysName=`uname`
|
sysName=`uname`
|
||||||
actionType=$1
|
actionType=$1
|
||||||
version=$2
|
version=$2
|
||||||
|
|||||||
@@ -2,10 +2,11 @@
|
|||||||
$cfg['blowfish_secret'] = '{$BLOWFISH_SECRET}';
|
$cfg['blowfish_secret'] = '{$BLOWFISH_SECRET}';
|
||||||
$i = 0;
|
$i = 0;
|
||||||
$i++;
|
$i++;
|
||||||
|
$cfg['Servers'][$i]['verbose'] = '{$CHOOSE_DB}';
|
||||||
$cfg['Servers'][$i]['auth_type'] = 'cookie';
|
$cfg['Servers'][$i]['auth_type'] = 'cookie';
|
||||||
// $cfg['Servers'][$i]['host'] = '127.0.0.1';
|
// $cfg['Servers'][$i]['host'] = '127.0.0.1';
|
||||||
// $cfg['Servers'][$i]['connect_type'] = 'tcp';
|
// $cfg['Servers'][$i]['connect_type'] = 'tcp';
|
||||||
$cfg['Servers'][$i]['socket'] = '{$SERVER_PATH}/mysql/mysql.sock';
|
$cfg['Servers'][$i]['socket'] = '{$SERVER_PATH}/{$CHOOSE_DB_DIR}/mysql.sock';
|
||||||
$cfg['Servers'][$i]['connect_type'] = 'socket';
|
$cfg['Servers'][$i]['connect_type'] = 'socket';
|
||||||
$cfg['Servers'][$i]['compress'] = false;
|
$cfg['Servers'][$i]['compress'] = false;
|
||||||
$cfg['Servers'][$i]['AllowNoPassword'] = false;
|
$cfg['Servers'][$i]['AllowNoPassword'] = false;
|
||||||
|
|||||||
@@ -8,6 +8,11 @@ server
|
|||||||
#error_page 404 /404.html;
|
#error_page 404 /404.html;
|
||||||
include {$PHP_CONF_PATH}/enable-php-{$PHP_VER}.conf;
|
include {$PHP_CONF_PATH}/enable-php-{$PHP_VER}.conf;
|
||||||
|
|
||||||
|
#AUTH_START
|
||||||
|
auth_basic "Authorization";
|
||||||
|
auth_basic_user_file {$SERVER_PATH}/phpmyadmin/pma.pass;
|
||||||
|
#AUTH_END
|
||||||
|
|
||||||
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
|
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
|
||||||
{
|
{
|
||||||
expires 30d;
|
expires 30d;
|
||||||
@@ -18,7 +23,7 @@ server
|
|||||||
expires 12h;
|
expires 12h;
|
||||||
}
|
}
|
||||||
|
|
||||||
location ~ /.*\.log$ {
|
location ~ /.*\.(log|pass|json|pl)$ {
|
||||||
deny all;
|
deny all;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+137
-6
@@ -5,6 +5,7 @@ import io
|
|||||||
import os
|
import os
|
||||||
import time
|
import time
|
||||||
import re
|
import re
|
||||||
|
import json
|
||||||
|
|
||||||
sys.path.append(os.getcwd() + "/class/core")
|
sys.path.append(os.getcwd() + "/class/core")
|
||||||
import mw
|
import mw
|
||||||
@@ -44,6 +45,13 @@ def getArgs():
|
|||||||
return tmp
|
return tmp
|
||||||
|
|
||||||
|
|
||||||
|
def checkArgs(data, ck=[]):
|
||||||
|
for i in range(len(ck)):
|
||||||
|
if not ck[i] in data:
|
||||||
|
return (False, mw.returnJson(False, '参数:(' + ck[i] + ')没有!'))
|
||||||
|
return (True, mw.returnJson(True, 'ok'))
|
||||||
|
|
||||||
|
|
||||||
def getConf():
|
def getConf():
|
||||||
return mw.getServerDir() + '/web_conf/nginx/vhost/phpmyadmin.conf'
|
return mw.getServerDir() + '/web_conf/nginx/vhost/phpmyadmin.conf'
|
||||||
|
|
||||||
@@ -107,9 +115,50 @@ def contentReplace(content):
|
|||||||
content = content.replace('{$PHP_CONF_PATH}', php_conf_dir)
|
content = content.replace('{$PHP_CONF_PATH}', php_conf_dir)
|
||||||
content = content.replace('{$PHP_VER}', php_ver)
|
content = content.replace('{$PHP_VER}', php_ver)
|
||||||
content = content.replace('{$BLOWFISH_SECRET}', blowfish_secret)
|
content = content.replace('{$BLOWFISH_SECRET}', blowfish_secret)
|
||||||
|
|
||||||
|
cfg = getCfg()
|
||||||
|
if (cfg['choose'] == ""):
|
||||||
|
content = content.replace('{$CHOOSE_DB}', 'mysql')
|
||||||
|
content = content.replace('{$CHOOSE_DB_DIR}', 'mysql')
|
||||||
|
else:
|
||||||
|
content = content.replace('{$CHOOSE_DB}', 'MariaDB')
|
||||||
|
content = content.replace('{$CHOOSE_DB_DIR}', 'mariadb')
|
||||||
|
|
||||||
return content
|
return content
|
||||||
|
|
||||||
|
|
||||||
|
def initCfg():
|
||||||
|
cfg = getServerDir() + "/cfg.json"
|
||||||
|
if not os.path.exists(cfg):
|
||||||
|
data = {}
|
||||||
|
data['port'] = '888'
|
||||||
|
data['choose'] = ''
|
||||||
|
data['username'] = 'admin'
|
||||||
|
data['password'] = 'admin'
|
||||||
|
mw.writeFile(cfg, json.dumps(data))
|
||||||
|
|
||||||
|
|
||||||
|
def setCfg(key, val):
|
||||||
|
cfg = getServerDir() + "/cfg.json"
|
||||||
|
data = mw.readFile(cfg)
|
||||||
|
data = json.loads(data)
|
||||||
|
data[key] = val
|
||||||
|
mw.writeFile(cfg, json.dumps(data))
|
||||||
|
|
||||||
|
|
||||||
|
def getCfg():
|
||||||
|
cfg = getServerDir() + "/cfg.json"
|
||||||
|
data = mw.readFile(cfg)
|
||||||
|
data = json.loads(data)
|
||||||
|
return data
|
||||||
|
|
||||||
|
|
||||||
|
def returnCfg():
|
||||||
|
cfg = getServerDir() + "/cfg.json"
|
||||||
|
data = mw.readFile(cfg)
|
||||||
|
return data
|
||||||
|
|
||||||
|
|
||||||
def status():
|
def status():
|
||||||
conf = getConf()
|
conf = getConf()
|
||||||
conf_inc = getServerDir() + '/phpmyadmin/config.inc.php'
|
conf_inc = getServerDir() + '/phpmyadmin/config.inc.php'
|
||||||
@@ -120,6 +169,8 @@ def status():
|
|||||||
|
|
||||||
|
|
||||||
def start():
|
def start():
|
||||||
|
initCfg()
|
||||||
|
|
||||||
file_tpl = getPluginDir() + '/conf/phpmyadmin.conf'
|
file_tpl = getPluginDir() + '/conf/phpmyadmin.conf'
|
||||||
file_run = getConf()
|
file_run = getConf()
|
||||||
|
|
||||||
@@ -128,6 +179,14 @@ def start():
|
|||||||
centent = contentReplace(centent)
|
centent = contentReplace(centent)
|
||||||
mw.writeFile(file_run, centent)
|
mw.writeFile(file_run, centent)
|
||||||
|
|
||||||
|
pma_path = getServerDir() + '/pma.pass'
|
||||||
|
if not os.path.exists(pma_path):
|
||||||
|
username = mw.getRandomString(10)
|
||||||
|
pass_cmd = username + ':' + mw.hasPwd(username)
|
||||||
|
setCfg('username', username)
|
||||||
|
setCfg('password', username)
|
||||||
|
mw.writeFile(pma_path, pass_cmd)
|
||||||
|
|
||||||
tmp = getServerDir() + '/phpmyadmin/tmp'
|
tmp = getServerDir() + '/phpmyadmin/tmp'
|
||||||
if not os.path.exists(tmp):
|
if not os.path.exists(tmp):
|
||||||
os.mkdir(tmp)
|
os.mkdir(tmp)
|
||||||
@@ -179,12 +238,11 @@ def setPhpVer():
|
|||||||
file_tpl = getPluginDir() + '/conf/phpmyadmin.conf'
|
file_tpl = getPluginDir() + '/conf/phpmyadmin.conf'
|
||||||
file_run = getConf()
|
file_run = getConf()
|
||||||
|
|
||||||
centent = mw.readFile(file_tpl)
|
content = mw.readFile(file_tpl)
|
||||||
centent = contentReplace(centent)
|
content = contentReplace(content)
|
||||||
mw.writeFile(file_run, centent)
|
mw.writeFile(file_run, content)
|
||||||
|
|
||||||
mw.restartWeb()
|
mw.restartWeb()
|
||||||
|
|
||||||
return 'ok'
|
return 'ok'
|
||||||
|
|
||||||
|
|
||||||
@@ -195,6 +253,11 @@ def getSetPhpVer():
|
|||||||
return ''
|
return ''
|
||||||
|
|
||||||
|
|
||||||
|
def getPmaOption():
|
||||||
|
data = getCfg()
|
||||||
|
return mw.returnJson(True, 'ok', data)
|
||||||
|
|
||||||
|
|
||||||
def getPmaPort():
|
def getPmaPort():
|
||||||
try:
|
try:
|
||||||
port = getPort()
|
port = getPort()
|
||||||
@@ -206,8 +269,9 @@ def getPmaPort():
|
|||||||
|
|
||||||
def setPmaPort():
|
def setPmaPort():
|
||||||
args = getArgs()
|
args = getArgs()
|
||||||
if not 'port' in args:
|
data = checkArgs(args, ['port'])
|
||||||
return mw.returnJson(False, 'port missing!')
|
if not data[0]:
|
||||||
|
return data[1]
|
||||||
|
|
||||||
port = args['port']
|
port = args['port']
|
||||||
if port == '80':
|
if port == '80':
|
||||||
@@ -224,6 +288,63 @@ def setPmaPort():
|
|||||||
return mw.returnJson(True, '修改成功!')
|
return mw.returnJson(True, '修改成功!')
|
||||||
|
|
||||||
|
|
||||||
|
def setPmaChoose():
|
||||||
|
args = getArgs()
|
||||||
|
data = checkArgs(args, ['choose'])
|
||||||
|
if not data[0]:
|
||||||
|
return data[1]
|
||||||
|
|
||||||
|
choose = args['choose']
|
||||||
|
setCfg('choose', choose)
|
||||||
|
|
||||||
|
conf_run = getServerDir() + '/phpmyadmin/config.inc.php'
|
||||||
|
conf_tpl = getPluginDir() + '/conf/config.inc.php'
|
||||||
|
centent = mw.readFile(conf_tpl)
|
||||||
|
centent = contentReplace(centent)
|
||||||
|
mw.writeFile(conf_run, centent)
|
||||||
|
|
||||||
|
mw.restartWeb()
|
||||||
|
return mw.returnJson(True, '修改成功!')
|
||||||
|
|
||||||
|
|
||||||
|
def setPmaUsername():
|
||||||
|
args = getArgs()
|
||||||
|
data = checkArgs(args, ['username'])
|
||||||
|
if not data[0]:
|
||||||
|
return data[1]
|
||||||
|
|
||||||
|
username = args['username']
|
||||||
|
setCfg('username', username)
|
||||||
|
|
||||||
|
cfg = getCfg()
|
||||||
|
pma_path = getServerDir() + '/pma.pass'
|
||||||
|
username = mw.getRandomString(10)
|
||||||
|
pass_cmd = cfg['username'] + ':' + mw.hasPwd(cfg['password'])
|
||||||
|
mw.writeFile(pma_path, pass_cmd)
|
||||||
|
|
||||||
|
mw.restartWeb()
|
||||||
|
return mw.returnJson(True, '修改成功!')
|
||||||
|
|
||||||
|
|
||||||
|
def setPmaPassword():
|
||||||
|
args = getArgs()
|
||||||
|
data = checkArgs(args, ['password'])
|
||||||
|
if not data[0]:
|
||||||
|
return data[1]
|
||||||
|
|
||||||
|
password = args['password']
|
||||||
|
setCfg('password', password)
|
||||||
|
|
||||||
|
cfg = getCfg()
|
||||||
|
pma_path = getServerDir() + '/pma.pass'
|
||||||
|
username = mw.getRandomString(10)
|
||||||
|
pass_cmd = cfg['username'] + ':' + mw.hasPwd(cfg['password'])
|
||||||
|
mw.writeFile(pma_path, pass_cmd)
|
||||||
|
|
||||||
|
mw.restartWeb()
|
||||||
|
return mw.returnJson(True, '修改成功!')
|
||||||
|
|
||||||
|
|
||||||
def accessLog():
|
def accessLog():
|
||||||
return getServerDir() + '/access.log'
|
return getServerDir() + '/access.log'
|
||||||
|
|
||||||
@@ -252,6 +373,8 @@ if __name__ == "__main__":
|
|||||||
print(getConf())
|
print(getConf())
|
||||||
elif func == 'version':
|
elif func == 'version':
|
||||||
print(Version())
|
print(Version())
|
||||||
|
elif func == 'get_cfg':
|
||||||
|
print(returnCfg())
|
||||||
elif func == 'config_inc':
|
elif func == 'config_inc':
|
||||||
print(getConfInc())
|
print(getConfInc())
|
||||||
elif func == 'get_home_page':
|
elif func == 'get_home_page':
|
||||||
@@ -264,6 +387,14 @@ if __name__ == "__main__":
|
|||||||
print(getPmaPort())
|
print(getPmaPort())
|
||||||
elif func == 'set_pma_port':
|
elif func == 'set_pma_port':
|
||||||
print(setPmaPort())
|
print(setPmaPort())
|
||||||
|
elif func == 'get_pma_option':
|
||||||
|
print(getPmaOption())
|
||||||
|
elif func == 'set_pma_choose':
|
||||||
|
print(setPmaChoose())
|
||||||
|
elif func == 'set_pma_username':
|
||||||
|
print(setPmaUsername())
|
||||||
|
elif func == 'set_pma_password':
|
||||||
|
print(setPmaPassword())
|
||||||
elif func == 'access_log':
|
elif func == 'access_log':
|
||||||
print(accessLog())
|
print(accessLog())
|
||||||
elif func == 'error_log':
|
elif func == 'error_log':
|
||||||
|
|||||||
@@ -90,24 +90,68 @@ function phpVerChange(type, msg) {
|
|||||||
|
|
||||||
//phpmyadmin安全设置
|
//phpmyadmin安全设置
|
||||||
function safeConf() {
|
function safeConf() {
|
||||||
var data = pmaAsyncPost('get_pma_port');
|
pmaPost('get_pma_option', {}, function(rdata){
|
||||||
var rdata = $.parseJSON(data.data);
|
var rdata = $.parseJSON(rdata.data);
|
||||||
if (!rdata.status){
|
if (!rdata.status){
|
||||||
layer.msg(rdata.msg,{icon:2,time:2000,shade: [0.3, '#000']});
|
layer.msg(rdata.msg,{icon:2,time:2000,shade: [0.3, '#000']});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var con = '<div class="ver line">\
|
|
||||||
<span style="margin-right:10px">访问端口</span>\
|
var cfg = rdata.data;
|
||||||
<input class="bt-input-text phpmyadmindk mr20" name="Name" id="pmport" value="' + rdata['data'] + '" placeholder="phpmyadmin访问端口" maxlength="5" type="number">\
|
var con = '<div class="ver line">\
|
||||||
<button class="btn btn-success btn-sm" onclick="phpmyadminPort()">保存</button>\
|
<span class="tname">访问端口</span>\
|
||||||
|
<input style="width:110px" class="bt-input-text phpmyadmindk mr20" name="Name" id="pmport" value="' + cfg['port'] + '" placeholder="phpmyadmin访问端口" maxlength="5" type="number">\
|
||||||
|
<button class="btn btn-success btn-sm" onclick="setPamPort()">保存</button>\
|
||||||
|
</div>\
|
||||||
|
<div class="ver line">\
|
||||||
|
<span class="tname">访问切换</span>\
|
||||||
|
<select id="access_choose" class="bt-input-text mr20" name="choose" style="width:110px">\
|
||||||
|
<option value="mariadb" '+(cfg['choose']=="mariadb"?"selected='selected'":"")+'>MariaDB</option>\
|
||||||
|
<option value="mysql" '+ (cfg['choose']==""?"selected='selected'":"")+'>MySQL</option>\
|
||||||
|
</select>\
|
||||||
|
<button class="btn btn-success btn-sm" onclick="setPmaChoose()">保存</button>\
|
||||||
|
</div>\
|
||||||
|
<div class="ver line">\
|
||||||
|
<span class="tname">用户名</span>\
|
||||||
|
<input style="width:110px" class="bt-input-text mr20" name="username" id="pmport" value="' + cfg['username'] + '" placeholder="认证用户名" type="text">\
|
||||||
|
<button class="btn btn-success btn-sm" onclick="setPmaUsername()">保存</button>\
|
||||||
|
</div>\
|
||||||
|
<div class="ver line">\
|
||||||
|
<span class="tname">密码</span>\
|
||||||
|
<input style="width:110px" class="bt-input-text mr20" name="password" id="pmport" value="' + cfg['password'] + '" placeholder="密码" type="text">\
|
||||||
|
<button class="btn btn-success btn-sm" onclick="setPmaPassword()">保存</button>\
|
||||||
</div>';
|
</div>';
|
||||||
$(".soft-man-con").html(con);
|
$(".soft-man-con").html(con);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function setPmaChoose(){
|
||||||
|
var choose = $("#access_choose").val();
|
||||||
|
pmaPost('set_pma_choose',{'choose':choose}, function(data){
|
||||||
|
var rdata = $.parseJSON(data.data);
|
||||||
|
layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 });
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function setPmaUsername(){
|
||||||
|
var username = $("input[name=username]").val();
|
||||||
|
pmaPost('set_pma_username',{'username':username}, function(data){
|
||||||
|
var rdata = $.parseJSON(data.data);
|
||||||
|
layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 });
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function setPmaPassword(){
|
||||||
|
var password = $("input[name=password]").val();
|
||||||
|
pmaPost('set_pma_password',{'password':password}, function(data){
|
||||||
|
var rdata = $.parseJSON(data.data);
|
||||||
|
layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 });
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
//修改phpmyadmin端口
|
//修改phpmyadmin端口
|
||||||
function phpmyadminPort() {
|
function setPamPort() {
|
||||||
var pmport = $("#pmport").val();
|
var pmport = $("#pmport").val();
|
||||||
if (pmport < 80 || pmport > 65535) {
|
if (pmport < 80 || pmport > 65535) {
|
||||||
layer.msg('端口范围不合法!', { icon: 2 });
|
layer.msg('端口范围不合法!', { icon: 2 });
|
||||||
|
|||||||
@@ -4,8 +4,8 @@
|
|||||||
"name": "redis",
|
"name": "redis",
|
||||||
"title": "Redis",
|
"title": "Redis",
|
||||||
"shell": "install.sh",
|
"shell": "install.sh",
|
||||||
"versions":["4.0.11","5.0.8","6.0.4","6.2.7"],
|
"versions":["4.0.11","5.0.8","6.0.4","6.2.7","7.0.4"],
|
||||||
"updates":["4.0.11","5.0.8","6.0.4","6.2.7"],
|
"updates":["4.0.11","5.0.8","6.0.4","6.2.7","7.0.4"],
|
||||||
"tip": "soft",
|
"tip": "soft",
|
||||||
"checks": "server/redis",
|
"checks": "server/redis",
|
||||||
"path": "server/redis",
|
"path": "server/redis",
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ def getArgs():
|
|||||||
tmp[t[0]] = t[1]
|
tmp[t[0]] = t[1]
|
||||||
elif args_len > 1:
|
elif args_len > 1:
|
||||||
for i in range(len(args)):
|
for i in range(len(args)):
|
||||||
t = args[i].split(':')
|
t = args[i].split(':', 1)
|
||||||
tmp[t[0]] = t[1]
|
tmp[t[0]] = t[1]
|
||||||
|
|
||||||
return tmp
|
return tmp
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ if grep -Eq "Debian" /etc/*-release; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
apt update -y
|
apt update -y
|
||||||
|
apt-get update -y
|
||||||
|
|
||||||
|
|
||||||
apt install -y wget curl lsof unzip
|
apt install -y wget curl lsof unzip
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ fi
|
|||||||
|
|
||||||
|
|
||||||
apt update -y
|
apt update -y
|
||||||
|
apt-get update -y
|
||||||
|
|
||||||
apt install -y wget curl lsof unzip
|
apt install -y wget curl lsof unzip
|
||||||
apt install -y python3-pip
|
apt install -y python3-pip
|
||||||
|
|||||||
Reference in New Issue
Block a user