Merge pull request #463 from midoks/dev

增加mosquitto插件
pull/475/head
Mr Chen 2 years ago committed by GitHub
commit c1ffb36642
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      README.md
  2. 2
      class/core/config_api.py
  3. 3
      plugins/mosquitto/config/mosquitto.conf
  4. BIN
      plugins/mosquitto/ico.png
  5. 18
      plugins/mosquitto/index.html
  6. 245
      plugins/mosquitto/index.py
  7. 18
      plugins/mosquitto/info.json
  8. 12
      plugins/mosquitto/init.d/mosquitto.service.tpl
  9. 84
      plugins/mosquitto/init.d/mosquitto.tpl
  10. 88
      plugins/mosquitto/install.sh
  11. 55
      plugins/mosquitto/js/mosquitto.js
  12. 2
      plugins/php/index.py
  13. 1
      plugins/php/init.d/php.service.tpl
  14. 24
      plugins/redis/index.py
  15. 2
      plugins/tgbot/startup/extend/push_ad.py
  16. 2
      rewrite/nginx/header_acao.conf
  17. 9
      rewrite/nginx/header_cors.conf
  18. 2
      scripts/install/debian.sh
  19. 4
      scripts/install/ubuntu.sh

@ -111,6 +111,8 @@ docker run -itd --name mw-server --privileged=true -p 7200:7200 -p 80:80 -p 443:
* 支持rar解压。
* SSH禁止密码登陆优化。
* 防火墙支持tcp/udp模式。
* 增加mosquitto插件。
* redis负载状态读取优化。
### JSDelivr安装地址

@ -27,7 +27,7 @@ from flask import request
class config_api:
__version = '0.16.1.3'
__version = '0.16.1.5'
__api_addr = 'data/api.json'
def __init__(self):

@ -0,0 +1,3 @@
allow_anonymous true
listener 1883

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

@ -0,0 +1,18 @@
<div class="bt-form">
<div class='plugin_version'></div>
<div class="bt-w-main">
<div class="bt-w-menu">
<p class="bgw" onclick="pluginService('mosquitto');">服务</p>
<p onclick="pluginInitD('mosquitto');">自启动</p>
<p onclick="pluginConfig('mosquitto');">配置修改</p>
</div>
<div class="bt-w-con pd15">
<div class="soft-man-con"></div>
</div>
</div>
</div>
<script type="text/javascript">
$.getScript( "/plugins/file?name=mosquitto&f=js/mosquitto.js", function(){
pluginService('mosquitto', $('.plugin_version').attr('version'));
});
</script>

