luci-app-unblockneteasemusic-go: bump to v1.14

This commit is contained in:
CN_SZTL 2020-10-25 14:43:39 +08:00
parent 02382cd391
commit ac47a44a00
No known key found for this signature in database
GPG Key ID: 6850B6345C862176
9 changed files with 205 additions and 96 deletions

View File

@ -1,11 +1,11 @@
# Copyright (C) 2020 Silvan
include $(TOPDIR)/rules.mk
LUCI_TITLE:=LuCI support for UnblockNeteaseMusic Go
LUCI_DEPENDS:=+bash +busybox +coreutils +coreutils-nohup +curl +dnsmasq-full +openssl-util +ipset +UnblockNeteaseMusic-Go
LUCI_TITLE:=LuCI support for UnblockNeteaseMusic-Go
LUCI_DEPENDS:=+bash +busybox +unzip +coreutils +coreutils-nohup +curl +dnsmasq-full +ipset +luci-compat +openssl-util +UnblockNeteaseMusic-Go
LUCI_PKGARCH:=all
PKG_NAME:=luci-app-unblockneteasemusic-go
PKG_VERSION:=1.9
PKG_VERSION:=1.14
PKG_RELEASE:=1
PKG_MAINTAINER:=https://github.com/cnsilvan/luci-app-unblockneteasemusic

View File

@ -9,10 +9,11 @@ function index()
return
end
entry({"admin", "services", "unblockneteasemusic"},firstchild(), _("解除网易云音乐播放限制"), 50).dependent = false
entry({"admin", "services", "unblockneteasemusic"},firstchild(), _("解除云音乐播放限制"), 50).dependent = false
entry({"admin", "services", "unblockneteasemusic", "general"},cbi("unblockneteasemusic"), _("基本设定"), 1)
entry({"admin", "services", "unblockneteasemusic", "log"},form("unblockneteasemusic_log"), _("日志"), 2)
entry({"admin", "services", "unblockneteasemusic", "senior"},cbi("unblockneteasemusic_senior"), _("高级设定"), 2)
entry({"admin", "services", "unblockneteasemusic", "log"},form("unblockneteasemusic_log"), _("日志"), 3)
entry({"admin", "services", "unblockneteasemusic", "status"},call("act_status")).leaf=true
end

View File

