From 7a0f8ee18c11e4e856b377d8ce1b31b9d2423a9e Mon Sep 17 00:00:00 2001 From: LEAN-ESX Date: Tue, 11 Jun 2019 06:39:54 -0700 Subject: [PATCH] add luci app unblockmusic for neteast --- package/lean/luci-app-unblockmusic/Makefile | 25 + .../luasrc/controller/unblockmusic.lua | 22 + .../luasrc/model/cbi/unblockmusic.lua | 29 + .../luasrc/model/cbi/unblockmusiclog.lua | 14 + .../view/unblockmusic/unblockmusic_status.htm | 22 + .../root/etc/config/unblockmusic | 6 + .../root/etc/init.d/unblockmusic | 24 + .../root/etc/ppp/ip-up.d/unblockmusic.sh | 3 + .../root/etc/uci-defaults/unblockmusic | 11 + .../root/usr/share/unblockmusic/.dockerignore | 15 + .../root/usr/share/unblockmusic/.gitignore | 72 ++ .../root/usr/share/unblockmusic/Dockerfile | 12 + .../root/usr/share/unblockmusic/LICENSE | 21 + .../root/usr/share/unblockmusic/README.md | 190 +++++ .../root/usr/share/unblockmusic/app.js | 84 ++ .../root/usr/share/unblockmusic/bridge.js | 33 + .../usr/share/unblockmusic/browser/README.md | 25 + .../unblockmusic/browser/background.html | 4 + .../share/unblockmusic/browser/background.js | 22 + .../usr/share/unblockmusic/browser/convert.js | 43 + .../unblockmusic/browser/crypto-js/core.js | 760 ++++++++++++++++++ .../browser/crypto-js/enc-base64.js | 135 ++++ .../unblockmusic/browser/crypto-js/md5.js | 268 ++++++ .../usr/share/unblockmusic/browser/crypto.js | 15 + .../usr/share/unblockmusic/browser/inject.js | 73 ++ .../share/unblockmusic/browser/manifest.json | 19 + .../usr/share/unblockmusic/browser/request.js | 18 + .../usr/share/unblockmusic/browser/script.js | 5 + .../root/usr/share/unblockmusic/ca.crt | 21 + .../root/usr/share/unblockmusic/cache.js | 10 + .../root/usr/share/unblockmusic/cli.js | 156 ++++ .../root/usr/share/unblockmusic/crypto.js | 68 ++ .../usr/share/unblockmusic/docker-compose.yml | 9 + .../root/usr/share/unblockmusic/hook.js | 310 +++++++ .../usr/share/unblockmusic/package-lock.json | 5 + .../root/usr/share/unblockmusic/package.json | 25 + .../usr/share/unblockmusic/provider/baidu.js | 41 + .../usr/share/unblockmusic/provider/find.js | 22 + .../usr/share/unblockmusic/provider/insure.js | 19 + .../usr/share/unblockmusic/provider/joox.js | 56 ++ .../usr/share/unblockmusic/provider/kugou.js | 38 + .../usr/share/unblockmusic/provider/kuwo.js | 48 ++ .../usr/share/unblockmusic/provider/match.js | 52 ++ .../usr/share/unblockmusic/provider/migu.js | 24 + .../share/unblockmusic/provider/netease.js | 29 + .../usr/share/unblockmusic/provider/qq.js | 131 +++ .../usr/share/unblockmusic/provider/xiami.js | 107 +++ .../root/usr/share/unblockmusic/request.js | 95 +++ .../root/usr/share/unblockmusic/server.crt | 21 + .../root/usr/share/unblockmusic/server.js | 177 ++++ .../root/usr/share/unblockmusic/server.key | 27 + .../luci-app-unblockmusic/views/views1.jpg | Bin 0 -> 116213 bytes .../luci-app-unblockmusic/views/views2.jpg | Bin 0 -> 215856 bytes 53 files changed, 3461 insertions(+) create mode 100644 package/lean/luci-app-unblockmusic/Makefile create mode 100644 package/lean/luci-app-unblockmusic/luasrc/controller/unblockmusic.lua create mode 100644 package/lean/luci-app-unblockmusic/luasrc/model/cbi/unblockmusic.lua create mode 100644 package/lean/luci-app-unblockmusic/luasrc/model/cbi/unblockmusiclog.lua create mode 100644 package/lean/luci-app-unblockmusic/luasrc/view/unblockmusic/unblockmusic_status.htm create mode 100644 package/lean/luci-app-unblockmusic/root/etc/config/unblockmusic create mode 100755 package/lean/luci-app-unblockmusic/root/etc/init.d/unblockmusic create mode 100755 package/lean/luci-app-unblockmusic/root/etc/ppp/ip-up.d/unblockmusic.sh create mode 100755 package/lean/luci-app-unblockmusic/root/etc/uci-defaults/unblockmusic create mode 100644 package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/.dockerignore create mode 100644 package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/.gitignore create mode 100644 package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/Dockerfile create mode 100644 package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/LICENSE create mode 100644 package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/README.md create mode 100644 package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/app.js create mode 100644 package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/bridge.js create mode 100644 package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/browser/README.md create mode 100644 package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/browser/background.html create mode 100644 package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/browser/background.js create mode 100644 package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/browser/convert.js create mode 100644 package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/browser/crypto-js/core.js create mode 100644 package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/browser/crypto-js/enc-base64.js create mode 100644 package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/browser/crypto-js/md5.js create mode 100644 package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/browser/crypto.js create mode 100644 package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/browser/inject.js create mode 100644 package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/browser/manifest.json create mode 100644 package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/browser/request.js create mode 100644 package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/browser/script.js create mode 100644 package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/ca.crt create mode 100644 package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/cache.js create mode 100644 package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/cli.js create mode 100644 package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/crypto.js create mode 100644 package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/docker-compose.yml create mode 100644 package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/hook.js create mode 100644 package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/package-lock.json create mode 100644 package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/package.json create mode 100644 package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/provider/baidu.js create mode 100644 package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/provider/find.js create mode 100644 package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/provider/insure.js create mode 100644 package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/provider/joox.js create mode 100644 package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/provider/kugou.js create mode 100644 package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/provider/kuwo.js create mode 100644 package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/provider/match.js create mode 100644 package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/provider/migu.js create mode 100644 package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/provider/netease.js create mode 100644 package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/provider/qq.js create mode 100644 package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/provider/xiami.js create mode 100644 package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/request.js create mode 100644 package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/server.crt create mode 100644 package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/server.js create mode 100644 package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/server.key create mode 100644 package/lean/luci-app-unblockmusic/views/views1.jpg create mode 100644 package/lean/luci-app-unblockmusic/views/views2.jpg diff --git a/package/lean/luci-app-unblockmusic/Makefile b/package/lean/luci-app-unblockmusic/Makefile new file mode 100644 index 000000000..1e1b72ca0 --- /dev/null +++ b/package/lean/luci-app-unblockmusic/Makefile @@ -0,0 +1,25 @@ +# Copyright (C) 2016 Openwrt.org +# +# This is free software, licensed under the Apache License, Version 2.0 . +# +# licheng +# www.maxlicheng.com +# 2019-06-08 +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI support for Unblock NeteaseCloudMusic +LUCI_DEPENDS:=+node +LUCI_PKGARCH:=all +PKG_NAME:=luci-app-unblockmusic +PKG_VERSION:=1 +PKG_RELEASE:=36 + +PKG_MAINTAINER:= + +include $(TOPDIR)/feeds/luci/luci.mk + + +# call BuildPackage - OpenWrt buildroot signature + diff --git a/package/lean/luci-app-unblockmusic/luasrc/controller/unblockmusic.lua b/package/lean/luci-app-unblockmusic/luasrc/controller/unblockmusic.lua new file mode 100644 index 000000000..8cc7024d8 --- /dev/null +++ b/package/lean/luci-app-unblockmusic/luasrc/controller/unblockmusic.lua @@ -0,0 +1,22 @@ + +module("luci.controller.unblockmusic", package.seeall) + +function index() + if not nixio.fs.access("/etc/config/unblockmusic") then + return + end + + entry({"admin", "services", "unblockmusic"},firstchild(), _("解锁网易云灰色歌曲"), 50).dependent = false + + entry({"admin", "services", "unblockmusic", "general"},cbi("unblockmusic"), _("Base Setting"), 1) + entry({"admin", "services", "unblockmusic", "log"},form("unblockmusiclog"), _("Log"), 2) + + entry({"admin", "services", "unblockmusic", "status"},call("act_status")).leaf=true +end + +function act_status() + local e={} + e.running=luci.sys.call("ps | grep app.js | grep -v grep >/dev/null")==0 + luci.http.prepare_content("application/json") + luci.http.write_json(e) +end diff --git a/package/lean/luci-app-unblockmusic/luasrc/model/cbi/unblockmusic.lua b/package/lean/luci-app-unblockmusic/luasrc/model/cbi/unblockmusic.lua new file mode 100644 index 000000000..4ec1c4f28 --- /dev/null +++ b/package/lean/luci-app-unblockmusic/luasrc/model/cbi/unblockmusic.lua @@ -0,0 +1,29 @@ + +mp = Map("unblockmusic", translate("解锁网易云灰色歌曲")) +mp.description = translate("原理:采用 [网易云旧链/QQ/虾米/百度/酷狗/酷我/咕咪/JOOX]等音源 替换网易云变灰歌曲链接
具体使用方法可查看github:
https://github.com/maxlicheng/luci-app-unblockmusic") + +mp:section(SimpleSection).template = "unblockmusic/unblockmusic_status" + +s = mp:section(TypedSection, "unblockmusic") +s.anonymous=true +s.addremove=false + +enabled = s:option(Flag, "enabled", translate("启用解锁")) +enabled.default = 0 +enabled.rmempty = false + +speedtype = s:option(ListValue, "musicapptype", translate("音源选择")) +speedtype:value("default", translate("默认")) +speedtype:value("NeteaseCloud", translate("网易云音乐")) +speedtype:value("QQ", translate("QQ音乐")) +speedtype:value("xiami", translate("虾米音乐")) +speedtype:value("baidu", translate("百度音乐")) +speedtype:value("kugou", translate("酷狗音乐")) +speedtype:value("koowo", translate("酷我音乐")) +speedtype:value("migu", translate("咕咪音乐")) +speedtype:value("joox", translate("JOOX音乐")) + +account = s:option(Value, "port", translate("端口号")) +account.datatype = "string" + +return mp diff --git a/package/lean/luci-app-unblockmusic/luasrc/model/cbi/unblockmusiclog.lua b/package/lean/luci-app-unblockmusic/luasrc/model/cbi/unblockmusiclog.lua new file mode 100644 index 000000000..8d1d85193 --- /dev/null +++ b/package/lean/luci-app-unblockmusic/luasrc/model/cbi/unblockmusiclog.lua @@ -0,0 +1,14 @@ +local fs = require "nixio.fs" +local conffile = "/tmp/unblockmusic.log" + +f = SimpleForm("logview") + +t = f:field(TextValue, "conf") +t.rmempty = true +t.rows = 15 +function t.cfgvalue() + return fs.readfile(conffile) or "" +end +t.readonly="readonly" + +return f \ No newline at end of file diff --git a/package/lean/luci-app-unblockmusic/luasrc/view/unblockmusic/unblockmusic_status.htm b/package/lean/luci-app-unblockmusic/luasrc/view/unblockmusic/unblockmusic_status.htm new file mode 100644 index 000000000..01aca57c8 --- /dev/null +++ b/package/lean/luci-app-unblockmusic/luasrc/view/unblockmusic/unblockmusic_status.htm @@ -0,0 +1,22 @@ + + +
+

+ <%:Collecting data...%> +