@ -0,0 +1,245 @@
# coding:utf-8
import sys
import io
import os
import time
import re
sys.path.append(os.getcwd() + "/class/core")
import mw
app_debug = False
if mw.isAppleSystem():
app_debug = True
def getPluginName():
return 'mosquitto'
def getPluginDir():
return mw.getPluginDir() + '/' + getPluginName()
def getServerDir():
return mw.getServerDir() + '/' + getPluginName()
def getInitDFile():
current_os = mw.getOs()
if current_os == 'darwin':
return '/tmp/' + getPluginName()
if current_os.startswith('freebsd'):
return '/etc/rc.d/' + getPluginName()
return '/etc/init.d/' + getPluginName()
def getConf():
path = getServerDir() + "/etc/mosquitto/mosquitto.conf"
return path
def getConfTpl():
path = getPluginDir() + "/config/mosquitto.conf"
return path
def getInitDTpl():
path = getPluginDir() + "/init.d/" + getPluginName() + ".tpl"
return path
def getArgs():
args = sys.argv[3:]
tmp = {}
args_len = len(args)
if args_len == 1:
t = args[0].strip('{').strip('}')
if t.strip() == '':
tmp = []
else:
t = t.split(':')
tmp[t[0]] = t[1]
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 status():
data = mw.execShell(
"ps aux|grep mosquitto |grep -v grep | grep -v python | grep -v mdserver-web | awk '{print $2}'")
if data[0] == '':
return 'stop'
return 'start'
def initDreplace():
file_tpl = getInitDTpl()
service_path = os.path.dirname(os.getcwd())
initD_path = getServerDir() + '/init.d'
if not os.path.exists(initD_path):
os.mkdir(initD_path)
file_bin = initD_path + '/' + getPluginName()
# initd replace
if not os.path.exists(file_bin):
content = mw.readFile(file_tpl)
content = content.replace('{$SERVER_PATH}', service_path)
mw.writeFile(file_bin, content)
mw.execShell('chmod +x ' + file_bin)
# log
dataLog = getServerDir() + '/data'
if not os.path.exists(dataLog):
mw.execShell('chmod +x ' + file_bin)
# config replace
dst_conf = getServerDir() + '/etc/mosquitto/' + getPluginName() + '.conf'
dst_conf_init = getServerDir() + '/init.pl'
if not os.path.exists(dst_conf_init):
conf_content = mw.readFile(getConfTpl())
conf_content = conf_content.replace('{$SERVER_PATH}', service_path)
mw.writeFile(dst_conf, conf_content)
mw.writeFile(dst_conf_init, 'ok')
# systemd
systemDir = mw.systemdCfgDir()
systemService = systemDir + '/' + getPluginName() + '.service'
if os.path.exists(systemDir) and not os.path.exists(systemService):
systemServiceTpl = getPluginDir() + '/init.d/' + getPluginName() + '.service.tpl'
service_path = mw.getServerDir()
se_content = mw.readFile(systemServiceTpl)
se_content = se_content.replace('{$SERVER_PATH}', service_path)
mw.writeFile(systemService, se_content)
mw.execShell('systemctl daemon-reload')
return file_bin
def mqttOp(method):
file = initDreplace()
current_os = mw.getOs()
if current_os == "darwin":
data = mw.execShell(file + ' ' + method)
if data[1] == '':
return 'ok'
return data[1]
if current_os.startswith("freebsd"):
data = mw.execShell('service ' + getPluginName() + ' ' + method)
if data[1] == '':
return 'ok'
return data[1]
data = mw.execShell('systemctl ' + method + ' ' + getPluginName())
if data[1] == '':
return 'ok'
return data[1]
def start():
return mqttOp('start')
def stop():
return mqttOp('stop')
def restart():
status = mqttOp('restart')
log_file = runLog()
mw.execShell("echo '' > " + log_file)
return status
def reload():
return mqttOp('reload')
def initdStatus():
current_os = mw.getOs()
if current_os == 'darwin':
return "Apple Computer does not support"
if current_os.startswith('freebsd'):
initd_bin = getInitDFile()
if os.path.exists(initd_bin):
return 'ok'
shell_cmd = 'systemctl status ' + \
getPluginName() + ' | grep loaded | grep "enabled;"'
data = mw.execShell(shell_cmd)
if data[0] == '':
return 'fail'
return 'ok'
def initdInstall():
current_os = mw.getOs()
if current_os == 'darwin':
return "Apple Computer does not support"
# freebsd initd install
if current_os.startswith('freebsd'):
import shutil
source_bin = initDreplace()
initd_bin = getInitDFile()
shutil.copyfile(source_bin, initd_bin)
mw.execShell('chmod +x ' + initd_bin)
mw.execShell('sysrc ' + getPluginName() + '_enable="YES"')
return 'ok'
mw.execShell('systemctl enable ' + getPluginName())
return 'ok'
def initdUinstall():
current_os = mw.getOs()
if current_os == 'darwin':
return "Apple Computer does not support"
if current_os.startswith('freebsd'):
initd_bin = getInitDFile()
os.remove(initd_bin)
mw.execShell('sysrc ' + getPluginName() + '_enable="NO"')
return 'ok'
mw.execShell('systemctl disable ' + getPluginName())
return 'ok'
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 == 'initd_status':
print(initdStatus())
elif func == 'initd_install':
print(initdInstall())
elif func == 'initd_uninstall':
print(initdUinstall())
elif func == 'conf':
print(getConf())
else:
print('error')

