phpredisadmin
This commit is contained in:
parent
480ae78579
commit
e443b88ad9
|
|
@ -904,7 +904,7 @@ function openPhpmyadmin(name,username,password){
|
|||
|
||||
setTimeout(function(){
|
||||
$("#toPHPMyAdmin").submit();
|
||||
},3000);
|
||||
},2000);
|
||||
layer.msg('phpMyAdmin['+data.data+']需要手动登录😭',{icon:16,shade: [0.3, '#000'],time:4000});
|
||||
|
||||
} else{
|
||||
|
|
@ -917,7 +917,7 @@ function openPhpmyadmin(name,username,password){
|
|||
|
||||
setTimeout(function(){
|
||||
$("#toPHPMyAdmin").submit();
|
||||
},3000);
|
||||
},2000);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -74,8 +74,11 @@ def getHomePage():
|
|||
ip = '127.0.0.1'
|
||||
if not mw.isAppleSystem():
|
||||
ip = mw.getLocalIp()
|
||||
url = 'http://' + ip + ':' + port + \
|
||||
'/' + getCfg()['path'] + '/index.php'
|
||||
|
||||
cfg = getCfg()
|
||||
auth = cfg['username']+':'+cfg['password']
|
||||
rand_path = cfg['path']
|
||||
url = 'http://' + auth + '@' + ip + ':' + port + '/' + rand_path + '/index.php'
|
||||
return mw.returnJson(True, 'OK', url)
|
||||
except Exception as e:
|
||||
return mw.returnJson(False, '插件未启动!')
|
||||
|
|
|
|||
|
|
@ -0,0 +1,87 @@
|
|||
<?php
|
||||
//Copy this file to config.inc.php and make changes to that file to customize your configuration.
|
||||
|
||||
$config = array(
|
||||
'servers' => array(
|
||||
array(
|
||||
'name' => 'local server', // Optional name.
|
||||
'host' => '127.0.0.1',
|
||||
'port' => 6379,
|
||||
'filter' => '*',
|
||||
'scheme' => 'tcp', // Optional. Connection scheme. 'tcp' - for TCP connection, 'unix' - for connection by unix domain socket
|
||||
'path' => '', // Optional. Path to unix domain socket. Uses only if 'scheme' => 'unix'. Example: '/var/run/redis/redis.sock'
|
||||
'hide' => false, // Optional. Override global setting. Hide empty databases in the database list.
|
||||
|
||||
// Optional Redis authentication.
|
||||
'auth' => '{$REDIS_PASS}' // Warning: The password is sent in plain-text to the Redis server.
|
||||
),
|
||||
|
||||
/*array(
|
||||
'host' => 'localhost',
|
||||
'port' => 6380
|
||||
),*/
|
||||
|
||||
/*array(
|
||||
'name' => 'local db 2',
|
||||
'host' => 'localhost',
|
||||
'port' => 6379,
|
||||
'db' => 1, // Optional database number, see http://redis.io/commands/select
|
||||
'databases' => 1, // Optional number of databases (prevents use of CONFIG command).
|
||||
'filter' => 'something:*', // Show only parts of database for speed or security reasons.
|
||||
'seperator' => '/', // Use a different seperator on this database (default uses config default).
|
||||
'flush' => false, // Set to true to enable the flushdb button for this instance.
|
||||
'charset' => 'cp1251', // Keys and values are stored in redis using this encoding (default utf-8).
|
||||
'keys' => false, // Use the old KEYS command instead of SCAN to fetch all keys for this server (default uses config default).
|
||||
'scansize' => 1000 // How many entries to fetch using each SCAN command for this server (default uses config default).
|
||||
),*/
|
||||
),
|
||||
|
||||
|
||||
'seperator' => ':',
|
||||
'showEmptyNamespaceAsKey' => false,
|
||||
|
||||
// Hide empty databases in the database list (global, valid for all servers unless set at server level)
|
||||
'hideEmptyDBs' => false,
|
||||
|
||||
// Uncomment to show less information and make phpRedisAdmin fire less commands to the Redis server. Recommended for a really busy Redis server.
|
||||
//'faster' => true,
|
||||
|
||||
|
||||
// Uncomment to enable HTTP authentication
|
||||
/*'login' => array(
|
||||
// Username => Password
|
||||
// Multiple combinations can be used
|
||||
'admin' => array(
|
||||
'password' => 'adminpassword',
|
||||
),
|
||||
'guest' => array(
|
||||
'password' => '',
|
||||
'servers' => array(1) // Optional list of servers this user can access.
|
||||
)
|
||||
),*/
|
||||
|
||||
// Use HTML form/cookie-based auth instead of HTTP Basic/Digest auth
|
||||
'cookie_auth' => false,
|
||||
|
||||
|
||||
/*'serialization' => array(
|
||||
'foo*' => array( // Match like KEYS
|
||||
// Function called when saving to redis.
|
||||
'save' => function($data) { return json_encode(json_decode($data)); },
|
||||
// Function called when loading from redis.
|
||||
'load' => function($data) { return json_encode(json_decode($data), JSON_PRETTY_PRINT); },
|
||||
),
|
||||
),*/
|
||||
|
||||
|
||||
// You can ignore settings below this point.
|
||||
|
||||
'maxkeylen' => 100,
|
||||
'count_elements_page' => 100,
|
||||
|
||||
// Use the old KEYS command instead of SCAN to fetch all keys.
|
||||
'keys' => false,
|
||||
|
||||
// How many entries to fetch using each SCAN command.
|
||||
'scansize' => 1000
|
||||
);
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
server
|
||||
{
|
||||
listen 6390;
|
||||
server_name 127.0.0.1;
|
||||
index index.html index.htm index.php;
|
||||
root {$SERVER_PATH}/phpredisadmin;
|
||||
|
||||
#error_page 404 /404.html;
|
||||
include {$PHP_CONF_PATH}/enable-php-{$PHP_VER}.conf;
|
||||
|
||||
#AUTH_START
|
||||
auth_basic "Authorization";
|
||||
auth_basic_user_file {$SERVER_PATH}/phpredisadmin/app.pass;
|
||||
#AUTH_END
|
||||
|
||||
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
|
||||
{
|
||||
expires 30d;
|
||||
}
|
||||
|
||||
location ~ .*\.(js|css)?$
|
||||
{
|
||||
expires 12h;
|
||||
}
|
||||
|
||||
location ~ /.*\.(log|pass|json|pl)$ {
|
||||
deny all;
|
||||
}
|
||||
|
||||
|
||||
location ~ /\.
|
||||
{
|
||||
deny all;
|
||||
}
|
||||
|
||||
access_log {$SERVER_PATH}/phpredisadmin/access.log;
|
||||
error_log {$SERVER_PATH}/phpredisadmin/error.log;
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 1.4 KiB |
|
|
@ -0,0 +1,24 @@
|
|||
<div class="bt-form">
|
||||
<div class="bt-w-main">
|
||||
<div class="bt-w-menu">
|
||||
<p class="bgw" onclick="pluginService('phpredisadmin');">服务</p>
|
||||
<p onclick="pluginConfig('phpredisadmin');">重写模版</p>
|
||||
<p onclick="homePage()">主页</p>
|
||||
<p onclick="phpVer(56)">PHP版本</p>
|
||||
<p onclick="safeConf();">安全设置</p>
|
||||
<p onclick="pluginLogs('phpredisadmin','','access_log');">访问日志</p>
|
||||
<p onclick="pluginLogs('phpredisadmin','','error_log');">错误日志</p>
|
||||
<p onclick="pluginConfig('phpredisadmin','','config_inc');" title="config.inc.php">配置</p>
|
||||
</div>
|
||||
<div class="bt-w-con pd15">
|
||||
<div class="soft-man-con"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
resetPluginWinHeight(500);
|
||||
$.getScript( "/plugins/file?name=phpredisadmin&f=js/phpredisadmin.js", function(){
|
||||
pluginService('phpredisadmin');
|
||||
});
|
||||
</script>
|
||||
|
|
@ -0,0 +1,520 @@
|
|||
# coding:utf-8
|
||||
|
||||
import sys
|
||||
import io
|
||||
import os
|
||||
import time
|
||||
import re
|
||||
import json
|
||||
|
||||
sys.path.append(os.getcwd() + "/class/core")
|
||||
import mw
|
||||
import site_api
|
||||
|
||||
app_debug = False
|
||||
if mw.isAppleSystem():
|
||||
app_debug = True
|
||||
|
||||
|
||||
def getPluginName():
|
||||
return 'phpredisadmin'
|
||||
|
||||
|
||||
def getPluginDir():
|
||||
return mw.getPluginDir() + '/' + getPluginName()
|
||||
|
||||
|
||||
def getServerDir():
|
||||
return mw.getServerDir() + '/' + getPluginName()
|
||||
|
||||
|
||||
def getArgs():
|
||||
args = sys.argv[2:]
|
||||
tmp = {}
|
||||
args_len = len(args)
|
||||
|
||||
if args_len == 1:
|
||||
t = args[0].strip('{').strip('}')
|
||||
t = t.split(':')
|
||||
tmp[t[0]] = t[1]
|
||||
elif args_len > 1:
|
||||
for i in range(len(args)):
|
||||
t = args[i].split(':')
|
||||
tmp[t[0]] = t[1]
|
||||
|
||||
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():
|
||||
return mw.getServerDir() + '/web_conf/nginx/vhost/phpredisadmin.conf'
|
||||
|
||||
|
||||
def getConfInc():
|
||||
return getServerDir() + "/" + getCfg()['path'] + '/includes/config.inc.php'
|
||||
|
||||
|
||||
def getPort():
|
||||
file = getConf()
|
||||
content = mw.readFile(file)
|
||||
rep = 'listen\s*(.*);'
|
||||
tmp = re.search(rep, content)
|
||||
return tmp.groups()[0].strip()
|
||||
|
||||
|
||||
def getHomePage():
|
||||
try:
|
||||
port = getPort()
|
||||
ip = '127.0.0.1'
|
||||
if not mw.isAppleSystem():
|
||||
ip = mw.getLocalIp()
|
||||
|
||||
cfg = getCfg()
|
||||
auth = cfg['username']+':'+cfg['password']
|
||||
rand_path = cfg['path']
|
||||
url = 'http://' + auth + '@' + ip + ':' + port + '/' + rand_path + '/index.php'
|
||||
return mw.returnJson(True, 'OK', url)
|
||||
except Exception as e:
|
||||
return mw.returnJson(False, '插件未启动!')
|
||||
|
||||
|
||||
def getPhpVer(expect=55):
|
||||
v = site_api.site_api().getPhpVersion()
|
||||
is_find = False
|
||||
for i in range(len(v)):
|
||||
t = str(v[i]['version'])
|
||||
if (t == expect):
|
||||
is_find = True
|
||||
return str(t)
|
||||
if not is_find:
|
||||
if len(v) > 1:
|
||||
return v[1]['version']
|
||||
return v[0]['version']
|
||||
return str(expect)
|
||||
|
||||
|
||||
def getCachePhpVer():
|
||||
cacheFile = getServerDir() + '/php.pl'
|
||||
v = ''
|
||||
if os.path.exists(cacheFile):
|
||||
v = mw.readFile(cacheFile)
|
||||
else:
|
||||
v = getPhpVer()
|
||||
mw.writeFile(cacheFile, v)
|
||||
return v
|
||||
|
||||
|
||||
def getRedisPass():
|
||||
requirepass = ""
|
||||
conf = mw.getServerDir() + '/redis/redis.conf'
|
||||
if os.path.exists(conf):
|
||||
content = mw.readFile(conf)
|
||||
rep = "^(requirepass" + ')\s*([.0-9A-Za-z_& ~]+)'
|
||||
tmp = re.search(rep, content, re.M)
|
||||
if tmp:
|
||||
requirepass = tmp.groups()[1]
|
||||
|
||||
return requirepass
|
||||
|
||||
def contentReplace(content):
|
||||
service_path = mw.getServerDir()
|
||||
php_ver = getCachePhpVer()
|
||||
tmp = mw.execShell(
|
||||
'cat /dev/urandom | head -n 32 | md5sum | head -c 16')
|
||||
blowfish_secret = tmp[0].strip()
|
||||
# print php_ver
|
||||
php_conf_dir = mw.getServerDir() + '/web_conf/php/conf'
|
||||
content = content.replace('{$ROOT_PATH}', mw.getRootDir())
|
||||
content = content.replace('{$SERVER_PATH}', service_path)
|
||||
content = content.replace('{$PHP_CONF_PATH}', php_conf_dir)
|
||||
content = content.replace('{$PHP_VER}', php_ver)
|
||||
content = content.replace('{$BLOWFISH_SECRET}', blowfish_secret)
|
||||
|
||||
# REDIS_PASS
|
||||
rd_pass = getRedisPass()
|
||||
content = content.replace('{$REDIS_PASS}', rd_pass)
|
||||
|
||||
cfg = getCfg()
|
||||
|
||||
if cfg['choose'] == "mysql":
|
||||
content = content.replace('{$CHOOSE_DB}', 'mysql')
|
||||
content = content.replace('{$CHOOSE_DB_DIR}', 'mysql')
|
||||
elif cfg['choose'] == "mysql-apt":
|
||||
content = content.replace('{$CHOOSE_DB}', 'mysql')
|
||||
content = content.replace('{$CHOOSE_DB_DIR}', 'mysql-apt')
|
||||
elif cfg['choose'] == "mysql-yum":
|
||||
content = content.replace('{$CHOOSE_DB}', 'mysql')
|
||||
content = content.replace('{$CHOOSE_DB_DIR}', 'mysql-yum')
|
||||
else:
|
||||
content = content.replace('{$CHOOSE_DB}', 'MariaDB')
|
||||
content = content.replace('{$CHOOSE_DB_DIR}', 'mariadb')
|
||||
|
||||
content = content.replace('{$PMA_PATH}', cfg['path'])
|
||||
|
||||
port = cfg["port"]
|
||||
rep = 'listen\s*(.*);'
|
||||
content = re.sub(rep, "listen " + port + ';', content)
|
||||
return content
|
||||
|
||||
|
||||
def initCfg():
|
||||
cfg = getServerDir() + "/cfg.json"
|
||||
if not os.path.exists(cfg):
|
||||
data = {}
|
||||
data['port'] = '6390'
|
||||
data['choose'] = 'mysql'
|
||||
data['path'] = ''
|
||||
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():
|
||||
conf = getConf()
|
||||
conf_inc = getConfInc()
|
||||
# 两个文件都在,才算启动成功
|
||||
if os.path.exists(conf) and os.path.exists(conf_inc):
|
||||
return 'start'
|
||||
return 'stop'
|
||||
|
||||
|
||||
def __release_port(port):
|
||||
from collections import namedtuple
|
||||
try:
|
||||
import firewall_api
|
||||
firewall_api.firewall_api().addAcceptPortArgs(port, 'phpRedisAdmin默认端口', 'port')
|
||||
return port
|
||||
except Exception as e:
|
||||
return "Release failed {}".format(e)
|
||||
|
||||
|
||||
def __delete_port(port):
|
||||
from collections import namedtuple
|
||||
try:
|
||||
import firewall_api
|
||||
firewall_api.firewall_api().delAcceptPortArgs(port, 'tcp')
|
||||
return port
|
||||
except Exception as e:
|
||||
return "Release failed {}".format(e)
|
||||
|
||||
|
||||
def openPort():
|
||||
for i in ["6390"]:
|
||||
__release_port(i)
|
||||
return True
|
||||
|
||||
|
||||
def delPort():
|
||||
for i in ["6390"]:
|
||||
__delete_port(i)
|
||||
return True
|
||||
|
||||
|
||||
def opRestart():
|
||||
mw.opWeb('stop')
|
||||
mw.opWeb('start')
|
||||
|
||||
|
||||
def start():
|
||||
initCfg()
|
||||
openPort()
|
||||
|
||||
pra_dir = getServerDir() + "/phpredisadmin"
|
||||
if os.path.exists(pra_dir):
|
||||
rand_str = mw.getRandomString(6)
|
||||
rand_str = rand_str.lower()
|
||||
pma_dir_dst = pra_dir + "_" + rand_str
|
||||
mw.execShell("mv " + pra_dir + " " + pma_dir_dst)
|
||||
setCfg('path', 'phpredisadmin_' + rand_str)
|
||||
|
||||
file_tpl = getPluginDir() + '/conf/phpredisadmin.conf'
|
||||
file_run = getConf()
|
||||
if not os.path.exists(file_run):
|
||||
centent = mw.readFile(file_tpl)
|
||||
centent = contentReplace(centent)
|
||||
mw.writeFile(file_run, centent)
|
||||
|
||||
pma_path = getServerDir() + '/app.pass'
|
||||
if not os.path.exists(pma_path):
|
||||
username = mw.getRandomString(8)
|
||||
password = mw.getRandomString(10)
|
||||
pass_cmd = username + ':' + mw.hasPwd(password)
|
||||
setCfg('username', username)
|
||||
setCfg('password', password)
|
||||
mw.writeFile(pma_path, pass_cmd)
|
||||
|
||||
tmp = getServerDir() + "/" + getCfg()["path"] + '/tmp'
|
||||
if not os.path.exists(tmp):
|
||||
os.mkdir(tmp)
|
||||
mw.execShell("chown -R www:www " + tmp)
|
||||
|
||||
conf_run = getConfInc()
|
||||
if not os.path.exists(conf_run):
|
||||
conf_tpl = getPluginDir() + '/conf/config.inc.php'
|
||||
centent = mw.readFile(conf_tpl)
|
||||
centent = contentReplace(centent)
|
||||
mw.writeFile(conf_run, centent)
|
||||
|
||||
log_a = accessLog()
|
||||
log_e = errorLog()
|
||||
|
||||
for i in [log_a, log_e]:
|
||||
if os.path.exists(i):
|
||||
cmd = "echo '' > " + i
|
||||
mw.execShell(cmd)
|
||||
|
||||
opRestart()
|
||||
return 'ok'
|
||||
|
||||
|
||||
def stop():
|
||||
conf = getConf()
|
||||
if os.path.exists(conf):
|
||||
os.remove(conf)
|
||||
delPort()
|
||||
|
||||
opRestart()
|
||||
return 'ok'
|
||||
|
||||
|
||||
def restart():
|
||||
return start()
|
||||
|
||||
|
||||
def reload():
|
||||
file_tpl = getPluginDir() + '/conf/phpredisadmin.conf'
|
||||
file_run = getConf()
|
||||
if os.path.exists(file_run):
|
||||
centent = mw.readFile(file_tpl)
|
||||
centent = contentReplace(centent)
|
||||
mw.writeFile(file_run, centent)
|
||||
return start()
|
||||
|
||||
|
||||
def setPhpVer():
|
||||
args = getArgs()
|
||||
|
||||
if not 'phpver' in args:
|
||||
return 'phpver missing'
|
||||
|
||||
cacheFile = getServerDir() + '/php.pl'
|
||||
mw.writeFile(cacheFile, args['phpver'])
|
||||
|
||||
file_tpl = getPluginDir() + '/conf/phpredisadmin.conf'
|
||||
file_run = getConf()
|
||||
|
||||
content = mw.readFile(file_tpl)
|
||||
content = contentReplace(content)
|
||||
mw.writeFile(file_run, content)
|
||||
|
||||
opRestart()
|
||||
return 'ok'
|
||||
|
||||
|
||||
def getSetPhpVer():
|
||||
cacheFile = getServerDir() + '/php.pl'
|
||||
if os.path.exists(cacheFile):
|
||||
return mw.readFile(cacheFile).strip()
|
||||
return ''
|
||||
|
||||
|
||||
def getPmaOption():
|
||||
data = getCfg()
|
||||
return mw.returnJson(True, 'ok', data)
|
||||
|
||||
|
||||
def getPmaPort():
|
||||
try:
|
||||
port = getPort()
|
||||
return mw.returnJson(True, 'OK', port)
|
||||
except Exception as e:
|
||||
# print(e)
|
||||
return mw.returnJson(False, '插件未启动!')
|
||||
|
||||
|
||||
def setPmaPort():
|
||||
args = getArgs()
|
||||
data = checkArgs(args, ['port'])
|
||||
if not data[0]:
|
||||
return data[1]
|
||||
|
||||
port = args['port']
|
||||
if port == '80':
|
||||
return mw.returnJson(False, '80端不能使用!')
|
||||
|
||||
file = getConf()
|
||||
if not os.path.exists(file):
|
||||
return mw.returnJson(False, '插件未启动!')
|
||||
content = mw.readFile(file)
|
||||
rep = 'listen\s*(.*);'
|
||||
content = re.sub(rep, "listen " + port + ';', content)
|
||||
mw.writeFile(file, content)
|
||||
|
||||
setCfg("port", port)
|
||||
mw.restartWeb()
|
||||
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)
|
||||
|
||||
pma_path = getCfg()['path']
|
||||
conf_run = getServerDir() + "/" + pma_path + '/config.inc.php'
|
||||
|
||||
conf_tpl = getPluginDir() + '/conf/config.inc.php'
|
||||
content = mw.readFile(conf_tpl)
|
||||
content = contentReplace(content)
|
||||
mw.writeFile(conf_run, content)
|
||||
|
||||
opRestart()
|
||||
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() + '/app.pass'
|
||||
username = mw.getRandomString(10)
|
||||
pass_cmd = cfg['username'] + ':' + mw.hasPwd(cfg['password'])
|
||||
mw.writeFile(pma_path, pass_cmd)
|
||||
|
||||
opRestart()
|
||||
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() + '/app.pass'
|
||||
username = mw.getRandomString(10)
|
||||
pass_cmd = cfg['username'] + ':' + mw.hasPwd(cfg['password'])
|
||||
mw.writeFile(pma_path, pass_cmd)
|
||||
|
||||
opRestart()
|
||||
return mw.returnJson(True, '修改成功!')
|
||||
|
||||
|
||||
def setPmaPath():
|
||||
args = getArgs()
|
||||
data = checkArgs(args, ['path'])
|
||||
if not data[0]:
|
||||
return data[1]
|
||||
|
||||
path = args['path']
|
||||
|
||||
if len(path) < 5:
|
||||
return mw.returnJson(False, '不能小于5位!')
|
||||
|
||||
old_path = getServerDir() + "/" + getCfg()['path']
|
||||
new_path = getServerDir() + "/" + path
|
||||
|
||||
mw.execShell("mv " + old_path + " " + new_path)
|
||||
setCfg('path', path)
|
||||
return mw.returnJson(True, '修改成功!')
|
||||
|
||||
|
||||
def accessLog():
|
||||
return getServerDir() + '/access.log'
|
||||
|
||||
|
||||
def errorLog():
|
||||
return getServerDir() + '/error.log'
|
||||
|
||||
|
||||
def Version():
|
||||
return mw.readFile(getServerDir() + '/version.pl')
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
func = sys.argv[1]
|
||||
if func == 'status':
|
||||
print(status())
|
||||
elif func == 'start':
|
||||
print(start())
|
||||
elif func == 'stop':
|
||||
print(stop())
|
||||
elif func == 'restart':
|
||||
print(restart())
|
||||
elif func == 'reload':
|
||||
print(reload())
|
||||
elif func == 'conf':
|
||||
print(getConf())
|
||||
elif func == 'version':
|
||||
print(Version())
|
||||
elif func == 'get_cfg':
|
||||
print(returnCfg())
|
||||
elif func == 'config_inc':
|
||||
print(getConfInc())
|
||||
elif func == 'get_home_page':
|
||||
print(getHomePage())
|
||||
elif func == 'set_php_ver':
|
||||
print(setPhpVer())
|
||||
elif func == 'get_set_php_ver':
|
||||
print(getSetPhpVer())
|
||||
elif func == 'get_pma_port':
|
||||
print(getPmaPort())
|
||||
elif func == 'set_pma_port':
|
||||
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 == 'set_pma_path':
|
||||
print(setPmaPath())
|
||||
elif func == 'access_log':
|
||||
print(accessLog())
|
||||
elif func == 'error_log':
|
||||
print(errorLog())
|
||||
else:
|
||||
print('error')
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"title":"phpRedisAdmin",
|
||||
"tip":"soft",
|
||||
"name":"phpRedisAdmin",
|
||||
"type":"运行环境",
|
||||
"ps":"常用的Redis后台管理",
|
||||
"versions":["1.19.0"],
|
||||
"updates":["1.19.0"],
|
||||
"shell":"install.sh",
|
||||
"checks":"server/phpredisadmin",
|
||||
"path": "server/phpredisadmin",
|
||||
"author":"phpredisadmin",
|
||||
"home":"https://github.com/ErikDubbelboer/phpRedisAdmin",
|
||||
"date":"2023-12-30",
|
||||
"pid": "2"
|
||||
}
|
||||
|
|
@ -0,0 +1,90 @@
|
|||
#!/bin/bash
|
||||
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin:/opt/homebrew/bin
|
||||
export PATH
|
||||
|
||||
curPath=`pwd`
|
||||
rootPath=$(dirname "$curPath")
|
||||
rootPath=$(dirname "$rootPath")
|
||||
serverPath=$(dirname "$rootPath")
|
||||
|
||||
install_tmp=${rootPath}/tmp/mw_install.pl
|
||||
|
||||
|
||||
if [ -f ${rootPath}/bin/activate ];then
|
||||
source ${rootPath}/bin/activate
|
||||
fi
|
||||
|
||||
if [ "$sys_os" == "Darwin" ];then
|
||||
BAK='_bak'
|
||||
else
|
||||
BAK=''
|
||||
fi
|
||||
|
||||
sysName=`uname`
|
||||
echo "use system: ${sysName}"
|
||||
|
||||
if [ "${sysName}" == "Darwin" ]; then
|
||||
OSNAME='macos'
|
||||
elif grep -Eqi "CentOS" /etc/issue || grep -Eq "CentOS" /etc/*-release; then
|
||||
OSNAME='centos'
|
||||
elif grep -Eqi "Fedora" /etc/issue || grep -Eq "Fedora" /etc/*-release; then
|
||||
OSNAME='fedora'
|
||||
elif grep -Eqi "Debian" /etc/issue || grep -Eq "Debian" /etc/*-release; then
|
||||
OSNAME='debian'
|
||||
elif grep -Eqi "Ubuntu" /etc/issue || grep -Eq "Ubuntu" /etc/*-release; then
|
||||
OSNAME='ubuntu'
|
||||
elif grep -Eqi "Raspbian" /etc/issue || grep -Eq "Raspbian" /etc/*-release; then
|
||||
OSNAME='raspbian'
|
||||
else
|
||||
OSNAME='unknow'
|
||||
fi
|
||||
|
||||
Install_App()
|
||||
{
|
||||
if [ -d $serverPath/phpredisadmin ];then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
mkdir -p ${serverPath}/phpredisadmin
|
||||
mkdir -p ${serverPath}/source/phpredisadmin
|
||||
echo "${1}" > ${serverPath}/phpredisadmin/version.pl
|
||||
|
||||
VER=$1
|
||||
|
||||
FDIR=phpRedisAdmin-${VER}
|
||||
FILE=v${VER}.tar.gz
|
||||
DOWNLOAD=https://github.com/erikdubbelboer/phpRedisAdmin/archive/refs/tags/v${VER}.tar.gz
|
||||
|
||||
|
||||
if [ ! -f $serverPath/source/phpredisadmin/$FILE ];then
|
||||
wget --no-check-certificate -O $serverPath/source/phpredisadmin/$FILE $DOWNLOAD
|
||||
fi
|
||||
|
||||
if [ ! -d $serverPath/source/phpredisadmin/$FDIR ];then
|
||||
cd $serverPath/source/phpredisadmin && tar zxvf $FILE
|
||||
fi
|
||||
|
||||
cp -r $serverPath/source/phpredisadmin/$FDIR $serverPath/phpredisadmin/
|
||||
cd $serverPath/phpredisadmin/ && mv $FDIR phpredisadmin
|
||||
rm -rf $serverPath/source/phpredisadmin/$FDIR
|
||||
|
||||
cd $serverPath/phpredisadmin/phpredisadmin && composer install
|
||||
|
||||
cd ${rootPath} && python3 ${rootPath}/plugins/phpredisadmin/index.py start
|
||||
echo '安装完成'
|
||||
}
|
||||
|
||||
Uninstall_App()
|
||||
{
|
||||
cd ${rootPath} && python3 ${rootPath}/plugins/phpredisadmin/index.py stop
|
||||
|
||||
rm -rf ${serverPath}/phpredisadmin
|
||||
echo '卸载完成'
|
||||
}
|
||||
|
||||
action=$1
|
||||
if [ "${1}" == 'install' ];then
|
||||
Install_App $2
|
||||
else
|
||||
Uninstall_App $2
|
||||
fi
|
||||
|
|
@ -0,0 +1,172 @@
|
|||
function str2Obj(str){
|
||||
var data = {};
|
||||
kv = str.split('&');
|
||||
for(i in kv){
|
||||
v = kv[i].split('=');
|
||||
data[v[0]] = v[1];
|
||||
}
|
||||
return data;
|
||||
}
|
||||
|
||||
function pmaPost(method,args,callback){
|
||||
|
||||
var _args = null;
|
||||
if (typeof(args) == 'string'){
|
||||
_args = JSON.stringify(str2Obj(args));
|
||||
} else {
|
||||
_args = JSON.stringify(args);
|
||||
}
|
||||
|
||||
var loadT = layer.msg('正在获取...', { icon: 16, time: 0, shade: 0.3 });
|
||||
$.post('/plugins/run', {name:'phpredisadmin', func:method, args:_args}, function(data) {
|
||||
layer.close(loadT);
|
||||
if (!data.status){
|
||||
layer.msg(data.msg,{icon:0,time:2000,shade: [0.3, '#000']});
|
||||
return;
|
||||
}
|
||||
|
||||
if(typeof(callback) == 'function'){
|
||||
callback(data);
|
||||
}
|
||||
},'json');
|
||||
}
|
||||
|
||||
|
||||
function pmaAsyncPost(method,args){
|
||||
|
||||
var _args = null;
|
||||
if (typeof(args) == 'string'){
|
||||
_args = JSON.stringify(str2Obj(args));
|
||||
} else {
|
||||
_args = JSON.stringify(args);
|
||||
}
|
||||
return syncPost('/plugins/run', {name:'phpredisadmin', func:method, args:_args});
|
||||
}
|
||||
|
||||
function homePage(){
|
||||
pmaPost('get_home_page', '', function(data){
|
||||
var rdata = $.parseJSON(data.data);
|
||||
if (!rdata.status){
|
||||
layer.msg(rdata.msg,{icon:0,time:2000,shade: [0.3, '#000']});
|
||||
return;
|
||||
}
|
||||
var con = '<button class="btn btn-default btn-sm" onclick="window.open(\'' + rdata.data + '\')">主页</button>';
|
||||
$(".soft-man-con").html(con);
|
||||
});
|
||||
}
|
||||
|
||||
//phpmyadmin切换php版本
|
||||
function phpVer(version) {
|
||||
|
||||
var _version = pmaAsyncPost('get_set_php_ver','')
|
||||
if (_version['data'] != ''){
|
||||
version = _version['data'];
|
||||
}
|
||||
|
||||
$.post('/site/get_php_version', function(rdata) {
|
||||
// console.log(rdata);
|
||||
var body = "<div class='ver line'><span class='tname'>PHP版本</span><select id='phpver' class='bt-input-text mr20' name='phpVersion' style='width:110px'>";
|
||||
var optionSelect = '';
|
||||
for (var i = 0; i < rdata.length; i++) {
|
||||
optionSelect = rdata[i].version == version ? 'selected' : '';
|
||||
body += "<option value='" + rdata[i].version + "' " + optionSelect + ">" + rdata[i].name + "</option>"
|
||||
}
|
||||
body += '</select><button class="btn btn-success btn-sm" onclick="phpVerChange(\'phpversion\',\'get\')">保存</button></div>';
|
||||
$(".soft-man-con").html(body);
|
||||
},'json');
|
||||
}
|
||||
|
||||
function phpVerChange(type, msg) {
|
||||
var phpver = $("#phpver").val();
|
||||
pmaPost('set_php_ver', 'phpver='+phpver, function(data){
|
||||
if ( data.data == 'ok' ){
|
||||
layer.msg('设置成功!',{icon:1,time:2000,shade: [0.3, '#000']});
|
||||
} else {
|
||||
layer.msg('设置失败!',{icon:2,time:2000,shade: [0.3, '#000']});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
//phpmyadmin安全设置
|
||||
function safeConf() {
|
||||
pmaPost('get_pma_option', {}, function(rdata){
|
||||
var rdata = $.parseJSON(rdata.data);
|
||||
if (!rdata.status){
|
||||
layer.msg(rdata.msg,{icon:2,time:2000,shade: [0.3, '#000']});
|
||||
return;
|
||||
}
|
||||
|
||||
var cfg = rdata.data;
|
||||
var con = '<div class="ver line">\
|
||||
<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>\
|
||||
<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>\
|
||||
<hr/>\
|
||||
<div class="ver line">\
|
||||
<span class="tname">路径名</span>\
|
||||
<input style="width:180px" class="bt-input-text mr20" name="path" id="pmport" value="' + cfg['path'] + '" placeholder="" type="text">\
|
||||
<button class="btn btn-success btn-sm" onclick="setPmaPath()">保存</button>\
|
||||
</div>';
|
||||
$(".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 });
|
||||
});
|
||||
}
|
||||
|
||||
function setPmaPath(){
|
||||
var path = $("input[name=path]").val();
|
||||
pmaPost('set_pma_path',{'path':path}, function(data){
|
||||
var rdata = $.parseJSON(data.data);
|
||||
layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 });
|
||||
});
|
||||
}
|
||||
|
||||
//修改phpmyadmin端口
|
||||
function setPamPort() {
|
||||
var pmport = $("#pmport").val();
|
||||
if (pmport < 80 || pmport > 65535) {
|
||||
layer.msg('端口范围不合法!', { icon: 2 });
|
||||
return;
|
||||
}
|
||||
var data = 'port=' + pmport;
|
||||
|
||||
pmaPost('set_pma_port',data, function(data){
|
||||
var rdata = $.parseJSON(data.data);
|
||||
layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 });
|
||||
});
|
||||
}
|
||||
Loading…
Reference in New Issue