+
\ No newline at end of file diff --git a/package/lean/luci-app-unblockmusic/root/etc/config/unblockmusic b/package/lean/luci-app-unblockmusic/root/etc/config/unblockmusic new file mode 100644 index 000000000..673195727 --- /dev/null +++ b/package/lean/luci-app-unblockmusic/root/etc/config/unblockmusic @@ -0,0 +1,6 @@ + +config unblockmusic + option usicapptype 'default' + option port '5200' + option enabled '0' + diff --git a/package/lean/luci-app-unblockmusic/root/etc/init.d/unblockmusic b/package/lean/luci-app-unblockmusic/root/etc/init.d/unblockmusic new file mode 100755 index 000000000..839b29585 --- /dev/null +++ b/package/lean/luci-app-unblockmusic/root/etc/init.d/unblockmusic @@ -0,0 +1,24 @@ +#!/bin/sh /etc/rc.common + +START=99 +STOP=10 + +TYPE=$(uci get unblockmusic.@unblockmusic[0].musicapptype) +PORT=$(uci get unblockmusic.@unblockmusic[0].port) + + +start() +{ + stop + enable=$(uci get unblockmusic.@unblockmusic[0].enabled) + [ $enable -eq 0 ] && exit 0 + node /usr/share/unblockmusic/app.js -p $PORT & +} + +stop() +{ + kill -9 $(ps | grep app.js | grep -v grep | awk '{print $1}') >/dev/null 2>&1 +} + + + diff --git a/package/lean/luci-app-unblockmusic/root/etc/ppp/ip-up.d/unblockmusic.sh b/package/lean/luci-app-unblockmusic/root/etc/ppp/ip-up.d/unblockmusic.sh new file mode 100755 index 000000000..5e82ede98 --- /dev/null +++ b/package/lean/luci-app-unblockmusic/root/etc/ppp/ip-up.d/unblockmusic.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +sleep 60 && /etc/init.d/unblockmusic restart diff --git a/package/lean/luci-app-unblockmusic/root/etc/uci-defaults/unblockmusic b/package/lean/luci-app-unblockmusic/root/etc/uci-defaults/unblockmusic new file mode 100755 index 000000000..da2753838 --- /dev/null +++ b/package/lean/luci-app-unblockmusic/root/etc/uci-defaults/unblockmusic @@ -0,0 +1,11 @@ +#!/bin/sh + +uci -q batch <<-EOF >/dev/null + delete ucitrack.@unblockmusic[-1] + add ucitrack unblockmusic + set ucitrack.@unblockmusic[-1].init=unblockmusic + commit ucitrack +EOF + +rm -f /tmp/luci-indexcache +exit 0 diff --git a/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/.dockerignore b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/.dockerignore new file mode 100644 index 000000000..0b75cc99b --- /dev/null +++ b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/.dockerignore @@ -0,0 +1,15 @@ +.git +.vscode +.npmignore +.gitignore +.dockerignore + +LICENSE +Procfile +README.md + +node_modules +npm-debug.log + +Dockerfile* +docker-compose* \ No newline at end of file diff --git a/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/.gitignore b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/.gitignore new file mode 100644 index 000000000..b8c8f6b01 --- /dev/null +++ b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/.gitignore @@ -0,0 +1,72 @@ +# IDE +.vscode +.idea + +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env + +# next.js build output +.next + +# pkg dist directory +dist/ + +# es6 transformation +browser/provider +browser/cache.js \ No newline at end of file diff --git a/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/Dockerfile b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/Dockerfile new file mode 100644 index 000000000..8dda10ab9 --- /dev/null +++ b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/Dockerfile @@ -0,0 +1,12 @@ +FROM node:lts-alpine + +ENV NODE_ENV production + +WORKDIR /usr/src/app +COPY package*.json ./ +RUN npm install --production +COPY . . + +EXPOSE 8080 + +ENTRYPOINT ["node", "app.js"] \ No newline at end of file diff --git a/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/LICENSE b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/LICENSE new file mode 100644 index 000000000..cba3c7afc --- /dev/null +++ b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2018 Nzix + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/README.md b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/README.md new file mode 100644 index 000000000..358ff6065 --- /dev/null +++ b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/README.md @@ -0,0 +1,190 @@ +logo + +# UnblockNeteaseMusic + +解锁网易云音乐客户端变灰歌曲 + +## 特性 + +- 使用网易云旧链 / QQ / 虾米 / 百度 / 酷狗 / 酷我 / 咕咪 / JOOX 音源替换变灰歌曲链接 (默认仅启用前四) +- 为请求增加 `X-Real-IP` 参数解锁海外限制,支持指定网易云服务器 IP,支持设置上游 HTTP / HTTPS 代理 +- 完整的流量代理功能 (HTTP / HTTPS),可直接作为系统代理 (同时支持 PAC) + +## 运行 + +从源码运行 + +``` +$ node app.js +``` + +或使用 Docker + +``` +$ docker run nondanee/unblockneteasemusic +``` + +``` +$ docker-compose up +``` + +### 配置参数 + +``` +$ node app.js -h +usage: unblockneteasemusic [-v] [-p port] [-u url] [-f host] + [-o source [source ...]] [-t token] [-e url] [-s] + [-h] + +optional arguments: + -v, --version output the version number + -p port, --port port specify server port + -u url, --proxy-url url request through upstream proxy + -f host, --force-host host force the netease server ip + -o source [source ...], --match-order source [source ...] + set priority of sources + -t token, --token token set up http basic authentication + -e url, --endpoint url replace virtual endpoint with public host + -s, --strict enable proxy limitation + -h, --help output usage information +``` + +## 使用 + +**警告:本项目不提供线上 demo,请不要轻易信任使用他人提供的公开代理服务,以免发生安全问题** + +**若将服务部署到公网,强烈建议使用严格模式 (此模式下仅放行网易云音乐所属域名的请求) `-s` 限制代理范围 (需使用 PAC 或 hosts),~~或启用 Proxy Authentication `-t :` 设置代理用户名密码~~ (目前密码认证在 Windows 客户端设置和 macOS 系统设置都无法生效,请不要使用),以防代理被他人滥用** + +支持 Windows 客户端,UWP 客户端,Linux 客户端 (1.2 版本以上需要自签证书 MITM,启动客户端需要增加 `--ignore-certificate-errors` 参数),macOS 客户端 (726 版本以上需要自签证书),iOS 客户端 (配置 https endpoint 或使用自签证书),Android 客户端和网页版 (需要自签证书,需要脚本配合) + +目前除 UWP 外其它客户端均优先请求 HTTPS 接口,默认配置下本代理对网易云所有 HTTPS API 连接返回空数据,促使客户端降级使用 HTTP 接口 (新版 Linux 客户端和 macOS 客户端已无法降级) + +因 UWP 应用存在网络隔离,限制流量发送到本机,若使用的代理在 localhost,或修改的 hosts 指向 localhost,需为 "网易云音乐 UWP" 手动开启 loopback 才能使用,请以**管理员身份**执行命令 + +```powershell +checknetisolation loopbackexempt -a -n="1F8B0F94.122165AE053F_j2p0p5q0044a6" +``` + +### 方法 1. 修改 hosts + +向 hosts 文件添加两条规则 + +``` + music.163.com + interface.music.163.com +``` + +> 使用此方法必须监听 80 端口 `-p 80` +> +> **若在本机运行程序**,请指定网易云服务器 IP `-f xxx.xxx.xxx.xxx` (可在修改 hosts 前通过 `ping music.163.com` 获得) **或** 使用代理 `-u http(s)://xxx.xxx.xxx.xxx:xxx`,以防请求死循环 +> +> **Android 客户端下修改 hosts 无法直接使用**,原因和解决方法详见[云音乐安卓又搞事啦](https://jixun.moe/post/netease-android-hosts-bypass/),[安卓免 root 绕过网易云音乐 IP 限制](https://jixun.moe/post/android-block-netease-without-root/) + +### 方法 2. 设置代理 + +PAC 自动代理脚本地址 `http:///proxy.pac` + +全局代理地址填写服务器地址和端口号即可 + +| 平台 | 基础设置 | +| :------ | :------------------------------- | +| Windows | 设置 > 工具 > 自定义代理 (客户端内) | +| UWP | Windows 设置 > 网络和 Internet > 代理 | +| Linux | 系统设置 > 网络 > 网络代理 | +| macOS | 系统偏好设置 > 网络 > 高级 > 代理 | +| Android | WLAN > 修改网络 > 高级选项 > 代理 | +| iOS | 无线局域网 > HTTP 代理 > 配置代理 | + +> 代理工具和方法有很多请自行探索,欢迎在 issues 讨论 + +### ✳方法 3. 调用接口 + +作为依赖库使用 + +``` +$ npm install nondanee/UnblockNeteaseMusic +``` + +```javascript +const match = require('unblockneteasemusic') + +/** + * Set proxy or hosts if needed + */ +global.proxy = require('url').parse('http://127.0.0.1:1080') +global.hosts = {'i.y.qq.com': '59.37.96.220'} + +/** + * Find matching song from other platforms + * @param {Number} id netease song id + * @param {Array||undefined} source support netease, qq, xiami, baidu, kugou, kuwo, migu, joox + * @return {Promise} + */ +match(418602084, ['netease', 'qq', 'xiami', 'baidu']).then(song => console.log(song)) +``` + +## 效果 + +#### Windows 客户端 + + + +#### UWP 客户端 + + + +#### Linux 客户端 + + + +#### macOS 客户端 + + + +#### Android 客户端 + + + +#### iOS 客户端 + + + +## 致谢 + +感谢大佬们为逆向 eapi 所做的努力 + +使用的其它平台音源 API 出自 + +[trazyn/ieaseMusic](https://github.com/trazyn/ieaseMusic) + +[listen1/listen1_chrome_extension](https://github.com/listen1/listen1_chrome_extension) + +向所有同类项目致敬 + +[EraserKing/CloudMusicGear](https://github.com/EraserKing/CloudMusicGear) + +[EraserKing/Unblock163MusicClient](https://github.com/EraserKing/Unblock163MusicClient) + +[ITJesse/UnblockNeteaseMusic](https://github.com/ITJesse/UnblockNeteaseMusic/) + +[bin456789/Unblock163MusicClient-Xposed](https://github.com/bin456789/Unblock163MusicClient-Xposed) + +[YiuChoi/Unlock163Music](https://github.com/YiuChoi/Unlock163Music) + +[yi-ji/NeteaseMusicAbroad](https://github.com/yi-ji/NeteaseMusicAbroad) + +[stomakun/NeteaseReverseLadder](https://github.com/stomakun/NeteaseReverseLadder/) + +[fengjueming/unblock-NetEaseMusic](https://github.com/fengjueming/unblock-NetEaseMusic) + +[acgotaku/NetEaseMusicWorld](https://github.com/acgotaku/NetEaseMusicWorld) + +[mengskysama/163-Cloud-Music-Unlock](https://github.com/mengskysama/163-Cloud-Music-Unlock) + +[azureplus/163-music-unlock](https://github.com/azureplus/163-music-unlock) + +[typcn/163music-mac-client-unlock](https://github.com/typcn/163music-mac-client-unlock) + +## 许可 + +The MIT License \ No newline at end of file diff --git a/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/app.js b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/app.js new file mode 100644 index 000000000..61e00e265 --- /dev/null +++ b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/app.js @@ -0,0 +1,84 @@ +#!/usr/bin/env node + +const package = require('./package.json') +const config = require('./cli.js') +.program({name: package.name, version: package.version}) +.option(['-v', '--version'], {action: 'version'}) +.option(['-p', '--port'], {metavar: 'port', help: 'specify server port'}) +.option(['-u', '--proxy-url'], {metavar: 'url', help: 'request through upstream proxy'}) +.option(['-f', '--force-host'], {metavar: 'host', help: 'force the netease server ip'}) +.option(['-o', '--match-order'], {metavar: 'source', nargs: '+', help: 'set priority of sources'}) +.option(['-t', '--token'], {metavar: 'token', help: 'set up http basic authentication'}) +.option(['-e', '--endpoint'], {metavar: 'url', help: 'replace virtual endpoint with public host'}) +.option(['-s', '--strict'], {action: 'store_true', help: 'enable proxy limitation'}) +.option(['-h', '--help'], {action: 'help'}) +.parse(process.argv) + +config.port = (config.port || '8080').split(':').map(string => parseInt(string)) +const invalid = value => (isNaN(value) || value < 1 || value > 65535) +if(config.port.some(invalid)){ + console.log('Port must be a number higher than 0 and lower than 65535.') + process.exit(1) +} +if(config.proxyUrl && !/http(s?):\/\/.+:\d+/.test(config.proxyUrl)){ + console.log('Please check the proxy url.') + process.exit(1) +} +if(config.endpoint && !/http(s?):\/\/.+/.test(config.endpoint)){ + console.log('Please check the endpoint host.') + process.exit(1) +} +if(config.forceHost && !/\d+\.\d+\.\d+\.\d+/.test(config.forceHost)){ + console.log('Please check the server host.') + process.exit(1) +} +if(config.matchOrder){ + const provider = ['netease', 'qq', 'xiami', 'baidu', 'kugou', 'kuwo', 'migu', 'joox'] + const candidate = config.matchOrder + if(candidate.some((key, index) => index != candidate.indexOf(key))){ + console.log('Please check the duplication in match order.') + process.exit(1) + } + else if(candidate.some(key => !provider.includes(key))){ + console.log('Please check the availability of match sources.') + process.exit(1) + } + global.source = candidate +} +if(config.token && !/\S+:\S+/.test(config.token)){ + console.log('Please check the authentication token.') + process.exit(1) +} + +const parse = require('url').parse +const hook = require('./hook') +const server = require('./server') +const escape = string => string.replace(/\./g, '\\.') + +global.port = config.port +global.proxy = config.proxyUrl ? parse(config.proxyUrl) : null +global.hosts = {}, hook.target.host.forEach(host => global.hosts[host] = config.forceHost) +server.whitelist = ['music.126.net', 'vod.126.net'].map(escape) +if(config.strict) server.blacklist.push('.*') +server.authentication = config.token || null +global.endpoint = config.endpoint +if(config.endpoint) server.whitelist.push(escape(config.endpoint)) + +const dns = host => new Promise((resolve, reject) => require('dns').lookup(host, {all: true}, (error, records) => error? reject(error) : resolve(records.map(record => record.address)))) +const httpdns = host => require('./request')('POST', 'http://music.httpdns.c.163.com/d', {}, host).then(response => response.json()).then(jsonBody => jsonBody.dns[0].ips) + +Promise.all([httpdns(hook.target.host[0])].concat(hook.target.host.map(host => dns(host)))) +.then(result => { + let extra = Array.from(new Set(result.reduce((merged, array) => merged.concat(array), []))) + hook.target.host = hook.target.host.concat(extra) + server.whitelist = server.whitelist.concat(hook.target.host.map(escape)) + if(port[0]){ + server.http.listen(port[0]) + console.log(`HTTP Server running @ http://0.0.0.0:${port[0]}`) + } + if(port[1]){ + server.https.listen(port[1]) + console.log(`HTTPS Server running @ https://0.0.0.0:${port[1]}`) + } +}) +.catch(error => console.log(error)) \ No newline at end of file diff --git a/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/bridge.js b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/bridge.js new file mode 100644 index 000000000..f680658d3 --- /dev/null +++ b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/bridge.js @@ -0,0 +1,33 @@ +#!/usr/bin/env node +const cache = require('./cache') +const parse = require('url').parse + +const router = { + qq: require('./provider/qq'), + xiami: require('./provider/xiami'), + baidu: require('./provider/baidu'), + kugou: require('./provider/kugou'), + kuwo: require('./provider/kuwo'), + migu: require('./provider/migu'), + joox: require('./provider/joox') +} + +const distributor = (url, router) => Promise.resolve().then(() => { + const route = url.pathname.slice(1).split('/').map(path => decodeURIComponent(path)) + let pointer = router, argument = decodeURIComponent(url.query) + try{argument = JSON.parse(argument)}catch(e){} + const miss = route.some(path => { + if(path in pointer) pointer = pointer[path] + else return true + }) + if(miss || typeof pointer != 'function') return Promise.reject() + //return pointer.call(null, argument) + return cache(pointer, argument, 15 * 60 * 1000) +}) + +require('http').createServer().on('request', (req, res) => + distributor(parse(req.url), router) + .then(data => res.write(data)) + .catch(() => res.writeHead(404)) + .then(() => res.end()) +).listen(parseInt(process.argv[2]) || 9000) \ No newline at end of file diff --git a/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/browser/README.md b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/browser/README.md new file mode 100644 index 000000000..7f8fb170c --- /dev/null +++ b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/browser/README.md @@ -0,0 +1,25 @@ +# Web Extension Port + +For test + +## Implementation + +- Convert node module to ES6 module which can be directly executed in Chrome 61+ without Babel +- Rewrite crypto module (using CryptoJS) and request (using XMLHttpRequest) module for browser environment +- Do matching in background and transfer result with chrome runtime communication +- Inject content script for hijacking Netease Music Web Ajax response + +## Build + +``` +$ node convert.js +``` + +## Install + +Load unpacked extension in Developer mode + +## Reference + +- [brix/crypto-js](https://github.com/brix/crypto-js) +- [JixunMoe/cuwcl4c](https://github.com/JixunMoe/cuwcl4c) \ No newline at end of file diff --git a/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/browser/background.html b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/browser/background.html new file mode 100644 index 000000000..d1b0245c7 --- /dev/null +++ b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/browser/background.html @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/browser/background.js b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/browser/background.js new file mode 100644 index 000000000..000740c5b --- /dev/null +++ b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/browser/background.js @@ -0,0 +1,22 @@ +import match from './provider/match.js' + +chrome.runtime.onMessageExternal.addListener((request, sender, sendResponse) => { + match(request.match, ['netease', 'qq', 'xiami']) + .then(song => sendResponse(song)) + .catch(e => console.log(e)) + return true +}) + +chrome.webRequest.onBeforeSendHeaders.addListener(details => { + let headers = details.requestHeaders + headers.push({name: 'X-Real-IP', value: '118.88.88.88'}) + return {requestHeaders: headers} +}, {urls: ['*://music.163.com/*']}, ['blocking', 'requestHeaders']) + +chrome.webRequest.onHeadersReceived.addListener(details => { + let headers = details.responseHeaders + if(details.initiator == "https://music.163.com" && details.type == 'media'){ + headers.push({name: 'Access-Control-Allow-Origin', value: '*'}) + } + return {responseHeaders: headers} +}, {urls: ['*://*/*']}, ['blocking', 'responseHeaders']) \ No newline at end of file diff --git a/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/browser/convert.js b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/browser/convert.js new file mode 100644 index 000000000..28919353e --- /dev/null +++ b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/browser/convert.js @@ -0,0 +1,43 @@ +const fs = require('fs') +const path = require('path') + +const importReplacer = (match, state, alias, file) => { + file = file.endsWith('.js') ? file : file + '.js' + return `import ${alias} from '${file}'` +} + +const converter = (input, output, processor) => { + let data = fs.readFileSync(input).toString() + if(processor){ + data = processor(data) + } + else{ + data = data.replace(/global\./g, 'window.') + data = data.replace(/(const|let|var)\s+(\w+)\s*=\s*require\(\s*['|"](.+)['|"]\s*\)/g, importReplacer) + data = data.replace(/module\.exports\s*=\s*/g, 'export default ') + } + fs.writeFileSync(output, data) +} + +converter(path.resolve(__dirname, '..', 'cache.js'), path.resolve(__dirname, '.', 'cache.js')) + +if(!fs.existsSync(path.resolve(__dirname, 'provider'))) fs.mkdirSync(path.resolve(__dirname, 'provider')) + +fs.readdirSync(path.resolve(__dirname, '..', 'provider')).filter(file => !file.includes('test')).forEach(file => { + converter(path.resolve(__dirname, '..', 'provider', file), path.resolve(__dirname, 'provider', file)) +}) + +const providerReplacer = (match, state, data) => { + let provider = [] + let imports = data.match(/\w+\s*:\s*require\(['|"].+['|"]\)/g).map(line => { + line = line.match(/(\w+)\s*:\s*require\(['|"](.+)['|"]\)/) + provider.push(line[1]) + return importReplacer(null, null, line[1], line[2]) + }) + return imports.join('\n') + '\n\n' + `${state} provider = {${provider.join(', ')}}` +} + +converter(path.resolve(__dirname, 'provider', 'match.js'), path.resolve(__dirname, 'provider', 'match.js'), data => { + data = data.replace(/(const|let|var)\s+provider\s*=\s*{([^}]+)}/g, providerReplacer) + return data +}) \ No newline at end of file diff --git a/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/browser/crypto-js/core.js b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/browser/crypto-js/core.js new file mode 100644 index 000000000..28e34c13c --- /dev/null +++ b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/browser/crypto-js/core.js @@ -0,0 +1,760 @@ +;(function (root, factory) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(); + } + else if (typeof define === "function" && define.amd) { + // AMD + define([], factory); + } + else { + // Global (browser) + root.CryptoJS = factory(); + } +}(this, function () { + + /** + * CryptoJS core components. + */ + var CryptoJS = CryptoJS || (function (Math, undefined) { + /* + * Local polyfil of Object.create + */ + var create = Object.create || (function () { + function F() {}; + + return function (obj) { + var subtype; + + F.prototype = obj; + + subtype = new F(); + + F.prototype = null; + + return subtype; + }; + }()) + + /** + * CryptoJS namespace. + */ + var C = {}; + + /** + * Library namespace. + */ + var C_lib = C.lib = {}; + + /** + * Base object for prototypal inheritance. + */ + var Base = C_lib.Base = (function () { + + + return { + /** + * Creates a new object that inherits from this object. + * + * @param {Object} overrides Properties to copy into the new object. + * + * @return {Object} The new object. + * + * @static + * + * @example + * + * var MyType = CryptoJS.lib.Base.extend({ + * field: 'value', + * + * method: function () { + * } + * }); + */ + extend: function (overrides) { + // Spawn + var subtype = create(this); + + // Augment + if (overrides) { + subtype.mixIn(overrides); + } + + // Create default initializer + if (!subtype.hasOwnProperty('init') || this.init === subtype.init) { + subtype.init = function () { + subtype.$super.init.apply(this, arguments); + }; + } + + // Initializer's prototype is the subtype object + subtype.init.prototype = subtype; + + // Reference supertype + subtype.$super = this; + + return subtype; + }, + + /** + * Extends this object and runs the init method. + * Arguments to create() will be passed to init(). + * + * @return {Object} The new object. + * + * @static + * + * @example + * + * var instance = MyType.create(); + */ + create: function () { + var instance = this.extend(); + instance.init.apply(instance, arguments); + + return instance; + }, + + /** + * Initializes a newly created object. + * Override this method to add some logic when your objects are created. + * + * @example + * + * var MyType = CryptoJS.lib.Base.extend({ + * init: function () { + * // ... + * } + * }); + */ + init: function () { + }, + + /** + * Copies properties into this object. + * + * @param {Object} properties The properties to mix in. + * + * @example + * + * MyType.mixIn({ + * field: 'value' + * }); + */ + mixIn: function (properties) { + for (var propertyName in properties) { + if (properties.hasOwnProperty(propertyName)) { + this[propertyName] = properties[propertyName]; + } + } + + // IE won't copy toString using the loop above + if (properties.hasOwnProperty('toString')) { + this.toString = properties.toString; + } + }, + + /** + * Creates a copy of this object. + * + * @return {Object} The clone. + * + * @example + * + * var clone = instance.clone(); + */ + clone: function () { + return this.init.prototype.extend(this); + } + }; + }()); + + /** + * An array of 32-bit words. + * + * @property {Array} words The array of 32-bit words. + * @property {number} sigBytes The number of significant bytes in this word array. + */ + var WordArray = C_lib.WordArray = Base.extend({ + /** + * Initializes a newly created word array. + * + * @param {Array} words (Optional) An array of 32-bit words. + * @param {number} sigBytes (Optional) The number of significant bytes in the words. + * + * @example + * + * var wordArray = CryptoJS.lib.WordArray.create(); + * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]); + * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6); + */ + init: function (words, sigBytes) { + words = this.words = words || []; + + if (sigBytes != undefined) { + this.sigBytes = sigBytes; + } else { + this.sigBytes = words.length * 4; + } + }, + + /** + * Converts this word array to a string. + * + * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex + * + * @return {string} The stringified word array. + * + * @example + * + * var string = wordArray + ''; + * var string = wordArray.toString(); + * var string = wordArray.toString(CryptoJS.enc.Utf8); + */ + toString: function (encoder) { + return (encoder || Hex).stringify(this); + }, + + /** + * Concatenates a word array to this word array. + * + * @param {WordArray} wordArray The word array to append. + * + * @return {WordArray} This word array. + * + * @example + * + * wordArray1.concat(wordArray2); + */ + concat: function (wordArray) { + // Shortcuts + var thisWords = this.words; + var thatWords = wordArray.words; + var thisSigBytes = this.sigBytes; + var thatSigBytes = wordArray.sigBytes; + + // Clamp excess bits + this.clamp(); + + // Concat + if (thisSigBytes % 4) { + // Copy one byte at a time + for (var i = 0; i < thatSigBytes; i++) { + var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8); + } + } else { + // Copy one word at a time + for (var i = 0; i < thatSigBytes; i += 4) { + thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2]; + } + } + this.sigBytes += thatSigBytes; + + // Chainable + return this; + }, + + /** + * Removes insignificant bits. + * + * @example + * + * wordArray.clamp(); + */ + clamp: function () { + // Shortcuts + var words = this.words; + var sigBytes = this.sigBytes; + + // Clamp + words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8); + words.length = Math.ceil(sigBytes / 4); + }, + + /** + * Creates a copy of this word array. + * + * @return {WordArray} The clone. + * + * @example + * + * var clone = wordArray.clone(); + */ + clone: function () { + var clone = Base.clone.call(this); + clone.words = this.words.slice(0); + + return clone; + }, + + /** + * Creates a word array filled with random bytes. + * + * @param {number} nBytes The number of random bytes to generate. + * + * @return {WordArray} The random word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.lib.WordArray.random(16); + */ + random: function (nBytes) { + var words = []; + + var r = (function (m_w) { + var m_w = m_w; + var m_z = 0x3ade68b1; + var mask = 0xffffffff; + + return function () { + m_z = (0x9069 * (m_z & 0xFFFF) + (m_z >> 0x10)) & mask; + m_w = (0x4650 * (m_w & 0xFFFF) + (m_w >> 0x10)) & mask; + var result = ((m_z << 0x10) + m_w) & mask; + result /= 0x100000000; + result += 0.5; + return result * (Math.random() > .5 ? 1 : -1); + } + }); + + for (var i = 0, rcache; i < nBytes; i += 4) { + var _r = r((rcache || Math.random()) * 0x100000000); + + rcache = _r() * 0x3ade67b7; + words.push((_r() * 0x100000000) | 0); + } + + return new WordArray.init(words, nBytes); + } + }); + + /** + * Encoder namespace. + */ + var C_enc = C.enc = {}; + + /** + * Hex encoding strategy. + */ + var Hex = C_enc.Hex = { + /** + * Converts a word array to a hex string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The hex string. + * + * @static + * + * @example + * + * var hexString = CryptoJS.enc.Hex.stringify(wordArray); + */ + stringify: function (wordArray) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; + + // Convert + var hexChars = []; + for (var i = 0; i < sigBytes; i++) { + var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + hexChars.push((bite >>> 4).toString(16)); + hexChars.push((bite & 0x0f).toString(16)); + } + + return hexChars.join(''); + }, + + /** + * Converts a hex string to a word array. + * + * @param {string} hexStr The hex string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Hex.parse(hexString); + */ + parse: function (hexStr) { + // Shortcut + var hexStrLength = hexStr.length; + + // Convert + var words = []; + for (var i = 0; i < hexStrLength; i += 2) { + words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4); + } + + return new WordArray.init(words, hexStrLength / 2); + } + }; + + /** + * Latin1 encoding strategy. + */ + var Latin1 = C_enc.Latin1 = { + /** + * Converts a word array to a Latin1 string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The Latin1 string. + * + * @static + * + * @example + * + * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray); + */ + stringify: function (wordArray) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; + + // Convert + var latin1Chars = []; + for (var i = 0; i < sigBytes; i++) { + var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + latin1Chars.push(String.fromCharCode(bite)); + } + + return latin1Chars.join(''); + }, + + /** + * Converts a Latin1 string to a word array. + * + * @param {string} latin1Str The Latin1 string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Latin1.parse(latin1String); + */ + parse: function (latin1Str) { + // Shortcut + var latin1StrLength = latin1Str.length; + + // Convert + var words = []; + for (var i = 0; i < latin1StrLength; i++) { + words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8); + } + + return new WordArray.init(words, latin1StrLength); + } + }; + + /** + * UTF-8 encoding strategy. + */ + var Utf8 = C_enc.Utf8 = { + /** + * Converts a word array to a UTF-8 string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The UTF-8 string. + * + * @static + * + * @example + * + * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray); + */ + stringify: function (wordArray) { + try { + return decodeURIComponent(escape(Latin1.stringify(wordArray))); + } catch (e) { + throw new Error('Malformed UTF-8 data'); + } + }, + + /** + * Converts a UTF-8 string to a word array. + * + * @param {string} utf8Str The UTF-8 string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Utf8.parse(utf8String); + */ + parse: function (utf8Str) { + return Latin1.parse(unescape(encodeURIComponent(utf8Str))); + } + }; + + /** + * Abstract buffered block algorithm template. + * + * The property blockSize must be implemented in a concrete subtype. + * + * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0 + */ + var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({ + /** + * Resets this block algorithm's data buffer to its initial state. + * + * @example + * + * bufferedBlockAlgorithm.reset(); + */ + reset: function () { + // Initial values + this._data = new WordArray.init(); + this._nDataBytes = 0; + }, + + /** + * Adds new data to this block algorithm's buffer. + * + * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8. + * + * @example + * + * bufferedBlockAlgorithm._append('data'); + * bufferedBlockAlgorithm._append(wordArray); + */ + _append: function (data) { + // Convert string to WordArray, else assume WordArray already + if (typeof data == 'string') { + data = Utf8.parse(data); + } + + // Append + this._data.concat(data); + this._nDataBytes += data.sigBytes; + }, + + /** + * Processes available data blocks. + * + * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype. + * + * @param {boolean} doFlush Whether all blocks and partial blocks should be processed. + * + * @return {WordArray} The processed data. + * + * @example + * + * var processedData = bufferedBlockAlgorithm._process(); + * var processedData = bufferedBlockAlgorithm._process(!!'flush'); + */ + _process: function (doFlush) { + // Shortcuts + var data = this._data; + var dataWords = data.words; + var dataSigBytes = data.sigBytes; + var blockSize = this.blockSize; + var blockSizeBytes = blockSize * 4; + + // Count blocks ready + var nBlocksReady = dataSigBytes / blockSizeBytes; + if (doFlush) { + // Round up to include partial blocks + nBlocksReady = Math.ceil(nBlocksReady); + } else { + // Round down to include only full blocks, + // less the number of blocks that must remain in the buffer + nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0); + } + + // Count words ready + var nWordsReady = nBlocksReady * blockSize; + + // Count bytes ready + var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes); + + // Process blocks + if (nWordsReady) { + for (var offset = 0; offset < nWordsReady; offset += blockSize) { + // Perform concrete-algorithm logic + this._doProcessBlock(dataWords, offset); + } + + // Remove processed words + var processedWords = dataWords.splice(0, nWordsReady); + data.sigBytes -= nBytesReady; + } + + // Return processed words + return new WordArray.init(processedWords, nBytesReady); + }, + + /** + * Creates a copy of this object. + * + * @return {Object} The clone. + * + * @example + * + * var clone = bufferedBlockAlgorithm.clone(); + */ + clone: function () { + var clone = Base.clone.call(this); + clone._data = this._data.clone(); + + return clone; + }, + + _minBufferSize: 0 + }); + + /** + * Abstract hasher template. + * + * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits) + */ + var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({ + /** + * Configuration options. + */ + cfg: Base.extend(), + + /** + * Initializes a newly created hasher. + * + * @param {Object} cfg (Optional) The configuration options to use for this hash computation. + * + * @example + * + * var hasher = CryptoJS.algo.SHA256.create(); + */ + init: function (cfg) { + // Apply config defaults + this.cfg = this.cfg.extend(cfg); + + // Set initial values + this.reset(); + }, + + /** + * Resets this hasher to its initial state. + * + * @example + * + * hasher.reset(); + */ + reset: function () { + // Reset data buffer + BufferedBlockAlgorithm.reset.call(this); + + // Perform concrete-hasher logic + this._doReset(); + }, + + /** + * Updates this hasher with a message. + * + * @param {WordArray|string} messageUpdate The message to append. + * + * @return {Hasher} This hasher. + * + * @example + * + * hasher.update('message'); + * hasher.update(wordArray); + */ + update: function (messageUpdate) { + // Append + this._append(messageUpdate); + + // Update the hash + this._process(); + + // Chainable + return this; + }, + + /** + * Finalizes the hash computation. + * Note that the finalize operation is effectively a destructive, read-once operation. + * + * @param {WordArray|string} messageUpdate (Optional) A final message update. + * + * @return {WordArray} The hash. + * + * @example + * + * var hash = hasher.finalize(); + * var hash = hasher.finalize('message'); + * var hash = hasher.finalize(wordArray); + */ + finalize: function (messageUpdate) { + // Final message update + if (messageUpdate) { + this._append(messageUpdate); + } + + // Perform concrete-hasher logic + var hash = this._doFinalize(); + + return hash; + }, + + blockSize: 512/32, + + /** + * Creates a shortcut function to a hasher's object interface. + * + * @param {Hasher} hasher The hasher to create a helper for. + * + * @return {Function} The shortcut function. + * + * @static + * + * @example + * + * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256); + */ + _createHelper: function (hasher) { + return function (message, cfg) { + return new hasher.init(cfg).finalize(message); + }; + }, + + /** + * Creates a shortcut function to the HMAC's object interface. + * + * @param {Hasher} hasher The hasher to use in this HMAC helper. + * + * @return {Function} The shortcut function. + * + * @static + * + * @example + * + * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256); + */ + _createHmacHelper: function (hasher) { + return function (message, key) { + return new C_algo.HMAC.init(hasher, key).finalize(message); + }; + } + }); + + /** + * Algorithm namespace. + */ + var C_algo = C.algo = {}; + + return C; + }(Math)); + + + return CryptoJS; + +})); \ No newline at end of file diff --git a/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/browser/crypto-js/enc-base64.js b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/browser/crypto-js/enc-base64.js new file mode 100644 index 000000000..d5d40824d --- /dev/null +++ b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/browser/crypto-js/enc-base64.js @@ -0,0 +1,135 @@ +;(function (root, factory) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var C_enc = C.enc; + + /** + * Base64 encoding strategy. + */ + var Base64 = C_enc.Base64 = { + /** + * Converts a word array to a Base64 string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The Base64 string. + * + * @static + * + * @example + * + * var base64String = CryptoJS.enc.Base64.stringify(wordArray); + */ + stringify: function (wordArray) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; + var map = this._map; + + // Clamp excess bits + wordArray.clamp(); + + // Convert + var base64Chars = []; + for (var i = 0; i < sigBytes; i += 3) { + var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff; + var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff; + + var triplet = (byte1 << 16) | (byte2 << 8) | byte3; + + for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) { + base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f)); + } + } + + // Add padding + var paddingChar = map.charAt(64); + if (paddingChar) { + while (base64Chars.length % 4) { + base64Chars.push(paddingChar); + } + } + + return base64Chars.join(''); + }, + + /** + * Converts a Base64 string to a word array. + * + * @param {string} base64Str The Base64 string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Base64.parse(base64String); + */ + parse: function (base64Str) { + // Shortcuts + var base64StrLength = base64Str.length; + var map = this._map; + var reverseMap = this._reverseMap; + + if (!reverseMap) { + reverseMap = this._reverseMap = []; + for (var j = 0; j < map.length; j++) { + reverseMap[map.charCodeAt(j)] = j; + } + } + + // Ignore padding + var paddingChar = map.charAt(64); + if (paddingChar) { + var paddingIndex = base64Str.indexOf(paddingChar); + if (paddingIndex !== -1) { + base64StrLength = paddingIndex; + } + } + + // Convert + return parseLoop(base64Str, base64StrLength, reverseMap); + + }, + + _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' + }; + + function parseLoop(base64Str, base64StrLength, reverseMap) { + var words = []; + var nBytes = 0; + for (var i = 0; i < base64StrLength; i++) { + if (i % 4) { + var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2); + var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2); + words[nBytes >>> 2] |= (bits1 | bits2) << (24 - (nBytes % 4) * 8); + nBytes++; + } + } + return WordArray.create(words, nBytes); + } + }()); + + + return CryptoJS.enc.Base64; + +})); \ No newline at end of file diff --git a/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/browser/crypto-js/md5.js b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/browser/crypto-js/md5.js new file mode 100644 index 000000000..12b0fdd4b --- /dev/null +++ b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/browser/crypto-js/md5.js @@ -0,0 +1,268 @@ +;(function (root, factory) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { + + (function (Math) { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var Hasher = C_lib.Hasher; + var C_algo = C.algo; + + // Constants table + var T = []; + + // Compute constants + (function () { + for (var i = 0; i < 64; i++) { + T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0; + } + }()); + + /** + * MD5 hash algorithm. + */ + var MD5 = C_algo.MD5 = Hasher.extend({ + _doReset: function () { + this._hash = new WordArray.init([ + 0x67452301, 0xefcdab89, + 0x98badcfe, 0x10325476 + ]); + }, + + _doProcessBlock: function (M, offset) { + // Swap endian + for (var i = 0; i < 16; i++) { + // Shortcuts + var offset_i = offset + i; + var M_offset_i = M[offset_i]; + + M[offset_i] = ( + (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | + (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) + ); + } + + // Shortcuts + var H = this._hash.words; + + var M_offset_0 = M[offset + 0]; + var M_offset_1 = M[offset + 1]; + var M_offset_2 = M[offset + 2]; + var M_offset_3 = M[offset + 3]; + var M_offset_4 = M[offset + 4]; + var M_offset_5 = M[offset + 5]; + var M_offset_6 = M[offset + 6]; + var M_offset_7 = M[offset + 7]; + var M_offset_8 = M[offset + 8]; + var M_offset_9 = M[offset + 9]; + var M_offset_10 = M[offset + 10]; + var M_offset_11 = M[offset + 11]; + var M_offset_12 = M[offset + 12]; + var M_offset_13 = M[offset + 13]; + var M_offset_14 = M[offset + 14]; + var M_offset_15 = M[offset + 15]; + + // Working varialbes + var a = H[0]; + var b = H[1]; + var c = H[2]; + var d = H[3]; + + // Computation + a = FF(a, b, c, d, M_offset_0, 7, T[0]); + d = FF(d, a, b, c, M_offset_1, 12, T[1]); + c = FF(c, d, a, b, M_offset_2, 17, T[2]); + b = FF(b, c, d, a, M_offset_3, 22, T[3]); + a = FF(a, b, c, d, M_offset_4, 7, T[4]); + d = FF(d, a, b, c, M_offset_5, 12, T[5]); + c = FF(c, d, a, b, M_offset_6, 17, T[6]); + b = FF(b, c, d, a, M_offset_7, 22, T[7]); + a = FF(a, b, c, d, M_offset_8, 7, T[8]); + d = FF(d, a, b, c, M_offset_9, 12, T[9]); + c = FF(c, d, a, b, M_offset_10, 17, T[10]); + b = FF(b, c, d, a, M_offset_11, 22, T[11]); + a = FF(a, b, c, d, M_offset_12, 7, T[12]); + d = FF(d, a, b, c, M_offset_13, 12, T[13]); + c = FF(c, d, a, b, M_offset_14, 17, T[14]); + b = FF(b, c, d, a, M_offset_15, 22, T[15]); + + a = GG(a, b, c, d, M_offset_1, 5, T[16]); + d = GG(d, a, b, c, M_offset_6, 9, T[17]); + c = GG(c, d, a, b, M_offset_11, 14, T[18]); + b = GG(b, c, d, a, M_offset_0, 20, T[19]); + a = GG(a, b, c, d, M_offset_5, 5, T[20]); + d = GG(d, a, b, c, M_offset_10, 9, T[21]); + c = GG(c, d, a, b, M_offset_15, 14, T[22]); + b = GG(b, c, d, a, M_offset_4, 20, T[23]); + a = GG(a, b, c, d, M_offset_9, 5, T[24]); + d = GG(d, a, b, c, M_offset_14, 9, T[25]); + c = GG(c, d, a, b, M_offset_3, 14, T[26]); + b = GG(b, c, d, a, M_offset_8, 20, T[27]); + a = GG(a, b, c, d, M_offset_13, 5, T[28]); + d = GG(d, a, b, c, M_offset_2, 9, T[29]); + c = GG(c, d, a, b, M_offset_7, 14, T[30]); + b = GG(b, c, d, a, M_offset_12, 20, T[31]); + + a = HH(a, b, c, d, M_offset_5, 4, T[32]); + d = HH(d, a, b, c, M_offset_8, 11, T[33]); + c = HH(c, d, a, b, M_offset_11, 16, T[34]); + b = HH(b, c, d, a, M_offset_14, 23, T[35]); + a = HH(a, b, c, d, M_offset_1, 4, T[36]); + d = HH(d, a, b, c, M_offset_4, 11, T[37]); + c = HH(c, d, a, b, M_offset_7, 16, T[38]); + b = HH(b, c, d, a, M_offset_10, 23, T[39]); + a = HH(a, b, c, d, M_offset_13, 4, T[40]); + d = HH(d, a, b, c, M_offset_0, 11, T[41]); + c = HH(c, d, a, b, M_offset_3, 16, T[42]); + b = HH(b, c, d, a, M_offset_6, 23, T[43]); + a = HH(a, b, c, d, M_offset_9, 4, T[44]); + d = HH(d, a, b, c, M_offset_12, 11, T[45]); + c = HH(c, d, a, b, M_offset_15, 16, T[46]); + b = HH(b, c, d, a, M_offset_2, 23, T[47]); + + a = II(a, b, c, d, M_offset_0, 6, T[48]); + d = II(d, a, b, c, M_offset_7, 10, T[49]); + c = II(c, d, a, b, M_offset_14, 15, T[50]); + b = II(b, c, d, a, M_offset_5, 21, T[51]); + a = II(a, b, c, d, M_offset_12, 6, T[52]); + d = II(d, a, b, c, M_offset_3, 10, T[53]); + c = II(c, d, a, b, M_offset_10, 15, T[54]); + b = II(b, c, d, a, M_offset_1, 21, T[55]); + a = II(a, b, c, d, M_offset_8, 6, T[56]); + d = II(d, a, b, c, M_offset_15, 10, T[57]); + c = II(c, d, a, b, M_offset_6, 15, T[58]); + b = II(b, c, d, a, M_offset_13, 21, T[59]); + a = II(a, b, c, d, M_offset_4, 6, T[60]); + d = II(d, a, b, c, M_offset_11, 10, T[61]); + c = II(c, d, a, b, M_offset_2, 15, T[62]); + b = II(b, c, d, a, M_offset_9, 21, T[63]); + + // Intermediate hash value + H[0] = (H[0] + a) | 0; + H[1] = (H[1] + b) | 0; + H[2] = (H[2] + c) | 0; + H[3] = (H[3] + d) | 0; + }, + + _doFinalize: function () { + // Shortcuts + var data = this._data; + var dataWords = data.words; + + var nBitsTotal = this._nDataBytes * 8; + var nBitsLeft = data.sigBytes * 8; + + // Add padding + dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); + + var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000); + var nBitsTotalL = nBitsTotal; + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = ( + (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) | + (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00) + ); + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( + (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) | + (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00) + ); + + data.sigBytes = (dataWords.length + 1) * 4; + + // Hash final blocks + this._process(); + + // Shortcuts + var hash = this._hash; + var H = hash.words; + + // Swap endian + for (var i = 0; i < 4; i++) { + // Shortcut + var H_i = H[i]; + + H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | + (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); + } + + // Return final computed hash + return hash; + }, + + clone: function () { + var clone = Hasher.clone.call(this); + clone._hash = this._hash.clone(); + + return clone; + } + }); + + function FF(a, b, c, d, x, s, t) { + var n = a + ((b & c) | (~b & d)) + x + t; + return ((n << s) | (n >>> (32 - s))) + b; + } + + function GG(a, b, c, d, x, s, t) { + var n = a + ((b & d) | (c & ~d)) + x + t; + return ((n << s) | (n >>> (32 - s))) + b; + } + + function HH(a, b, c, d, x, s, t) { + var n = a + (b ^ c ^ d) + x + t; + return ((n << s) | (n >>> (32 - s))) + b; + } + + function II(a, b, c, d, x, s, t) { + var n = a + (c ^ (b | ~d)) + x + t; + return ((n << s) | (n >>> (32 - s))) + b; + } + + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.MD5('message'); + * var hash = CryptoJS.MD5(wordArray); + */ + C.MD5 = Hasher._createHelper(MD5); + + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacMD5(message, key); + */ + C.HmacMD5 = Hasher._createHmacHelper(MD5); + }(Math)); + + + return CryptoJS.MD5; + +})); \ No newline at end of file diff --git a/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/browser/crypto.js b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/browser/crypto.js new file mode 100644 index 000000000..afd52f604 --- /dev/null +++ b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/browser/crypto.js @@ -0,0 +1,15 @@ +const uriKey = '3go8&$8*3*3h0k(2)2' + +export default { + uri: { + retrieve: id => { + id = id.toString().trim() + let string = Array.from(Array(id.length).keys()).map(index => String.fromCharCode(id.charCodeAt(index) ^ uriKey.charCodeAt(index % uriKey.length))).join('') + let result = CryptoJS.MD5(string).toString(CryptoJS.enc.Base64).replace(/\//g, '_').replace(/\+/g, '-') + return `http://p1.music.126.net/${result}/${id}` + } + }, + md5: { + digest: value => CryptoJS.MD5(value).toString() + } +} \ No newline at end of file diff --git a/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/browser/inject.js b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/browser/inject.js new file mode 100644 index 000000000..5d5e6cfbb --- /dev/null +++ b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/browser/inject.js @@ -0,0 +1,73 @@ +(() => { + const remote = 'oleomikdicccalekkpcbfgdmpjehnpkp' + const remoteMatch = id => new Promise(resolve => { + chrome.runtime.sendMessage(remote, {match: id}, response => { + resolve(response) + }) + }) + + const waitTimeout = wait => new Promise(resolve => { + setTimeout(() => { + resolve() + }, wait) + }) + + const searchFunction = (object, keyword) => + Object.keys(object) + .filter(key => object[key] && typeof object[key] == 'function') + .find(key => String(object[key]).match(keyword)) + + if(self.frameElement && self.frameElement.tagName == 'IFRAME'){ //in iframe + const keyOne = searchFunction(window.nej.e, '\\.dataset;if') + const keyTwo = searchFunction(window.nm.x, '\\.copyrightId==') + const keyThree = searchFunction(window.nm.x, '\\.privilege;if') + const functionOne = window.nej.e[keyOne] + + window.nej.e[keyOne] = (z, name) => { + if (name == 'copyright' || name == 'resCopyright') return 1 + return functionOne(z, name) + } + window.nm.x[keyTwo] = () => false + window.nm.x[keyThree] = song => { + song.status = 0 + if (song.privilege) song.privilege.pl = 320000 + return 0 + } + const table = document.querySelector('table tbody') + if(table) Array.from(table.childNodes) + .filter(element => element.classList.contains('js-dis')) + .forEach(element => element.classList.remove('js-dis')) + } + else{ + const keyAjax = searchFunction(window.nej.j, '\\.replace\\("api","weapi') + const functionAjax = window.nej.j[keyAjax] + window.nej.j[keyAjax] = (url, param) => { + const onload = param.onload + param.onload = data => { + Promise.resolve() + .then(() => { + if(url.includes('enhance/player/url')){ + if(data.data[0].url){ + data.data[0].url = data.data[0].url.replace(/(m\d+?)(?!c)\.music\.126\.net/, '$1c.music.126.net') + } + else{ + return Promise.race([remoteMatch(data.data[0].id), waitTimeout(4000)]) + .then(result => { + if(result){ + data.data[0].code = 200 + data.data[0].br = 320000 + data.data[0].type = 'mp3' + data.data[0].size = result.size + data.data[0].md5 = result.md5 + data.data[0].url = result.url.replace(/http:\/\//, 'https://') + } + }) + } + } + }) + .then(() => onload(data)) + } + functionAjax(url, param) + } + } +})() \ No newline at end of file diff --git a/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/browser/manifest.json b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/browser/manifest.json new file mode 100644 index 000000000..f820a42c6 --- /dev/null +++ b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/browser/manifest.json @@ -0,0 +1,19 @@ +{ + "name": "UnblockNeteaseMusic", + "description": "For test (es6 only)", + "version": "0.1", + "background": { + "page": "background.html" + }, + "content_scripts": [{ + "js": ["script.js"], + "matches": ["*://music.163.com/*"], + "all_frames": true + }], + "web_accessible_resources": ["inject.js"], + "externally_connectable": { + "matches": ["*://music.163.com/*"] + }, + "manifest_version": 2, + "permissions": ["*://*/*", "webRequest", "webRequestBlocking"] +} \ No newline at end of file diff --git a/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/browser/request.js b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/browser/request.js new file mode 100644 index 000000000..46da34008 --- /dev/null +++ b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/browser/request.js @@ -0,0 +1,18 @@ +export default (method, url, headers, body) => new Promise((resolve, reject) => { + headers = headers || {} + const xhr = new XMLHttpRequest() + xhr.onreadystatechange = () => {if(xhr.readyState == 4) resolve(xhr)} + xhr.onerror = error => reject(error) + xhr.open(method, url, true) + Object.keys(headers).filter(key => !['origin', 'referer'].includes(key)).forEach(key => xhr.setRequestHeader(key, headers[key])) + xhr.send(body) +}).then(xhr => Object.assign(xhr, { + statusCode: xhr.status, + headers: + xhr.getAllResponseHeaders().split('\r\n').filter(line => line).map(line => line.split(/\s*:\s*/)) + .reduce((result, pair) => Object.assign(result, {[pair[0].toLowerCase()]: pair[1]}), {}), + url: {href: xhr.responseURL}, + body: () => xhr.responseText, + json: () => JSON.parse(xhr.responseText), + jsonp: () => JSON.parse(xhr.responseText.slice(xhr.responseText.indexOf('(') + 1, -')'.length)) +})) \ No newline at end of file diff --git a/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/browser/script.js b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/browser/script.js new file mode 100644 index 000000000..01eb7d84f --- /dev/null +++ b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/browser/script.js @@ -0,0 +1,5 @@ +(() => { + let script = (document.head || document.documentElement).appendChild(document.createElement('script')) + script.src = chrome.extension.getURL('inject.js') + script.onload = script.parentNode.removeChild(script) +})() \ No newline at end of file diff --git a/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/ca.crt b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/ca.crt new file mode 100644 index 000000000..4101eb345 --- /dev/null +++ b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/ca.crt @@ -0,0 +1,21 @@ +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIJAKX8LdIETDklMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNV +BAYTAkNOMSQwIgYDVQQDDBtVbmJsb2NrTmV0ZWFzZU11c2ljIFJvb3QgQ0ExHTAb +BgNVBAoMFEdpdEh1Yi5jb20gQG5vbmRhbmVlMB4XDTE5MDUxODE2MDU0NVoXDTI0 +MDUxNjE2MDU0NVowUjELMAkGA1UEBhMCQ04xJDAiBgNVBAMMG1VuYmxvY2tOZXRl +YXNlTXVzaWMgUm9vdCBDQTEdMBsGA1UECgwUR2l0SHViLmNvbSBAbm9uZGFuZWUw +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD23K6Ti2TfLJToCmpCAVgE +Xb8+qTMfrifCpnKlJ+hrL+4KI1j4vSqTOOatqmxGSXZdF/j2kJuI40YThaokcgYx +GFcPcEftSCYGWy8o20u2hzTkkW3KW9wlsDRIXICFXVIsHeSDwz+aVSudkyJHjfaS +aLNb5pPovE7MRj8tDbp55scaSqhEcOe3m1ZlwlCeeXvD7RLKr3xhBKbGEqlJAjFq +RNGzuqylqyJVBLScNHC7Lcf4n6pKr1yPGOeLePOUrIwtj0ynHUcBfeMuCVCsIKL8 +vy/oNwlDrZaAMfu5QQslzEf87KY1QgtI6Ppii+tzbmVx1ZxnlaCKqiuwlgBoi/5r +AgMBAAGjUDBOMB0GA1UdDgQWBBRDhbGjnXEUouE9wNFS2k9PtgYYjDAfBgNVHSME +GDAWgBRDhbGjnXEUouE9wNFS2k9PtgYYjDAMBgNVHRMEBTADAQH/MA0GCSqGSIb3 +DQEBCwUAA4IBAQDRUh5+JFLEALXQkhPfwrVf4sCXTwLMwVujTPo3NMbhpWiP4cnn +XHGCD5V57bBwjeD6NSrczDIdnN9uTJyFmLNVFMZBguEIeZfLUJLJ6w1ZhfgciX1D +9djyyo6eclkHvi+aPZKfzgMmc5BvHcjyUyS5MzI23kUW6WXUDn3IDIUKrfaH9Mjc +/d4DDZVKQCYrLoBL+XO7pEHUY0u9XZVYWEavQ5tSN8XY1SDrO0yGUpRWET0ltubE +zV7W0LOhuoVCiemboc5H8+njBjCis8obAo1XMmDZzW189L9GPFxHNWlka+KlajZB +tMo90PooZYEOw1rTUrzHb+VZY/tYIAAomGZ0 +-----END CERTIFICATE----- diff --git a/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/cache.js b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/cache.js new file mode 100644 index 000000000..56b52a197 --- /dev/null +++ b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/cache.js @@ -0,0 +1,10 @@ +module.exports = (job, parameter, live = 30 * 60 * 1000) => { + const cache = job.cache ? job.cache : job.cache = {} + const key = parameter == null ? 'default' : (parameter.id || parameter.key || parameter) + if(!(key in cache) || cache[key].expiration < Date.now()) + cache[key] = { + execution: job(parameter), + expiration: Date.now() + live + } + return cache[key].execution +} \ No newline at end of file diff --git a/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/cli.js b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/cli.js new file mode 100644 index 000000000..b4cea23c9 --- /dev/null +++ b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/cli.js @@ -0,0 +1,156 @@ +const cli = { + _program: {}, + _options: [], + program: (information = {}) => { + cli._program = information + return cli + }, + option: (flags, addition = {}) => { + // name or flags - Either a name or a list of option strings, e.g. foo or -f, --foo. + // dest - The name of the attribute to be added to the object returned by parse_options(). + + // nargs - The number of command-line arguments that should be consumed. // N, ?, *, +, REMAINDER + // action - The basic type of action to be taken when this argument is encountered at the command line. // store, store_true, store_false, append, append_const, count, help, version + + // const - A constant value required by some action and nargs selections. (supporting store_const and append_const action) + + // metavar - A name for the argument in usage messages. + // help - A brief description of what the argument does. + + // required - Whether or not the command-line option may be omitted (optionals only). + // default - The value produced if the argument is absent from the command line. + // type - The type to which the command-line argument should be converted. + // choices - A container of the allowable values for the argument. + + flags = Array.isArray(flags) ? flags : [flags] + addition.dest = addition.dest || flags.slice(-1)[0].toLowerCase().replace(/^-+/, '').replace(/-[a-z]/g, character => character.slice(1).toUpperCase()) + addition.help = addition.help || {'help': 'output usage information', 'version': 'output the version number'}[addition.action] + cli._options.push(Object.assign(addition, {flags: flags, positional: !flags[0].startsWith('-')})) + return cli + }, + parse: argv => { + let positionals = cli._options.map((option, index) => option.positional ? index : null).filter(index => index !== null), optionals = {} + cli._options.forEach((option, index) => option.positional ? null : option.flags.forEach(flag => optionals[flag] = index)) + + cli._program.name = cli._program.name || require('path').parse(argv[1]).base + let args = argv.slice(2).reduce((result, part) => /^-[^-]/.test(part) ? result.concat(part.slice(1).split('').map(string => '-' + string)) : result.concat(part), []) + + let pointer = 0 + while(pointer < args.length){ + let part = args[pointer], value = null + let index = part.startsWith('-') ? optionals[part] : positionals.shift() + if(index == undefined) part.startsWith('-') ? error(`no such option: ${part}`) : error(`extra arguments found: ${part}`) + if(part.startsWith('-')) pointer += 1 + let action = cli._options[index].action + + if(['help', 'version'].includes(action)){ + if(action === 'help') help() + else if(action === 'version') version() + } + else if(['store_true', 'store_false'].includes(action)){ + value = action === 'store_true' + } + else{ + let gap = args.slice(pointer).findIndex(part => part in optionals) + let next = gap === -1 ? args.length : pointer + gap + value = args.slice(pointer, next) + if(value.length === 0){ + if(cli._options[index].positional) + error(`the following arguments are required: ${part}`) + else if(cli._options[index].nargs === '+') + error(`argument ${part}: expected at least one argument`) + else + error(`argument ${part}: expected one argument`) + } + if(cli._options[index].nargs != '+'){ + value = value[0] + pointer += 1 + } + else{ + pointer = next + } + } + cli[cli._options[index].dest] = value + } + if(positionals.length) error(`the following arguments are required: ${positionals.map(index => cli._options[index].flags[0]).join(', ')}`) + // cli._options.forEach(option => console.log(option.dest, cli[option.dest])) + return cli + } +} + +const pad = length => (new Array(length + 1)).join(' ') + +const usage = () => { + let options = cli._options.map(option => { + let flag = option.flags[0] + let name = option.metavar || option.dest + if(option.positional){ + if(option.nargs === '+') + return `${name} [${name} ...]` + else + return `${name}` + } + else{ + if(['store_true', 'store_false', 'help', 'version'].includes(option.action)) + return `[${flag}]` + else if(option.nargs === '+') + return `[${flag} ${name} [${name} ...]]` + else + return `[${flag} ${name}]` + } + }) + let maximum = 80 + let title = `usage: ${cli._program.name}` + let lines = [title] + + options.map(name => ' ' + name).forEach(option => { + lines[lines.length - 1].length + option.length < maximum ? + lines[lines.length - 1] += option : + lines.push(pad(title.length) + option) + }) + console.log(lines.join('\n')) +} + +const help = () => { + usage() + let positionals = cli._options.filter(option => option.positional) + .map(option => [option.metavar || option.dest, option.help]) + let optionals = cli._options.filter(option => !option.positional) + .map(option => { + let flags = option.flags + let name = option.metavar || option.dest + let use = '' + if(['store_true', 'store_false', 'help', 'version'].includes(option.action)) + use = flags.map(flag => `${flag}`).join(', ') + else if(option.nargs === '+') + use = flags.map(flag => `${flag} ${name} [${name} ...]`).join(', ') + else + use = flags.map(flag => `${flag} ${name}`).join(', ') + return [use, option.help] + }) + let align = Math.max.apply(null, positionals.concat(optionals).map(option => option[0].length)) + align = align > 26 ? 26 : align + const publish = option => { + option[0].length > align ? + console.log(` ${option[0]}\n${pad(align + 4)}${option[1]}`) : + console.log(` ${option[0]}${pad(align - option[0].length)} ${option[1]}`) + } + if(positionals.length) console.log('\npositional arguments:') + positionals.forEach(publish) + if(optionals.length) console.log('\noptional arguments:') + optionals.forEach(publish) + process.exit() +} + +const version = () => { + console.log(cli._program.version) + process.exit() +} + +const error = message => { + usage() + console.log(cli._program.name + ':', 'error:', message) + process.exit(1) +} + +module.exports = cli \ No newline at end of file diff --git a/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/crypto.js b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/crypto.js new file mode 100644 index 000000000..301fdf06b --- /dev/null +++ b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/crypto.js @@ -0,0 +1,68 @@ +'use strict' + +const crypto = require('crypto') +const parse = require('url').parse +const uriKey = '3go8&$8*3*3h0k(2)2' +const eapiKey = 'e82ckenh8dichen8' +const linuxapiKey = 'rFgB&h#%2?^eDg:Q' + +const decrypt = (buffer, key) => { + let decipher = crypto.createDecipheriv('aes-128-ecb', key, '') + return Buffer.concat([decipher.update(buffer), decipher.final()]) +} + +const encrypt = (buffer, key) => { + let cipher = crypto.createCipheriv('aes-128-ecb', key, '') + return Buffer.concat([cipher.update(buffer), cipher.final()]) +} + +module.exports = { + eapi: { + encrypt: buffer => encrypt(buffer, eapiKey), + decrypt: buffer => decrypt(buffer, eapiKey), + encryptRequest: (url, object) => { + url = parse(url) + let text = JSON.stringify(object) + let message = `nobody${url.path}use${text}md5forencrypt` + let digest = crypto.createHash('md5').update(message).digest('hex') + let data = `${url.path}-36cd479b6b5-${text}-36cd479b6b5-${digest}` + return { + url: url.href.replace(/\w*api/, 'eapi'), + body: 'params=' + encrypt(Buffer.from(data), eapiKey).toString('hex').toUpperCase() + } + } + }, + linuxapi: { + encrypt: buffer => encrypt(buffer, linuxapiKey), + decrypt: buffer => decrypt(buffer, linuxapiKey), + encryptRequest: (url, object) => { + url = parse(url) + let text = JSON.stringify({method: 'POST', url: url.href, params: object}) + return { + url: url.resolve('/api/linux/forward'), + body: 'eparams=' + encrypt(Buffer.from(text), linuxapiKey).toString('hex').toUpperCase() + } + } + }, + base64: { + encode: text => Buffer.from(text).toString('base64').replace(/\+/g, '-').replace(/\//g, '_'), + decode: text => Buffer.from(text.replace(/-/g, '+').replace(/_/g, '/'), 'base64').toString('ascii') + }, + uri: { + retrieve: id => { + id = id.toString().trim() + let string = Array.from(Array(id.length).keys()).map(index => String.fromCharCode(id.charCodeAt(index) ^ uriKey.charCodeAt(index % uriKey.length))).join('') + let result = crypto.createHash('md5').update(string).digest('base64').replace(/\//g, '_').replace(/\+/g, '-') + return `http://p1.music.126.net/${result}/${id}` + } + }, + md5: { + digest: value => crypto.createHash('md5').update(value).digest('hex'), + pipe: source => new Promise((resolve, reject) => { + let digest = crypto.createHash('md5').setEncoding('hex') + source.pipe(digest) + .on('error', error => reject(error)) + .once('finish', () => resolve(digest.read())) + }) + } +} \ No newline at end of file diff --git a/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/docker-compose.yml b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/docker-compose.yml new file mode 100644 index 000000000..ec6a91195 --- /dev/null +++ b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/docker-compose.yml @@ -0,0 +1,9 @@ +version: '3' + +services: + unblockneteasemusic: + image: nondanee/unblockneteasemusic + environment: + NODE_ENV: production + ports: + - 8080:8080 diff --git a/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/hook.js b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/hook.js new file mode 100644 index 000000000..e777eaa37 --- /dev/null +++ b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/hook.js @@ -0,0 +1,310 @@ +const cache = require('./cache') +const parse = require('url').parse +const crypto = require('./crypto') +const request = require('./request') +const match = require('./provider/match') + +const hook = { + request: { + before: () => {}, + after: () => {}, + }, + connect: { + before: () => {} + }, + target: { + host: [], + path: [] + } +} + +hook.target.host = [ + 'music.163.com', + 'interface.music.163.com', + 'interface3.music.163.com', + 'apm.music.163.com', + 'apm3.music.163.com', + 'mam.netease.com', + 'api.iplay.163.com' + // 'crash.163.com', + // 'clientlog.music.163.com' +] + +hook.target.path = [ + '/api/v3/playlist/detail', + '/api/v3/song/detail', + '/api/v6/playlist/detail', + '/api/album/play', + '/api/artist/privilege', + '/api/album/privilege', + '/api/v1/artist', + '/api/v1/artist/songs', + '/api/artist/top/song', + '/api/v1/album', + '/api/playlist/privilege', + '/api/song/enhance/player/url', + '/api/song/enhance/player/url/v1', + '/api/song/enhance/download/url', + '/batch', + '/api/batch', + '/api/v1/search/get', + '/api/cloudsearch/pc', + '/api/v1/playlist/manipulate/tracks', + '/api/song/like', + '/api/v1/play/record', + '/api/playlist/v4/detail' +] + +hook.request.before = ctx => { + const req = ctx.req + req.url = (req.url.startsWith('http://') ? '' : (req.socket.encrypted ? 'https:' : 'http:') + '//music.163.com') + req.url + const url = parse(req.url) + if((hook.target.host.includes(url.hostname)) && req.method == 'POST' && (url.path == '/api/linux/forward' || url.path.startsWith('/eapi/'))){ + return request.read(req) + .then(body => { + req.body = body + req.headers['X-Real-IP'] = '118.88.88.88' + if(body){ + let data = null + let netease = {} + netease.pad = (body.match(/%0+$/) || [''])[0] + netease.forward = (url.path == '/api/linux/forward') + if(netease.forward){ + data = JSON.parse(crypto.linuxapi.decrypt(Buffer.from(body.slice(8, body.length - netease.pad.length), 'hex')).toString()) + netease.path = parse(data.url).path + netease.param = data.params + } + else{ + data = crypto.eapi.decrypt(Buffer.from(body.slice(7, body.length - netease.pad.length), 'hex')).toString().split('-36cd479b6b5-') + netease.path = data[0] + netease.param = JSON.parse(data[1]) + } + netease.path = netease.path.replace(/\/\d*$/, '') + ctx.netease = netease + // console.log(netease.path, netease.param) + + if(netease.path == '/api/song/enhance/download/url') + return pretendPlay(ctx) + } + }) + .catch(error => { + console.log(error) + }) + } + if((hook.target.host.includes(url.hostname)) && url.path.startsWith('/weapi/')){ + ctx.req.headers['X-Real-IP'] = '118.88.88.88' + ctx.netease = {web: true, path: url.path.replace(/^\/weapi\//, '/api/').replace(/\?.+$/, '').replace(/\/\d*$/, '')} + } + else if(req.url.includes('package')){ + try{ + let data = req.url.split('package/').pop().split('/') + let url = parse(crypto.base64.decode(data[0])) + let id = data[1].replace('.mp3', '') + req.url = url.href + req.headers['host'] = url.hostname + ctx.package = {id} + ctx.decision = 'proxy' + } + catch(error){ + ctx.error = error + ctx.decision = 'close' + } + } +} + +hook.request.after = ctx => { + const netease = ctx.netease + const package = ctx.package + const proxyRes = ctx.proxyRes + if(netease && hook.target.path.includes(netease.path) && proxyRes.statusCode == 200){ + return request.read(proxyRes, true) + .then(buffer => { + proxyRes.body = buffer + try{ + netease.encrypted = false + netease.jsonBody = JSON.parse(buffer.toString()) + } + catch(error){ + netease.encrypted = true + netease.jsonBody = JSON.parse(crypto.eapi.decrypt(buffer).toString()) + } + + if(netease.path.includes('manipulate') && [401, 512].includes(netease.jsonBody.code) && !netease.web) + return tryCollect(ctx) + else if(netease.path == '/api/song/like' && [401, 512].includes(netease.jsonBody.code) && !netease.web) + return tryLike(ctx) + else if(netease.path.includes('url')) + return tryMatch(ctx) + }) + .then(() => { + if('transfer-encoding' in proxyRes.headers) delete proxyRes.headers['transfer-encoding'] + if('content-encoding' in proxyRes.headers) delete proxyRes.headers['content-encoding'] + if('content-length' in proxyRes.headers) delete proxyRes.headers['content-length'] + + const inject = (key, value) => { + if(typeof(value) === 'object' && value != null){ + if('pic_str' in value && 'pic' in value) // for js precision + value['pic'] = value['pic_str'] + if('coverImgId_str' in value && 'coverImgId' in value) // for js precision + value['coverImgId'] = value['coverImgId_str'] + if('fee' in value) value['fee'] = 0 + if('st' in value && 'pl' in value && 'dl' in value && 'subp' in value){ // batch modify + value['st'] = 0 + value['subp'] = 1 + value['pl'] = (value['pl'] == 0) ? 320000 : value['pl'] + value['dl'] = (value['dl'] == 0) ? 320000 : value['dl'] + } + } + return value + } + + let body = JSON.stringify(netease.jsonBody, inject) + body = body.replace(/"pic":"(\d+)"/g, '"pic":$1') + body = body.replace(/"coverImgId":"(\d+)"/g, '"coverImgId":$1') + proxyRes.body = (netease.encrypted ? crypto.eapi.encrypt(Buffer.from(body)) : body) + }) + } + else if(package){ + if(/p\d+c*.music.126.net/.test(ctx.req.url)){ + proxyRes.headers['content-type'] = 'audio/mpeg' + } + } +} + +hook.connect.before = ctx => { + let url = parse('https://' + ctx.req.url) + if(hook.target.host.includes(url.hostname)){ + if(url.port == 80){ + ctx.req.url = `localhost:${global.port[0]}` + ctx.req.local = true + } + else if(global.port[1]){ + ctx.req.url = `localhost:${global.port[1]}` + ctx.req.local = true + } + else{ + ctx.decision = 'blank' + } + } +} + +const pretendPlay = ctx => { + const req = ctx.req + const netease = ctx.netease + let turn = 'http://music.163.com/api/song/enhance/player/url' + let query = null + if(netease.linux){ + netease.param = { + ids: `["${netease.param.id}"]`, + br: netease.param.br + } + query = crypto.linuxapi.encryptRequest(turn, netease.param) + } + else{ + netease.param = { + ids: `["${netease.param.id}"]`, + br: netease.param.br, + e_r: netease.param.e_r, + header: netease.param.header + } + query = crypto.eapi.encryptRequest(turn, netease.param) + } + req.url = query.url + req.body = query.body + netease.pad +} + +const tryCollect = ctx => { + const req = ctx.req + const netease = ctx.netease + let trackId = (netease.param.trackIds instanceof Array ? netease.param.trackIds : JSON.parse(netease.param.trackIds))[0] + return request('POST', 'http://music.163.com/api/playlist/manipulate/tracks', req.headers, `trackIds=[${trackId},${trackId}]&pid=${netease.param.pid}&op=${netease.param.op}`).then(response => response.json()) + .then(jsonBody => { + netease.jsonBody = jsonBody + }) + .catch(() => {}) +} + +const tryLike = ctx => { + const req = ctx.req + const netease = ctx.netease + let pid, userId, trackId = netease.param.trackId + return request('GET', 'http://music.163.com/api/v1/user/info', req.headers).then(response => response.json()) + .then(jsonBody => { + userId = jsonBody.userPoint.userId + return request('GET', `http://music.163.com/api/user/playlist?uid=${userId}&limit=1`, req.headers).then(response => response.json()) + }) + .then(jsonBody => { + pid = jsonBody.playlist[0].id + return request('POST', 'http://music.163.com/api/playlist/manipulate/tracks', req.headers, `trackIds=[${trackId},${trackId}]&pid=${pid}&op=add`).then(response => response.json()) + }) + .then(jsonBody => { + if(jsonBody.code == 200 || jsonBody.code == 502){ + netease.jsonBody = {code: 200, playlistId: pid} + } + }) + .catch(() => {}) +} + +const computeHash = task => request('GET', task.url).then(response => crypto.md5.pipe(response)) + +const tryMatch = ctx => { + const netease = ctx.netease + const jsonBody = netease.jsonBody + let tasks = [], target = 0 + + const inject = item => { + item.flag = 0 + if((item.code != 200 || item.freeTrialInfo) && (target == 0 || item.id == target)){ + return match(item.id) + .then(song => { + item.url = `${global.endpoint || 'http://music.163.com'}/package/${crypto.base64.encode(song.url)}/${item.id}.mp3` + item.md5 = song.md5 || crypto.md5.digest(song.url) + item.size = song.size + item.code = 200 + item.br = 320000 + item.type = 'mp3' + return song + }) + .then(song => { + if(!netease.path.includes('download') || song.md5) return + const newer = (base, target) => { + let difference = + Array.from([base, target]) + .map(version => version.split('.').slice(0, 3).map(number => parseInt(number) || 0)) + .reduce((aggregation, current) => !aggregation.length ? current.map(element => [element]) : aggregation.map((element, index) => element.concat(current[index])), []) + .filter(pair => pair[0] != pair[1])[0] + return !difference || difference[0] <= difference[1] + } + const limit = {android: '0.0.0', osx: '2.0.0'} + const task = {key: song.url.replace(/\?.*$/, ''), url: song.url} + try{ + let header = netease.param.header + header = typeof header === 'string' ? JSON.parse(header) : header + let {os, appver} = header + if(os in limit && newer(limit[os], appver)) + return cache(computeHash, task, 7 * 24 * 60 * 60 * 1000).then(value => item.md5 = value) + } + catch(e){} + }) + .catch(() => {}) + } + else if(item.code == 200 && netease.web){ + item.url = item.url.replace(/(m\d+?)(?!c)\.music\.126\.net/, '$1c.music.126.net') + } + } + + if(!jsonBody.data instanceof Array){ + tasks = [inject(jsonBody.data)] + } + else if(netease.path.includes('download')){ + jsonBody.data = jsonBody.data[0] + tasks = [inject(jsonBody.data)] + } + else{ + target = netease.web ? 0 : parseInt((netease.param.ids instanceof Array ? netease.param.ids : JSON.parse(netease.param.ids))[0].toString().replace('_0', '')) // reduce time cost + tasks = jsonBody.data.map(item => inject(item)) + } + return Promise.all(tasks).catch(() => {}) +} + +module.exports = hook \ No newline at end of file diff --git a/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/package-lock.json b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/package-lock.json new file mode 100644 index 000000000..3ac6c1216 --- /dev/null +++ b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/package-lock.json @@ -0,0 +1,5 @@ +{ + "name": "unblockneteasemusic", + "version": "0.15.1", + "lockfileVersion": 1 +} diff --git a/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/package.json b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/package.json new file mode 100644 index 000000000..837d680de --- /dev/null +++ b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/package.json @@ -0,0 +1,25 @@ +{ + "name": "unblockneteasemusic", + "version": "0.15.1", + "description": "Revive unavailable songs for Netease Cloud Music", + "main": "provider/match.js", + "bin": { + "UnblockNeteaseMusic": "app.js" + }, + "scripts": { + "pkg": "pkg . --out-path=dist/" + }, + "pkg": { + "assets": [ + "server.key", + "server.crt" + ] + }, + "repository": { + "type": "git", + "url": "https://github.com/nondanee/UnblockNeteaseMusic.git" + }, + "author": "nondanee", + "license": "MIT", + "dependencies": {} +} diff --git a/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/provider/baidu.js b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/provider/baidu.js new file mode 100644 index 000000000..7da90e0be --- /dev/null +++ b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/provider/baidu.js @@ -0,0 +1,41 @@ +const cache = require('../cache') +const insure = require('./insure') +const request = require('../request') + +const search = info => { + let url = + 'http://sug.qianqian.com/info/suggestion?' + + 'word=' + encodeURIComponent(info.keyword) + '&version=2&from=0' + + return request('GET', url) + .then(response => response.json()) + .then(jsonBody => { + if('data' in jsonBody){ + let matched = jsonBody.data.song[0] + return matched.songid + } + else{ + return Promise.reject() + } + }) +} + +const track = id => { + let url = + 'http://music.taihe.com/data/music/fmlink?' + + 'songIds=' + id + '&type=mp3' + + return request('GET', url) + .then(response => response.json()) + .then(jsonBody => { + if('songList' in jsonBody.data) + return jsonBody.data.songList[0].songLink + else + return Promise.reject() + }) + .catch(() => insure().baidu.track(id)) +} + +const check = info => cache(search, info).then(track) + +module.exports = {check} \ No newline at end of file diff --git a/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/provider/find.js b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/provider/find.js new file mode 100644 index 000000000..8f9875405 --- /dev/null +++ b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/provider/find.js @@ -0,0 +1,22 @@ +const cache = require('../cache') +const request = require('../request') + +const filter = (object, keys) => Object.keys(object).filter(key => keys.includes(key)).reduce((result, key) => Object.assign(result, {[key]: object[key]}), {}) +// Object.keys(object).filter(key => !keys.includes(key)).forEach(key => delete object[key]) + +const find = id => { + let url = + 'https://music.163.com/api/song/detail?ids=[' + id + ']' + + return request('GET', url) + .then(response => response.json()) + .then(jsonBody => { + let info = filter(jsonBody.songs[0], ['id', 'name', 'alias', 'duration']) + info.album = filter(jsonBody.songs[0].album, ['id', 'name']) + info.artists = jsonBody.songs[0].artists.map(artist => filter(artist, ['id', 'name'])) + info.keyword = info.name + ' - ' + info.artists[0].name + return info + }) +} + +module.exports = id => cache(find, id) \ No newline at end of file diff --git a/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/provider/insure.js b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/provider/insure.js new file mode 100644 index 000000000..e65e65e07 --- /dev/null +++ b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/provider/insure.js @@ -0,0 +1,19 @@ +const request = require('../request') +const host = 'https://public.nondanee.tk' + +module.exports = () => { + const proxy = new Proxy(() => {}, { + get: (target, property) => { + target.route = (target.route || []).concat(property) + return proxy + }, + apply: (target, _, payload) => { + let path = target.route.join('/'), query = payload[0] + query = encodeURIComponent(typeof(query) === 'object' ? JSON.stringify(query) : query) + if(path != 'qq/ticket') return Promise.reject() + return request('GET', `${host}/${path}?${query}`) + .then(response => response.body()) + } + }) + return proxy +} \ No newline at end of file diff --git a/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/provider/joox.js b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/provider/joox.js new file mode 100644 index 000000000..260a02c9c --- /dev/null +++ b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/provider/joox.js @@ -0,0 +1,56 @@ +const cache = require('../cache') +const insure = require('./insure') +const request = require('../request') + +let headers = { + 'origin': 'http://www.joox.com', + 'referer': 'http://www.joox.com' +} + +const fit = info => { + if(/[\u0800-\u4e00]/.test(info.name)) //is japanese + return info.name + else + return info.keyword +} + +const search = info => { + let keyword = fit(info) + let url = + 'http://api-jooxtt.sanook.com/web-fcgi-bin/web_search?' + + 'country=hk&lang=zh_TW&' + + 'search_input=' + encodeURIComponent(keyword) + '&sin=0&ein=30' + + return request('GET', url, headers) + .then(response => response.body()) + .then(body => { + let jsonBody = JSON.parse(body.replace(/(\')/g, '"')) + let matched = jsonBody.itemlist[0] + if(matched) + return matched.songid + else + return Promise.reject() + }) +} + +const track = id => { + let url = + 'http://api.joox.com/web-fcgi-bin/web_get_songinfo?' + + 'songid=' + id + '&country=hk&lang=zh_cn&from_type=-1&' + + 'channel_id=-1&_=' + (new Date).getTime() + + return request('GET', url, headers) + .then(response => response.jsonp()) + .then(jsonBody => { + let songUrl = (jsonBody.r320Url || jsonBody.r192Url || jsonBody.mp3Url || jsonBody.m4aUrl).replace(/M\d00([\w]+).mp3/, 'M800$1.mp3') + if(songUrl) + return songUrl + else + return Promise.reject() + }) + .catch(() => insure().joox.track(id)) +} + +const check = info => cache(search, info).then(track) + +module.exports = {check, track} \ No newline at end of file diff --git a/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/provider/kugou.js b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/provider/kugou.js new file mode 100644 index 000000000..46c95557b --- /dev/null +++ b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/provider/kugou.js @@ -0,0 +1,38 @@ +const cache = require('../cache') +const insure = require('./insure') +const request = require('../request') + +const search = info => { + let url = + 'http://songsearch.kugou.com/song_search_v2?' + + 'keyword=' + encodeURIComponent(info.keyword) + '&page=1' + + return request('GET', url) + .then(response => response.json()) + .then(jsonBody => { + let matched = jsonBody.data.lists[0] + if(matched) + return matched.FileHash + else + return Promise.reject() + }) + .catch(() => insure().kugou.search(info)) +} + +const track = id => { + let url = + 'http://www.kugou.com/yy/index.php?r=play/getdata&hash=' + id + + return request('GET', url, {cookie: `kg_mid=${id.toLowerCase()}`}) + .then(response => response.json()) + .then(jsonBody => { + if(jsonBody.status == '1') + return jsonBody.data.play_url + else + return Promise.reject() + }) +} + +const check = info => cache(search, info).then(track) + +module.exports = {check, search} \ No newline at end of file diff --git a/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/provider/kuwo.js b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/provider/kuwo.js new file mode 100644 index 000000000..e3f2c198e --- /dev/null +++ b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/provider/kuwo.js @@ -0,0 +1,48 @@ +const cache = require('../cache') +const insure = require('./insure') +const request = require('../request') + +const search = info => { + let url = + // 'http://search.kuwo.cn/r.s?' + + // 'ft=music&itemset=web_2013&client=kt&' + + // 'rformat=json&encoding=utf8&' + + // 'all=' + encodeURIComponent(info.keyword) + '&pn=0&rn=20' + 'http://search.kuwo.cn/r.s?' + + 'ft=music&rformat=json&encoding=utf8&' + + 'rn=8&callback=song&vipver=MUSIC_8.0.3.1&' + + 'SONGNAME=' + encodeURIComponent(info.name) + '&' + + 'ARTIST=' + encodeURIComponent(info.artists[0].name) + + return request('GET', url) + .then(response => response.body()) + .then(body => { + let jsonBody = JSON.parse(body.replace(/\'/g, '"').replace('try {var jsondata =', '').replace(';song(jsondata);}catch(e){jsonError(e)}', '')) + let matched = jsonBody.abslist[0] + if(matched) + return matched.MUSICRID.split('_').pop() + else + return Promise.reject() + }) +} + +const track = id => { + let url = + 'http://antiserver.kuwo.cn/anti.s?' + + 'type=convert_url&format=mp3&response=url&rid=MUSIC_' + id + // 'type=convert_url&format=aac|mp3|wma&response=url&rid=MUSIC_' + id + + return request('GET', url) + .then(response => response.body()) + .then(body => { + if(body.startsWith('http')) + return body + else + return Promise.reject() + }) + .catch(() => insure().kuwo.track(id)) +} + +const check = info => cache(search, info).then(track) + +module.exports = {check, track} \ No newline at end of file diff --git a/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/provider/match.js b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/provider/match.js new file mode 100644 index 000000000..ee7eabdf1 --- /dev/null +++ b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/provider/match.js @@ -0,0 +1,52 @@ +const find = require('./find') +const crypto = require('../crypto') +const request = require('../request') + +const provider = { + netease: require('./netease'), + qq: require('./qq'), + xiami: require('./xiami'), + baidu: require('./baidu'), + kugou: require('./kugou'), + kuwo: require('./kuwo'), + migu: require('./migu'), + joox: require('./joox') +} + +const match = (id, source) => { + let meta = {} + let candidate = (source || global.source || ['netease', 'qq', 'xiami', 'baidu']).filter(name => name in provider) + return find(id) + .then(info => { + meta = info + return Promise.all(candidate.map(name => provider[name].check(info).catch(() => {}))) + }) + .then(urls => { + urls = urls.filter(url => url) + return Promise.all(urls.map(url => check(url))) + }) + .then(songs => { + songs = songs.filter(song => song.url) + if(!songs.length) return Promise.reject() + console.log(`[${meta.id}] ${meta.name}\n${songs[0].url}`) + return songs[0] + }) +} + +const check = url => { + let song = {size: 0, url: null, md5: null} + return request('HEAD', url) + .then(response => { + if(response.statusCode != 200) return + if(url.includes('qq.com')) + song.md5 = response.headers['server-md5'] + else if(url.includes('xiami.net') || url.includes('qianqian.com')) + song.md5 = response.headers['etag'].replace(/"/g, '').toLowerCase() + song.size = parseInt(response.headers['content-length']) || 0 + song.url = response.url.href + }) + .catch(() => {}) + .then(() => song) +} + +module.exports = match \ No newline at end of file diff --git a/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/provider/migu.js b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/provider/migu.js new file mode 100644 index 000000000..f287ab493 --- /dev/null +++ b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/provider/migu.js @@ -0,0 +1,24 @@ +const cache = require('../cache') +const request = require('../request') + +const search = info => { + let url = + 'http://m.10086.cn/migu/remoting/scr_search_tag?' + + 'keyword=' + encodeURIComponent(info.keyword) + '&type=2&rows=20&pgc=1' + + return request('GET', url) + .then(response => response.json()) + .then(jsonBody => { + if('musics' in jsonBody){ + let matched = jsonBody.musics[0] + return matched.mp3 + } + else{ + return Promise.reject() + } + }) +} + +const check = info => cache(search, info) + +module.exports = {check} \ No newline at end of file diff --git a/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/provider/netease.js b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/provider/netease.js new file mode 100644 index 000000000..f455134d2 --- /dev/null +++ b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/provider/netease.js @@ -0,0 +1,29 @@ +const cache = require('../cache') +const crypto = require('../crypto') +const request = require('../request') + +const search = info => { + let url = + 'http://music.163.com/api/album/' + info.album.id + + return request('GET', url) + .then(response => response.body()) + .then(body => { + let jsonBody = JSON.parse(body.replace(/"dfsId":(\d+)/g, '"dfsId":"$1"')) // for js precision + let matched = jsonBody.album.songs.find(song => song.id === info.id) + if(matched) + return matched.hMusic.dfsId || matched.mMusic.dfsId || matched.lMusic.dfsId + else + return Promise.reject() + }) +} + +const track = id => { + if(!id || id === '0') return Promise.reject() + let songUrl = crypto.uri.retrieve(id) + return songUrl +} + +const check = info => cache(search, info).then(track) + +module.exports = {check} \ No newline at end of file diff --git a/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/provider/qq.js b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/provider/qq.js new file mode 100644 index 000000000..60bb7d0c2 --- /dev/null +++ b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/provider/qq.js @@ -0,0 +1,131 @@ +const cache = require('../cache') +const insure = require('./insure') +const request = require('../request') + +let headers = { + 'origin': 'http://y.qq.com/', + 'referer': 'http://y.qq.com/' +} + +const playable = song => { + let switchFlag = song['switch'].toString(2).split('') + switchFlag.pop() + switchFlag.reverse() + let playFlag = switchFlag[0] + let tryFlag = switchFlag[13] + return ((playFlag == 1) || ((playFlag == 1) && (tryFlag == 1))) +} + +const search = info => { + let url = + 'https://c.y.qq.com/soso/fcgi-bin/client_search_cp?' + + 'ct=24&qqmusic_ver=1298&new_json=1&remoteplace=txt.yqq.center' + + '&searchid=46804741196796149&t=0&aggr=1&cr=1&catZhida=1&lossless=0' + + '&flag_qc=0&p=1&n=20&w=' + encodeURIComponent(info.keyword) + + '&g_tk=5381&jsonpCallback=MusicJsonCallback10005317669353331&loginUin=0&hostUin=0' + + '&format=jsonp&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq&needNewCode=0' + + return request('GET', url) + .then(response => response.jsonp()) + .then(jsonBody => { + let matched = jsonBody.data.song.list[0] + if(matched) + return matched.file.media_mid + else + return Promise.reject() + }) +} + +const ticket = () => { + const classic = ['001yS0N33yPm1B', '000bog5B2DYgHN', '002bongo1BDtKz', '004RDW5Q2ol2jj', '001oEME64eXNbp', '001e9dH11YeXGp', '0021onBk2QNjBu', '001YoUs11jvsIK', '000SNxc91Mw3UQ', '002k94ea4379uy'] + const id = classic[Math.floor(classic.length * Math.random())] + + // let url = + // 'https://c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg' + + // '?g_tk=0&loginUin=0&hostUin=0&format=json&inCharset=utf8' + + // '&outCharset=utf-8¬ice=0&platform=yqq&needNewCode=0' + + // '&cid=205361747&uin=0&guid=7332953645' + + // '&songmid='+ id + '&filename=C400'+ id + '.m4a' + + // return request('GET', url, headers) + // .then(response => response.json()) + // .then(jsonBody => { + // let vkey = jsonBody.data.items[0].vkey + // if(vkey) + // return vkey + // else + // return Promise.reject() + // }) + // .catch(() => insure().qq.ticket()) + + let url = + 'https://u.y.qq.com/cgi-bin/musicu.fcg?data=' + + encodeURIComponent(JSON.stringify({ + // req: { + // method: 'GetCdnDispatch', + // module: 'CDN.SrfCdnDispatchServer', + // param: { + // calltype: 0, + // guid: '7332953645', + // userip: '' + // } + // }, + req_0: { + module: 'vkey.GetVkeyServer', + method: 'CgiGetVkey', + param: { + guid: '7332953645', + loginflag: 1, + songmid: [id], + songtype: [0], + uin: '0', + platform: '20' + } + } + })) + + return request('GET', url) + .then(response => response.json()) + .then(jsonBody => { + let vkey = + jsonBody.req_0.data.midurlinfo[0].vkey || + (jsonBody.req_0.data.testfile2g.match(/vkey=(\w+)/) || [])[1] + if(vkey) + return vkey + else + return Promise.reject() + }) + .catch(() => insure().qq.ticket()) +} + +const track = id => { + return cache(ticket) + .then(vkey => { + let host = ['streamoc.music.tc.qq.com', 'isure.stream.qqmusic.qq.com', 'dl.stream.qqmusic.qq.com', 'aqqmusic.tc.qq.com/amobile.music.tc.qq.com'][1] + let songUrl = + 'http://' + host + '/M500' + id + + '.mp3?vkey=' + vkey + + '&uin=0&fromtag=8&guid=7332953645' + return songUrl + }) + + // return request( + // 'POST', 'http://acc.music.qq.com/base/fcgi-bin/fcg_music_express_mobile2.fcg', {}, + // ` + // 9070003190 + // 4600100100105 + // 02123456782 + // 352iosM800${id}.mp30 + // `.replace(/\s/, '') + // ) + // .then(response => response.body(true)) + // .then(body => { + // let xml = require('zlib').inflateSync(body.slice(5)).toString() + // let focus = xml.match(/(.+)<\/item>/) + // return `http://streamoc.music.tc.qq.com/${focus[1]}?vkey=${focus[2]}&guid=0&uin=12345678&fromtag=6` + // }) +} + +const check = info => cache(search, info).then(track) + +module.exports = {check, ticket} \ No newline at end of file diff --git a/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/provider/xiami.js b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/provider/xiami.js new file mode 100644 index 000000000..b16919863 --- /dev/null +++ b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/provider/xiami.js @@ -0,0 +1,107 @@ +const cache = require('../cache') +const insure = require('./insure') +const crypto = require('../crypto') +const request = require('../request') + +let headers = { + 'origin': 'http://www.xiami.com/', + 'referer': 'http://www.xiami.com/' +} + +const caesar = pattern => { + let height = parseInt(pattern[0]) + pattern = pattern.slice(1) + let width = Math.ceil(pattern.length / height) + let unpad = height - (width * height - pattern.length) + + let matrix = Array.from(Array(height).keys()).map(i => + pattern.slice(i < unpad ? i * width : unpad * width + (i - unpad) * (width - 1)).slice(0, i < unpad ? width : width - 1) + ) + + let transpose = Array.from(Array(width).keys()).map(x => + Array.from(Array(height).keys()).map(y => matrix[y][x]).join('') + ) + + return unescape(transpose.join('')).replace(/\^/g, '0') +} + +const token = () => { + return request('GET', 'https://www.xiami.com') + .then(response => + response.headers['set-cookie'].map(line => line.replace(/;.+$/, '')).reduce((cookie, line) => { + line = line.split(/\s*=\s*/) + return Object.assign(cookie, {[decodeURIComponent(line[0])]: decodeURIComponent(line[1])}) + }, {}) + ) +} + +const search = info => { + return cache(token) + .then(cookie => { + const query = JSON.stringify({key: info.keyword, pagingVO: {page: 1, pageSize: 60}}) + const message = cookie['xm_sg_tk'].split('_')[0] + '_xmMain_/api/search/searchSongs_' + query + return request('GET', 'https://www.xiami.com/api/search/searchSongs?_q=' + encodeURIComponent(query) + '&_s=' + crypto.md5.digest(message), { + referer: 'https://www.xiami.com/search?key=' + encodeURIComponent(info.keyword), + cookie: Object.keys(cookie).map(key => encodeURIComponent(key) + '=' + encodeURIComponent(cookie[key])).join('; ') + }) + .then(response => response.json()) + .then(jsonBody => { + let matched = jsonBody.result.data.songs[0] + if(matched) + return matched.songId + else + return Promise.reject() + }) + }) +} + +// const search = info => { +// let url = +// 'http://api.xiami.com/web?v=2.0&app_key=1' + +// '&key=' + encodeURIComponent(info.keyword) + '&page=1' + +// '&limit=20&callback=jsonp154&r=search/songs' + +// return request('GET', url, headers) +// .then(response => { +// let jsonBody = JSON.parse(response.body.slice('jsonp154('.length, -')'.length)) +// let matched = jsonBody.data.songs[0] +// if(matched){ +// if(matched.listen_file) +// return matched.listen_file +// else +// return matched.song_id +// } +// else +// return Promise.reject() +// }) +// } + +const track = id => { + let url = + 'https://www.xiami.com/song/playlist/id/' + id + + '/object_name/default/object_id/0/cat/json' + + return request('GET', url, headers) + .then(response => response.json()) + .then(jsonBody => { + if(jsonBody.data.trackList == null){ + return Promise.reject() + } + else{ + let location = jsonBody.data.trackList[0].location + let songUrl = 'http:' + caesar(location) + return songUrl + } + }) + .then(origin => { + let updated = origin.replace('m128', 'm320') + return request('HEAD', updated) + .then(response => response.statusCode == 200 ? updated : origin) + .catch(() => origin) + }) + .catch(() => insure().xiami.track(id)) +} + +const check = info => cache(search, info).then(track) + +module.exports = {check, track} \ No newline at end of file diff --git a/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/request.js b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/request.js new file mode 100644 index 000000000..c3ded51f7 --- /dev/null +++ b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/request.js @@ -0,0 +1,95 @@ +const zlib = require('zlib') +const http = require('http') +const https = require('https') +const parse = require('url').parse + +const translate = host => (global.hosts || {})[host] || host + +const create = url => global.proxy ? (proxy.protocol == 'https:' ? https.request : http.request) : (url.protocol == 'https:' ? https.request : http.request) + +const configure = (method, url, headers) => { + headers = headers || {} + if('content-length' in headers) delete headers['content-length'] + + let options = {} + options._headers = headers + if(global.proxy && url.protocol == 'https:'){ + options.method = 'CONNECT' + options.headers = Object.keys(headers).filter(key => ['host', 'user-agent'].includes(key)).reduce((result, key) => Object.assign(result, {[key]: headers[key]}), {}) + } + else{ + options.method = method + options.headers = headers + } + + if(global.proxy){ + options.hostname = translate(proxy.hostname) + options.port = proxy.port || ((proxy.protocol == 'https:') ? 443 : 80) + options.path = (url.protocol != 'https:') ? ('http://' + translate(url.hostname) + url.path) : (translate(url.hostname) + ':' + (url.port || 443)) + } + else{ + options.hostname = translate(url.hostname) + options.port = url.port || ((url.protocol == 'https:') ? 443 : 80) + options.path = url.path + } + return options +} + +const request = (method, url, headers, body) => { + url = parse(url) + let options = configure(method, url, Object.assign({ + 'host': url.hostname, + 'accept': 'application/json, text/plain, */*', + 'accept-encoding': 'gzip, deflate', + 'accept-language': 'zh-CN,zh;q=0.9', + 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36' + }, headers)) + + return new Promise((resolve, reject) => { + create(url)(options) + .on('response', response => resolve(response)) + .on('connect', (_, socket) => + https.request({ + method: method, + host: translate(url.hostname), + path: url.path, + headers: options._headers, + socket: socket, + agent: false + }) + .on('response', response => resolve(response)) + .on('error', error => reject(error)) + .end(body) + ) + .on('error', error => reject(error)) + .end(body) + }) + .then(response => { + if([201, 301, 302, 303, 307, 308].includes(response.statusCode)) + return request(method, url.resolve(response.headers.location), headers, body) + else + return Object.assign(response, {url: url, body: raw => read(response, raw), json: () => json(response), jsonp: () => jsonp(response)}) + }) +} + +const read = (connect, raw) => new Promise((resolve, reject) => { + let chunks = [] + connect + .on('data', chunk => chunks.push(chunk)) + .on('end', () => { + let buffer = Buffer.concat(chunks) + buffer = (buffer.length && ['gzip', 'deflate'].includes(connect.headers['content-encoding'])) ? zlib.unzipSync(buffer) : buffer + resolve(raw == true ? buffer : buffer.toString()) + }) + .on('error', error => reject(error)) +}) + +const json = connect => read(connect, false).then(body => JSON.parse(body)) +const jsonp = connect => read(connect, false).then(body => JSON.parse(body.slice(body.indexOf('(') + 1, -')'.length))) + +request.read = read +request.create = create +request.translate = translate +request.configure = configure + +module.exports = request \ No newline at end of file diff --git a/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/server.crt b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/server.crt new file mode 100644 index 000000000..b58111aee --- /dev/null +++ b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/server.crt @@ -0,0 +1,21 @@ +-----BEGIN CERTIFICATE----- +MIIDfTCCAmWgAwIBAgIJAKTlW9B59i1HMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNV +BAYTAkNOMSQwIgYDVQQDDBtVbmJsb2NrTmV0ZWFzZU11c2ljIFJvb3QgQ0ExHTAb +BgNVBAoMFEdpdEh1Yi5jb20gQG5vbmRhbmVlMB4XDTE5MDUxODE2MDYxOFoXDTIw +MDUxNzE2MDYxOFowezELMAkGA1UEBhMCQ04xETAPBgNVBAcMCEhhbmd6aG91MSww +KgYDVQQKDCNOZXRFYXNlIChIYW5nemhvdSkgTmV0d29yayBDby4sIEx0ZDERMA8G +A1UECwwISVQgRGVwdC4xGDAWBgNVBAMMDyoubXVzaWMuMTYzLmNvbTCCASIwDQYJ +KoZIhvcNAQEBBQADggEPADCCAQoCggEBALobECypwEoe8VqM/FJvBRR3p2T+ZWdi +MSPrwfiRJr5p7OMtWBlLveCBV85+R3feidYbQTXlvVTdToY+GN6mFE1x6zG2dvLD +s4UuRnipmvGcFYhIRTX8J4AJiN8VMtW0TNXscRMudpz/FAVtsRrggRaThYg4f/rI +oAPMqKMsS4JoYhxs9ED6E6/tpj3XmSg1ekaXhgacYSYHeyxizZwoOFVCLH3TG5sF +sD6CYNnukYol8bR+VRpvHftIYss5Yz+DyyhYEAMJm1CfQo+xoGR3D0ozbT3hUnzm +fEoOhmSp3sALrFVE4iJSuajoh2/3xhmcyi3xZdWyq4F8hpb+URyaoW0CAwEAAaMt +MCswKQYDVR0RBCIwIIINbXVzaWMuMTYzLmNvbYIPKi5tdXNpYy4xNjMuY29tMA0G +CSqGSIb3DQEBCwUAA4IBAQB32SVz5jHUYv3ZG7SNF/LFJ904/LI8QlTe9R+Abb9z +bpXmQeo4pvNNOk3LgcTyuSIPQSHEFn32hk/MedB6Q2cKaGVKQq7Usne1jsV0JirG +wMx3PTcKPnX+XexRY8s6v6cNKSx5YlMQNFeH7p8MgKqdM/UX/dNCxT04X/ClmP1K +/rKqonXn4i3wmWprl7Q7Z1wqt0ygQRkNJKqdYKTu4oQcPON8/dRcseYdJzSoK2/G +H6cOJwKrRLzuUqQlphe6wyUsyTIbIJiFu1a1Gml6zB4lhLZhL89H2lYwdS8wWlc+ +M+wYi+XTM/ylNHEIoKsOe2nscnwi/hTfHJOPPchHbEuM +-----END CERTIFICATE----- diff --git a/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/server.js b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/server.js new file mode 100644 index 000000000..a57e841a5 --- /dev/null +++ b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/server.js @@ -0,0 +1,177 @@ +const fs = require('fs') +const net = require('net') +const path = require('path') +const parse = require('url').parse + +const hook = require('./hook') +const request = require('./request') + +const proxy = { + core: { + mitm: (req, res) => { + if(req.url == '/proxy.pac'){ + let url = parse('http://' + req.headers.host) + res.writeHead(200, {'Content-Type': 'application/x-ns-proxy-autoconfig'}) + res.end(` + function FindProxyForURL(url, host) { + if (${hook.target.host.map(host => (`host == '${host}'`)).join(' || ')}) { + return 'PROXY ${url.hostname}:${url.port || 80}' + } + return 'DIRECT' + } + `) + } + else{ + const ctx = {res, req} + Promise.resolve() + .then(() => proxy.authenticate(ctx)) + .then(() => hook.request.before(ctx)) + .then(() => proxy.filter(ctx)) + .then(() => proxy.log(ctx)) + .then(() => proxy.mitm.request(ctx)) + .then(() => hook.request.after(ctx)) + .then(() => proxy.mitm.response(ctx)) + .catch(() => proxy.mitm.close(ctx)) + } + }, + tunnel: (req, socket, head) => { + const ctx = {req, socket, head} + Promise.resolve() + .then(() => proxy.authenticate(ctx)) + .then(() => hook.connect.before(ctx)) + .then(() => proxy.filter(ctx)) + .then(() => proxy.log(ctx)) + .then(() => proxy.tunnel.connect(ctx)) + .then(() => proxy.tunnel.handshake(ctx)) + .then(() => proxy.tunnel.pipe(ctx)) + .catch(() => proxy.tunnel.close(ctx)) + } + }, + log: ctx => { + const mark = {close: '|', blank: '-', proxy: '>'}[ctx.decision] || '>' + if(ctx.socket) + console.log('TUNNEL', mark, ctx.req.url) + else + console.log('MITM', mark, parse(ctx.req.url).host, ctx.req.socket.encrypted ? '(ssl)' : '') + }, + authenticate: ctx => { + const req = ctx.req + const res = ctx.res + const socket = ctx.socket + let credential = Buffer.from((req.headers['proxy-authorization'] || '').split(/\s+/).pop() || '', 'base64').toString() + if(server.authentication && credential != server.authentication){ + if(socket) + socket.write('HTTP/1.1 407 Proxy Auth Required\r\nProxy-Authenticate: Basic realm="realm"\r\n\r\n') + else + res.writeHead(407, {'proxy-authenticate': 'Basic realm="realm"'}) + return Promise.reject(ctx.error = 'authenticate') + } + }, + filter: ctx => { + const url = parse((ctx.socket ? 'https://' : '') + ctx.req.url) + const match = pattern => url.href.search(new RegExp(pattern, 'g')) != -1 + if(!(ctx.decision || ctx.req.local)){ + try{ + let allow = server.whitelist.some(match) + let deny = server.blacklist.some(match) + // console.log('allow', allow, 'deny', deny) + if(!allow && deny){ + return Promise.reject(ctx.error = 'filter') + } + } + catch(error){ + ctx.error = error + } + } + }, + mitm: { + request: ctx => new Promise((resolve, reject) => { + if(ctx.decision === 'close') return reject(ctx.error = ctx.decision) + const req = ctx.req + const url = parse(req.url) + const options = request.configure(req.method, url, req.headers) + ctx.proxyReq = request.create(url)(options) + .on('response', proxyRes => { + return resolve(ctx.proxyRes = proxyRes) + }) + .on('error', error => { + return reject(ctx.error = error) + }) + req.readable ? req.pipe(ctx.proxyReq) : ctx.proxyReq.end(req.body) + }), + response: ctx => { + const res = ctx.res + const proxyRes = ctx.proxyRes + res.writeHead(proxyRes.statusCode, proxyRes.headers) + proxyRes.readable ? proxyRes.pipe(res) : res.end(proxyRes.body) + }, + close: ctx => { + ctx.res.socket.end() + } + }, + tunnel: { + connect: ctx => new Promise((resolve, reject) => { + if(ctx.decision === 'close') return reject(ctx.error = ctx.decision) + const req = ctx.req + const socket = ctx.socket + const head = ctx.head + const url = parse('https://' + req.url) + socket.on('error', error => { + return reject(ctx.error = error) + }) + if(global.proxy && !req.local){ + const options = request.configure(req.method, url, req.headers) + request.create(proxy)(options) + .on('connect', (_, proxySocket) => { + return resolve(ctx.proxySocket = proxySocket) + }) + .on('error', error => { + return reject(ctx.error = error) + }) + .end() + } + else{ + const proxySocket = net.connect(url.port || 443, request.translate(url.hostname)) + .on('connect', () => { + proxySocket.write(head) + return resolve(ctx.proxySocket = proxySocket) + }) + .on('error', error => { + return reject(ctx.error = error) + }) + } + }), + handshake: ctx => { + const req = ctx.req + const socket = ctx.socket + const message = `HTTP/${req.httpVersion} 200 Connection established\r\n\r\n` + socket.write(message) + }, + pipe: ctx => new Promise((resolve, reject) => { + if(ctx.decision === 'blank') return reject(ctx.error = ctx.decision) + const socket = ctx.socket + const proxySocket = ctx.proxySocket + socket.pipe(proxySocket) + proxySocket.pipe(socket) + }), + close: ctx => { + ctx.socket.end() + } + } +} + +const options = { + key: fs.readFileSync(path.join(__dirname, 'server.key')), + cert: fs.readFileSync(path.join(__dirname, 'server.crt')) +} + +const server = { + http: require('http').createServer().on('request', proxy.core.mitm).on('connect', proxy.core.tunnel), + https: require('https').createServer(options).on('request', proxy.core.mitm).on('connect', proxy.core.tunnel) +} + +server.whitelist = [] +server.blacklist = ['//127\.\d+\.\d+\.\d+', '//localhost'] +server.authentication = null + +module.exports = server \ No newline at end of file diff --git a/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/server.key b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/server.key new file mode 100644 index 000000000..ce16c73ad --- /dev/null +++ b/package/lean/luci-app-unblockmusic/root/usr/share/unblockmusic/server.key @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEowIBAAKCAQEAuhsQLKnASh7xWoz8Um8FFHenZP5lZ2IxI+vB+JEmvmns4y1Y +GUu94IFXzn5Hd96J1htBNeW9VN1Ohj4Y3qYUTXHrMbZ28sOzhS5GeKma8ZwViEhF +NfwngAmI3xUy1bRM1exxEy52nP8UBW2xGuCBFpOFiDh/+sigA8yooyxLgmhiHGz0 +QPoTr+2mPdeZKDV6RpeGBpxhJgd7LGLNnCg4VUIsfdMbmwWwPoJg2e6RiiXxtH5V +Gm8d+0hiyzljP4PLKFgQAwmbUJ9Cj7GgZHcPSjNtPeFSfOZ8Sg6GZKnewAusVUTi +IlK5qOiHb/fGGZzKLfFl1bKrgXyGlv5RHJqhbQIDAQABAoIBAEmAvtalBMlBh1mY +LV/xcTQwPfDpeOtoILhrOOUPjxnNhD4FfrIe9BNjgmaQAXIadp4VjZ/X6PtHnOfw +RqpJNeOQhq/PvRMMsC59pF+rvQKH/wkgYhV8Ta2IFoLlQHqfB2nGRLKquzYumJ28 +QSK4YMOl6CtxBTrrWiemAUTRDdGm8tARiipJH1SEJrS6d/NoRoJx2vixFgD2eS6X +bjnhGjIzvX/w5FWjctqj+SFITP1UI62b6DyWsPOkoosKNteK+Ulz+K6ZFvOx7day +XgUoTcVpwCVr2dVGhJtOrbKPcl1jYCYHJAHwzUZND4x4yftm1mnnsi3bthYqbtHQ +vxLE9YECgYEA9hiZxwiVvLjSe1xT/D75HbB8S1XSnwzpMmqgzStguxCQ0Qg5yiLI +UKRDY8UZvEDV4i2bQGy7mk8lFvX1q2z7Q30+dtT9r2N9a6ujMk5RMfo2BZg/poI6 +yDWe2tKUg9cTwfgni4TutLOYkpz3VDPIQHs3k2mpNh7f+8X4RIybDqkCgYEAwZhp +uWMV38Bb0WytswHXL1dRuwBskKqALUBY61dtXkyBuocj8AuRRxfxfZpgJRrHFxDX +O9bQ2nxpVlwKsR6DJDUdxU3+kvwyPfseU5XUBey8WdkuAKD7cKZOHMhFVWccks0U +YJzykNrxB+rGTiwVKa0MOhipuJ7boerwwaN2SyUCgYBP9Ow5o4tq9q3EUNoksZ0k +zUuE+oxlCr/VlplKL9bM0HQMxlxoVWa59LTEfKyA4pvbUbAIfYtydlZ5oE5CdTUp +105tM4R88Jk2W1y5ooJ093OH29CKW/OXSvyi4hpIv592vRa0GOupoFRpBkDBhdWB +RcdnyMOmht+FIOwp8XkLiQKBgAUK3j4Y6ZnxXbLfvMp70soF4TgYs7s05a/IDEjc +9xlMrthX6sS22GrcocqeucBdqS/dnW2Ok9QNB4VbUl/4pnvL8mGQPYBAl2Jr5wdQ +ULxyxRkmAf+8MbBmdIRlZwDpdaIRO2Wk0OCbA0osgEvK9CYovrfIqqsHYDsgbnLs +ugkNAoGBAJok06BN05caPXXLQ2pMwI/7mjcZFjcOMxSloYi7LFkxlyvoTqReAeSa +yOb6W/7obS1X8ms/EAkqiyzJuPtNZJCW/nvV0iCoZ/NxLuyHnFaO344GBAweol+S +Jx0MY8KuDCyeGErc2xdz/yr3ld2PSTq71dhBluGyba2YX+peJ2Yv +-----END RSA PRIVATE KEY----- diff --git a/package/lean/luci-app-unblockmusic/views/views1.jpg b/package/lean/luci-app-unblockmusic/views/views1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8a428e96064d34bdbf446cfa8faa3ee5abf80019 GIT binary patch literal 116213 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 literal 0 HcmV?d00001 diff --git a/package/lean/luci-app-unblockmusic/views/views2.jpg b/package/lean/luci-app-unblockmusic/views/views2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a36e259264d7d945b959fb8cab8bc4ba356549e8 GIT binary patch literal 215856 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 `f(RgO3%rDHo6BN}mmw%UsIV`{jMJ`O#d~ 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 z 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