@ -0,0 +1,18 @@
{
"sort": 999,
"ps": "MQTT是一个消息队列遥测传输软件",
"name": "mosquitto",
"title": "mosquitto",
"shell": "install.sh",
"versions":["2.0.18"],
"updates":["2.0.18"],
"tip": "soft",
"checks": "server/mosquitto",
"path": "server/mosquitto",
"display": 1,
"author": "midoks",
"date": "2023-09-28",
"home": "https://mosquitto.org",
"type": "soft",
"pid": "4"
}

@ -0,0 +1,12 @@
[Unit]
Description=Mosquitto MQTT Broker
After=network.target
[Service]
Type=forking
ExecStart={$SERVER_PATH}/mosquitto/sbin/mosquitto -c {$SERVER_PATH}/mosquitto/etc/mosquitto/mosquitto.conf
ExecReload=/bin/kill -USR2 $MAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target

@ -0,0 +1,84 @@
#!/bin/sh
# chkconfig: 2345 55 25
# description: Mosquitto MQTT Broker Service
### BEGIN INIT INFO
# Provides: MQTT
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts MQTT
# Description: starts the MDW-Web
### END INIT INFO
# Simple MQTT init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.
PATH=/usr/local/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export LANG=en_US.UTF-8
mw_path={$SERVER_PATH}
PATH=$PATH:$mw_path/bin
if [ -f $mw_path/bin/activate ];then
source $mw_path/bin/activate
fi
app_start(){
isStart=`ps -ef|grep 'mosquitto' |grep -v grep | awk '{print $2}'`
if [ "$isStart" == '' ];then
echo -e "starting mosquitto... \c"
cd $mw_path
${APP_PATH}/mosquitto/sbin/mosquitto -c ${APP_PATH}/mosquitto/etc/mosquitto/mosquitto.conf >> {$APP_PATH}/mosquitto.log &
isStart=""
while [[ "$isStart" == "" ]];
do
echo -e ".\c"
sleep 0.5
isStart=`ps -ef|grep 'mosquitto' |grep -v grep | awk '{print $2}'`
let n+=1
if [ $n -gt 20 ];then
break;
fi
done
if [ "$isStart" == '' ];then
echo -e "\033[31mfailed\033[0m"
echo -e "\033[31mError: mosquitto service startup failed.\033[0m"
return;
fi
echo -e "\033[32mdone\033[0m"
else
echo "starting mosquitto...(pid $(echo $isStart)) already running"
fi
}
app_stop(){
echo -e "stopping mosquitto ... \c";
arr=`ps aux | grep 'mosquitto' | grep -v grep | awk '{print $2}'`
for p in ${arr[@]}
do
kill -9 $p > /dev/null 2>&1
done
echo -e "\033[32mdone\033[0m"
}
case "$1" in
start)
app_start
;;
stop)
app_stop
;;
restart|reload)
app_stop
sleep 0.3
app_start
;;
*)
echo "Please use start or stop as first argument"
;;
esac