@ -1,4 +1,3 @@
local http = luci.http
mp = Map("unblockneteasemusic", translate("解除网易云音乐播放限制 (Golang)"))
mp.description = translate("原理:采用 [酷我/酷狗/咪咕] 音源(后续有空补充),替换网易云音乐 灰色 歌曲链接<br/>具体使用方法参见https://github.com/cnsilvan/luci-app-unblockneteasemusic<br/>提示客户端网易云音乐能用就别升级app最新版本不一定能用")
@ -48,63 +47,7 @@ hijack.description = translate("如果使用Hosts劫持请将HTTP/HTTPS端口
hijack.default = "dont_hijack"
hijack.rmempty = false
search_limit = s:option(Value, "search_limit", translate("搜索结果限制"))
search_limit.description = translate("在搜索页面显示其他平台搜索结果个数可填0-3")
search_limit.default = "0"
search_limit.rmempty = false
daemon_enable = s:option(Flag, "daemon_enable", translate("启用进程守护"))
daemon_enable.description = translate("开启后,附属程序会自动检测主程序运行状态,在主程序退出时自动重启")
daemon_enable.default = 0
daemon_enable.rmempty = false
endpoint_enable = s:option(Flag, "endpoint_enable", translate("启用地址转换"))
endpoint_enable.description = translate("开启后设备需要信任证书经测试ios设备需要开启android设备使用咪咕源下载时需要开启其他情况无法使用时再开启尝试")
endpoint_enable.default = 0
endpoint_enable.rmempty = false
force_best_quality = s:option(Flag, "force_best_quality", translate("强制音质优先"))
force_best_quality.description = translate("开启后,客户端选择音质将失效")
force_best_quality.default = 0
force_best_quality.rmempty = false
delete = s:option(Button,"_delete", translate("删除根证书"))
delete.description = translate("删除证书,以便下次启动时生成,可用于解决过期证书等问题")
delete.inputstyle = "reload"
delete.write = function()
delete_()
end
download = s:option(Button,"_download", translate("下载根证书"))
download.description = translate("请在客户端信任该证书。该证书由你设备自动生成,安全可靠<br/>IOS信任证书步骤1. 安装证书--设置-描述文件-安装 2. 通用-关于本机-证书信任设置-启动完全信任")
download.inputstyle = "reload"
download.write = function()
download_()
end
function download_()
local sFile, block
sFile=nixio.open("/usr/share/UnblockNeteaseMusic/ca.crt","r")
http.header('Content-Disposition','attachment; filename="ca.crt"')
http.prepare_content("application/octet-stream")
while true do
block=sFile:read(nixio.const.buffersize)
if(not block)or(#block==0)then
break
else
http.write(block)
end
end
sFile:close()
http.close()
end
function delete_()
local sPath, fd
sPath = "/usr/share/UnblockNeteaseMusic/server.crt"
fd = os.remove(sPath)
if not fd then
delete.description = string.format('删除证书,以便下次启动时生成,可用于解决过期证书等问题<br/><span style="color: red">%s</span>', translate("Couldn't delete file: ") .. sPath)
return
end
delete.description = translate("删除证书,以便下次启动时生成,可用于解决过期证书等问题")
end
return mp

View File

@ -0,0 +1,94 @@
local http = luci.http
mp = Map("unblockneteasemusic", translate("解除网易云音乐播放限制 (Golang)"))
mp.description = translate("原理:采用 [酷我/酷狗/咕咪] 音源(后续有空补充),替换网易云音乐 灰色 歌曲链接<br/>具体使用方法参见https://github.com/cnsilvan/luci-app-unblockneteasemusic<br/>提示客户端网易云音乐能用就别升级app最新版本不一定能用")
mp:section(SimpleSection).template = "unblockneteasemusic/unblockneteasemusic_status"
s = mp:section(TypedSection, "unblockneteasemusic")
s.anonymous=true
s.addremove=false
daemon_enable = s:option(Flag, "daemon_enable", translate("启用进程守护"))
daemon_enable.description = translate("开启后,附属程序会自动检测主程序运行状态,在主程序退出时自动重启")
daemon_enable.default = 0
daemon_enable.rmempty = false
search_limit = s:option(Value, "search_limit", translate("搜索结果限制"))
search_limit.description = translate("在搜索页面显示其他平台搜索结果个数可填0-3")
search_limit.default = "0"
search_limit.rmempty = false
endpoint_enable = s:option(Flag, "endpoint_enable", translate("启用地址转换"))
endpoint_enable.description = translate("开启后设备需要信任证书经测试ios设备需要开启android设备使用咪咕源下载时需要开启其他情况无法使用时再开启尝试")
endpoint_enable.default = 0
endpoint_enable.rmempty = false
force_best_quality = s:option(Flag, "force_best_quality", translate("强制音质优先"))
force_best_quality.description = translate("开启后,客户端选择音质将失效")
force_best_quality.default = 0
force_best_quality.rmempty = false
auto_update = s:option(Flag, "auto_update", translate("核心库自动更新"))
auto_update.description = translate("")
auto_update.default = 0
auto_update.rmempty = false
delete = s:option(Button,"_delete", translate("删除根证书"))
delete.description = translate("删除证书,以便下次启动时生成,可用于解决过期证书等问题")
delete.inputstyle = "reload"
delete.write = function()
delete_()
end
download = s:option(Button,"_download", translate("下载根证书"))
download.description = translate("请在客户端信任该证书。该证书由你设备自动生成,安全可靠<br/>IOS信任证书步骤1. 安装证书--设置-描述文件-安装 2. 通用-关于本机-证书信任设置-启动完全信任")
download.inputstyle = "reload"
download.write = function()
download_()
end
local currentTagCMD="UnblockNeteaseMusic -v |grep Version|awk '{print $2}'"
local currentRuntimeCMD="UnblockNeteaseMusic -v |grep runtime|awk -F\\( '{print $2}'|awk '{print $3,$4}'|sed -E 's/\)//g'|sed 's/[ \t]*$//g'"
function excute_cmd(cmd)
local t = io.popen(cmd)
local ret = t:read("*all")
t:close()
return ret
end
function currentVersion()
local current=excute_cmd(currentTagCMD)
local runtime=excute_cmd(currentRuntimeCMD)
auto_update.description=string.format("当前版本:%s(%s)",current,runtime)
end
currentVersion()
function download_()
local sFile, block
sFile=nixio.open("/usr/share/UnblockNeteaseMusic/ca.crt","r")
http.header('Content-Disposition','attachment; filename="ca.crt"')
http.prepare_content("application/octet-stream")
while true do
block=sFile:read(nixio.const.buffersize)
if(not block)or(#block==0)then
break
else
http.write(block)
end
end
sFile:close()
http.close()
end
function delete_()
local sPath, fd
sPath = "/usr/share/UnblockNeteaseMusic/server.crt"
fd = os.remove(sPath)
if not fd then
delete.description = string.format('删除证书,以便下次启动时生成,可用于解决过期证书等问题<br/><span style="color: red">%s</span>', translate("Couldn't delete file: ") .. sPath)
return
end
delete.description = translate("删除证书,以便下次启动时生成,可用于解决过期证书等问题")
end
return mp

View File

@ -6,3 +6,7 @@ config unblockneteasemusic
option music_source 'default'
option hijack_ways 'use_ipset'
option daemon_enable '0'
option search_limit '0'
option endpoint_enable '0'
option force_best_quality '0'
option auto_update '0'

View File

@ -6,9 +6,3 @@ if [ "$(uci get unblockneteasemusic.@unblockneteasemusic[0].enable)" == "1" ]; t
echo "$(date -R) ifup--尝试重启应用..." >>"${log_file}"
/etc/init.d/unblockneteasemusic restart
fi
# curl -s "http://httpdns.n.netease.com/httpdns/v2/d?domain=music.163.com,interface.music.163.com,interface3.music.163.com,apm.music.163.com,apm3.music.163.com,clientlog.music.163.com,clientlog3.music.163.com" | grep -Eo '[0-9]+?\.[0-9]+?\.[0-9]+?\.[0-9]+?' | sort | uniq | awk '{print "ipset add unblockneteasemusic4 "$1}' | bash >"/dev/null" 2>&1
# domains="music.163.com"
# for domain in $domains; do
# ip=$(ping6 ${domain} -c 1 | sed '1{s/[^(]*(//;s/).*//;q}')
# ipset add unblockneteasemusic6 $ip
# done

View File

@ -13,6 +13,8 @@ music_customize_source="$(uci get unblockneteasemusic.@unblockneteasemusic[0].mu
hijack_ways="$(uci get unblockneteasemusic.@unblockneteasemusic[0].hijack_ways)"
endpoint="$(uci get unblockneteasemusic.@unblockneteasemusic[0].endpoint_enable)"
force_best_quality="$(uci get unblockneteasemusic.@unblockneteasemusic[0].force_best_quality)"
search_limit="$(uci get unblockneteasemusic.@unblockneteasemusic[0].search_limit)"
auto_update="$(uci get unblockneteasemusic.@unblockneteasemusic[0].auto_update)"
extFile="/usr/share/UnblockNeteaseMusic/extFile.txt"
serverCrt="/usr/share/UnblockNeteaseMusic/server.crt"
serverKey="/usr/share/UnblockNeteaseMusic/server.key"
@ -50,22 +52,31 @@ set_ipset() {
iptables -t nat -A cloud_unblockneteasemusic -p tcp --dport 80 -j REDIRECT --to-ports "${http_port}"
iptables -t nat -A cloud_unblockneteasemusic -p tcp --dport 443 -j REDIRECT --to-ports "${https_port}"
iptables -t nat -I PREROUTING -p tcp -m set --match-set unblockneteasemusic dst -j cloud_unblockneteasemusic
# ipv6
if ! ipset list unblockneteasemusic6 >"/dev/null"; then ipset create unblockneteasemusic6 hash:ip family inet6; fi
domains="music.163.com"
for domain in $domains; do
ip=$(ping6 ${domain} -c 1 | sed '1{s/[^(]*(//;s/).*//;q}')
ipset add unblockneteasemusic6 $ip
done
ipset add unblockneteasemusic unblockneteasemusic6
ip6tables -t nat -N cloud_unblockneteasemusic
ip6tables -t nat -A cloud_unblockneteasemusic -d ::/8 -j RETURN
ip6tables -t nat -A cloud_unblockneteasemusic -d FE80::/10 -j RETURN
ip6tables -t nat -A cloud_unblockneteasemusic -d FC00::/7 -j RETURN
ip6tables -t nat -A cloud_unblockneteasemusic -d FEC0::/10 -j RETURN
ip6tables -t nat -A cloud_unblockneteasemusic -p tcp --dport 80 -j REDIRECT --to-ports "${http_port}"
ip6tables -t nat -A cloud_unblockneteasemusic -p tcp --dport 443 -j REDIRECT --to-ports "${https_port}"
ip6tables -t nat -I PREROUTING -p tcp -m set --match-set unblockneteasemusic dst -j cloud_unblockneteasemusic
ip6tables -h
if [ $? -eq 0 ]; then
# ipv6
if ! ipset list unblockneteasemusic6 >"/dev/null"; then ipset create unblockneteasemusic6 hash:ip family inet6; fi
domains="music.163.com"
for domain in $domains; do
ip=$(ping6 ${domain} -c 1 | sed '1{s/[^(]*(//;s/).*//;q}')
if [ -n "$ip" ]; then
ipset add unblockneteasemusic6 $ip
else
echo "ping6 bad address,please check IPv6 DNS forwards.if IPv6 DNS forwards is enabled, please restart" >>"${logFile}"
fi
done
ipset add unblockneteasemusic unblockneteasemusic6
ip6tables -t nat -N cloud_unblockneteasemusic
ip6tables -t nat -A cloud_unblockneteasemusic -d ::/8 -j RETURN
ip6tables -t nat -A cloud_unblockneteasemusic -d FE80::/10 -j RETURN
ip6tables -t nat -A cloud_unblockneteasemusic -d FC00::/7 -j RETURN
ip6tables -t nat -A cloud_unblockneteasemusic -d FEC0::/10 -j RETURN
ip6tables -t nat -A cloud_unblockneteasemusic -p tcp --dport 80 -j REDIRECT --to-ports "${http_port}"
ip6tables -t nat -A cloud_unblockneteasemusic -p tcp --dport 443 -j REDIRECT --to-ports "${https_port}"
ip6tables -t nat -I PREROUTING -p tcp -m set --match-set unblockneteasemusic dst -j cloud_unblockneteasemusic
else
echo "ip6tables is not supported" >>"${logFile}"
fi
mkdir -p /var/etc
cat <<-EOF >>"/var/etc/unblockneteasemusic.include"
/etc/init.d/unblockneteasemusic restart
@ -74,12 +85,15 @@ set_ipset() {
iptables -t nat -D PREROUTING -p tcp -m set --match-set unblockneteasemusic dst -j cloud_unblockneteasemusic
iptables -t nat -F cloud_unblockneteasemusic
iptables -t nat -X cloud_unblockneteasemusic
ip6tables -t nat -D PREROUTING -p tcp -m set --match-set unblockneteasemusic dst -j cloud_unblockneteasemusic
ip6tables -t nat -F cloud_unblockneteasemusic
ip6tables -t nat -X cloud_unblockneteasemusic
ipset destroy unblockneteasemusic
ipset destroy unblockneteasemusic4
ipset destroy unblockneteasemusic6
ip6tables -h
if [ $? -eq 0 ]; then
ip6tables -t nat -D PREROUTING -p tcp -m set --match-set unblockneteasemusic dst -j cloud_unblockneteasemusic
ip6tables -t nat -F cloud_unblockneteasemusic
ip6tables -t nat -X cloud_unblockneteasemusic
ipset destroy unblockneteasemusic6
fi
echo "" >"/var/etc/unblockneteasemusic.include"
rm -f "/tmp/dnsmasq.d/dnsmasq-unblockneteasemusic.conf"
/etc/init.d/dnsmasq reload >"/dev/null" 2>&1
@ -108,15 +122,10 @@ set_hosts() {
}
createCertificate() {
echo "create certificate..." >>"${logFile}"
# 生成 CA 私钥
openssl genrsa -out "${caKey}" 2048
# 生成 CA 证书
openssl req -x509 -new -nodes -key "${caKey}" -sha256 -days 825 -out "${caCrt}" -subj "/C=CN/CN=UnblockNeteaseMusic Root CA/O=UnblockNeteaseMusic"
# 生成服务器私钥
openssl genrsa -out "${serverKey}" 2048
# 生成证书签发请求
openssl req -new -sha256 -key "${serverKey}" -out "${serverCsr}" -subj "/C=CN/L=Hangzhou/O=NetEase (Hangzhou) Network Co., Ltd/OU=IT Dept./CN=*.music.163.com"
# 使用 CA 签发服务器证书
touch "${extFile}"
echo "authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
@ -124,6 +133,7 @@ keyUsage=digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage=serverAuth,OCSPSigning
subjectAltName=DNS:music.163.com,DNS:*.music.163.com" >"${extFile}"
openssl x509 -req -extfile "${extFile}" -days 825 -in "${serverCsr}" -CA "${caCrt}" -CAkey "${caKey}" -CAcreateserial -out "${serverCrt}"
rm -f "${extFile}"
}
start() {
stop >>"${logFile}" 2>&1
@ -151,10 +161,11 @@ start() {
set_hosts >"/dev/null" 2>&1
fi
else
echo "$(date -R) 网络连接异常" >>"${logFile}"
echo "$(date -R) network connection error" >>"${logFile}"
fi
sed -i '/UnblockNeteaseMusic/d' /etc/crontabs/root
echo "*/1 * * * * /usr/share/UnblockNeteaseMusic/log_check.sh" >>"/etc/crontabs/root"
echo "0 5 * * * /usr/share/UnblockNeteaseMusic/version_check.sh" >>"/etc/crontabs/root"
/etc/init.d/cron restart >"/dev/null" 2>&1
}

View File

@ -1,12 +1,12 @@
#!/bin/bash
log_max_size="128" #使用KB计算
log_max_size="128" #KB
log_file="/tmp/unblockneteasemusic.log"
((log_size = "$(ls -l "${log_file}" | awk -F ' ' '{print $5}')" / "1024"))
(("${log_size}" >= "${log_max_size}")) && echo "" >"${log_file}"
if [ "$(uci get unblockneteasemusic.@unblockneteasemusic[0].daemon_enable)" == "1" ]; then
if [ -z "$(ps | grep "UnblockNeteaseMusic" | grep -v "grep")" ]; then
echo "$(date -R) 尝试重启应用..." >>"${log_file}"
echo "$(date -R) try restart..." >>"${log_file}"
/etc/init.d/unblockneteasemusic restart
fi
fi

View File

@ -0,0 +1,62 @@
#!/bin/bash
log_file="/tmp/unblockneteasemusic.log"
json_file="/tmp/unblockneteasemusic_latest.json"
if [ "$(uci get unblockneteasemusic.@unblockneteasemusic[0].auto_update)" == "1" ]; then
echo "$(date -R) check latest version ..." >>"${log_file}"
curl -s -o "${json_file}" https://api.github.com/repos/cnsilvan/UnblockNeteaseMusic/releases/latest
if [ $? -ne 0 ]; then
echo "$(date -R) curl api.github.com failed" >>"${log_file}"
exit 1
fi
currentTagCMD="$(UnblockNeteaseMusic -v | grep Version | awk '{print $2}')"
currentRuntimeCMD="$(UnblockNeteaseMusic -v | grep runtime | awk -F\( '{print $2}' | awk '{print $3,$4}' | sed -E 's/\)//g'| sed 's/[ \t]*$//g')"
latestTagCMD="$(cat ${json_file} | grep '\"tag_name\":' | sed -E 's/.*\"([^\"]+)\".*/\1/')"
GOOSS="$(echo $currentRuntimeCMD | awk '{print $1}')"
GOOS="linux"
GOARCH="amd64"
suffix="$(echo $currentRuntimeCMD | awk '{print $2}')"
if [ ! -n "$suffix" ]; then
suffix=".zip"
fi
if [ "$suffix" == "hardfloat" ]; then
suffix=".zip"
fi
if [ -n "$(echo $GOOSS | awk -F/ '{print $1}')" ]; then
GOOS="$(echo $GOOSS | awk -F/ '{print $1}')"
fi
if [ -n "$(echo $GOOSS | awk -F/ '{print $2}')" ]; then
GOARCH="$(echo $GOOSS | awk -F/ '{print $2}')"
fi
downloadUrl="$(cat ${json_file} | grep '\"browser_download_url\":' | grep ${GOOS} | grep ${GOARCH} | grep ${suffix} | sed -E 's/.*\"([^\"]+)\".*/\1/')"
if [ ! -n "${downloadUrl}" ]; then
echo "$(date -R) not found ${currentRuntimeCMD} on GitHub,please go to https://github.com/cnsilvan/luci-app-unblockneteasemusic/issues to open a issue " >>"${log_file}"
exit 1
fi
if [ "${currentTagCMD}" == "${latestTagCMD}" ]; then
echo "$(date -R) current version: ${currentTagCMD}(${currentRuntimeCMD}) is the latest version" >>"${log_file}"
else
echo "$(date -R) start downloading the latest version[ ${currentTagCMD}(${currentRuntimeCMD}) >> ${latestTagCMD}(${currentRuntimeCMD}) ]..." >>"${log_file}"
echo "$(date -R) ${downloadUrl}" >>"${log_file}"
curl -LJO ${downloadUrl}
if [ $? -eq 0 ]; then
echo "$(date -R) download successful" >>"${log_file}"
unzip $(find . -type f -name "*UnblockNeteaseMusic*.zip") -d ./UnblockNeteaseMusic/
rm -f $(find . -type f -name "*UnblockNeteaseMusic*.zip")
chmod +x ./UnblockNeteaseMusic/UnblockNeteaseMusic
if [ -n "$(./UnblockNeteaseMusic/UnblockNeteaseMusic -v | grep Version | awk '{print $2}')" ]; then
mv ./UnblockNeteaseMusic/UnblockNeteaseMusic /usr/bin/
rm -rf ./UnblockNeteaseMusic/
echo "$(date -R) update successful" >>"${log_file}"
/etc/init.d/unblockneteasemusic restart
else
rm -rf ./UnblockNeteaseMusic/
echo "$(date -R) update failed. please check if the downloaded version is correct" >>"${log_file}"
fi
else
echo "$(date -R) download failed" >>"${log_file}"
fi
fi
fi