@ -0,0 +1,88 @@
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
curPath=`pwd`
rootPath=$(dirname "$curPath")
rootPath=$(dirname "$rootPath")
serverPath=$(dirname "$rootPath")
sysName=`uname`
echo "use system: ${sysName}"
# cd /Users/midoks/Desktop/mwdev/server/mdserver-web/plugins/mosquitto && bash install.sh install 2.0.18
# cd /www/mdserver-web/plugins/mosquitto && bash install.sh install 2.0.18
install_tmp=${rootPath}/tmp/mw_install.pl
VERSION=$2
Install_App()
{
if id mosquitto &> /dev/null ;then
echo "mosquitto UID is `id -u mosquitto`"
echo "mosquitto Shell is `grep "^mosquitto:" /etc/passwd |cut -d':' -f7 `"
else
groupadd mosquitto
useradd -g mosquitto mosquitto
fi
echo '正在安装脚本文件...' > $install_tmp
mkdir -p $serverPath/source
if [ ! -f $serverPath/source/mosquitto-${VERSION}.tar.gz ];then
wget --no-check-certificate -O $serverPath/source/mosquitto-${VERSION}.tar.gz https://mosquitto.org/files/source/mosquitto-${VERSION}.tar.gz
fi
if [ ! -d mosquitto-${VERSION} ];then
cd $serverPath/source && tar -zxvf mosquitto-${VERSION}.tar.gz
fi
INSTALL_CMD=cmake
# check cmake version
CMAKE_VERSION=`cmake -version | grep version | awk '{print $3}' | awk -F '.' '{print $1}'`
if [ "$CMAKE_VERSION" -eq "2" ];then
mkdir -p /var/log/mariadb
touch /var/log/mariadb/mariadb.log
INSTALL_CMD=cmake3
fi
mkdir -p $serverPath/mosquitto
if [ ! -d $serverPath/mosquitto/bin ];then
cd mosquitto-${VERSION} && ${INSTALL_CMD} CMakeLists.txt -DCMAKE_INSTALL_PREFIX=$serverPath/mosquitto && make install
fi
if [ -d $serverPath/mosquitto ];then
echo "${VERSION}" > $serverPath/mosquitto/version.pl
echo '安装完成' > $install_tmp
cd ${rootPath} && python3 ${rootPath}/plugins/mosquitto/index.py start
cd ${rootPath} && python3 ${rootPath}/plugins/mosquitto/index.py initd_install
fi
}
Uninstall_App()
{
if [ -f /usr/lib/systemd/system/mosquitto.service ];then
systemctl stop mosquitto
systemctl disable mosquitto
rm -rf /usr/lib/systemd/system/mosquitto.service
systemctl daemon-reload
fi
if [ -f $serverPath/mosquitto/initd/mosquitto ];then
$serverPath/mosquitto/initd/mosquitto stop
fi
rm -rf $serverPath/mosquitto
echo "uninstall mosquitto" > $install_tmp
}
action=$1
if [ "${1}" == 'install' ];then
Install_App
else
Uninstall_App
fi

@ -0,0 +1,55 @@
function mqPost(method, version, args,callback){
var loadT = layer.msg('正在获取...', { icon: 16, time: 0, shade: 0.3 });
var req_data = {};
req_data['name'] = 'mosquitto';
req_data['func'] = method;
req_data['version'] = version;
if (typeof(args) == 'string'){
req_data['args'] = JSON.stringify(toArrayObject(args));
} else {
req_data['args'] = JSON.stringify(args);
}
$.post('/plugins/run', req_data, function(data) {
layer.close(loadT);
if (!data.status){
//错误展示10S
layer.msg(data.msg,{icon:0,time:2000,shade: [10, '#000']});
return;
}
if(typeof(callback) == 'function'){
callback(data);
}
},'json');
}
function mqPostCallbak(method, version, args,callback){
var loadT = layer.msg('正在获取...', { icon: 16, time: 0, shade: 0.3 });
var req_data = {};
req_data['name'] = 'mosquitto';
req_data['func'] = method;
args['version'] = version;
if (typeof(args) == 'string'){
req_data['args'] = JSON.stringify(toArrayObject(args));
} else {
req_data['args'] = JSON.stringify(args);
}
$.post('/plugins/callback', req_data, 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');
}

@ -323,6 +323,8 @@ def phpOp(version, method):
def start(version):
mw.execShell(
'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/www/server/lib/icu/lib')
return phpOp(version, 'start')

@ -1,6 +1,7 @@
# It's not recommended to modify this file in-place, because it
# will be overwritten during upgrades. If you want to customize,
# the best way is to use the "systemctl edit" command.
# systemctl daemon-reload
[Unit]
Description=The PHP {$VERSION} FastCGI Process Manager

@ -117,9 +117,9 @@ def initDreplace():
# systemd
systemDir = mw.systemdCfgDir()
systemService = systemDir + '/redis.service'
systemService = systemDir + '/' + getPluginName() + '.service'
if os.path.exists(systemDir) and not os.path.exists(systemService):
systemServiceTpl = getPluginDir() + '/init.d/redis.service.tpl'
systemServiceTpl = getPluginDir() + '/init.d/' + getPluginName() + '.service.tpl'
service_path = mw.getServerDir()
se_content = mw.readFile(systemServiceTpl)
se_content = se_content.replace('{$SERVER_PATH}', service_path)
@ -171,6 +171,18 @@ def reload():
return redisOp('reload')
def getPort():
conf = getServerDir() + '/redis.conf'
content = mw.readFile(conf)
rep = "^(" + 'port' + ')\s*([.0-9A-Za-z_& ~]+)'
tmp = re.search(rep, content, re.M)
if tmp:
return tmp.groups()[1]
return '6379'
def runInfo():
s = status()
if s == 'stop':
@ -186,14 +198,18 @@ def runInfo():
requirepass = tmp.groups()[1]
default_ip = '127.0.0.1'
port = getPort()
# findDebian = mw.execShell('cat /etc/issue |grep Debian')
# if findDebian[0] != '':
# default_ip = mw.getLocalIp()
cmd = getServerDir() + "/bin/redis-cli -h " + default_ip + " info"
cmd = getServerDir() + "/bin/redis-cli -h " + \
default_ip + ' -p ' + port + " info"
if requirepass != "":
cmd = getServerDir() + '/bin/redis-cli -h ' + default_ip + \
' -a "' + requirepass + '" info'
' -p ' + port + ' -a "' + requirepass + '" info'
# print(cmd)
data = mw.execShell(cmd)[0]
res = [
'tcp_port',

@ -42,7 +42,7 @@ def send_msg(bot, tag='ad', trigger_time=300):
# 信号只在一个周期内执行一次|end
# https://t.me/gjgzs2022 | 22/m
# 高价收量 👑 集团收量 ❤ 流量变现/支付宝代付 ❤ 微信代付/实名认证/过人脸🕵各种账号处理✅ | 28/m
# 高价收量 👑 集团收量 ❤ 流量变现/支付宝代付 ❤ 微信代付/实名认证/过人脸🕵各种账号处理✅ | 28/m | next 12/28
# https://zhaoziyuan.la/ | web | 15/m | 2m | next,7/15
# 腾云机场 |9/m
# 🚀鲲鹏VPN | 13/m | next,10/13

@ -1,2 +0,0 @@
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';

@ -0,0 +1,9 @@
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
#add_header Access-Control-Allow-Origin *;
#add_header Access-Control-Allow-Methods *;
#add_header Access-Control-Allow-Header *;

@ -184,6 +184,8 @@ apt install -y libevent-dev libncurses5-dev libldap2-dev
apt install -y libzip-dev
apt install -y libicu-dev
apt install -y xsltproc
apt install -y libcurl4-openssl-dev
apt install -y curl libcurl4-gnutls-dev

@ -21,6 +21,7 @@ apt install -y expect
apt install -y cron
apt install -y locate
locale-gen en_US.UTF-8
localedef -v -c -i en_US -f UTF-8 en_US.UTF-8
@ -112,6 +113,9 @@ apt install -y libevent-dev libncurses5-dev libldap2-dev
apt install -y libzip-dev
apt install -y libicu-dev
# mqtt
apt install -y xsltproc
apt install -y build-essential
apt install -y libcurl4-openssl-dev

Loading…
Cancel
Save