From be5abcc0ba951757d015d10ce3a5358bca87afd4 Mon Sep 17 00:00:00 2001 From: klever1988 <56048681+klever1988@users.noreply.github.com> Date: Tue, 30 Mar 2021 00:42:45 +0800 Subject: [PATCH] luci-app-xlnetacc: update to 1.0.5 Signed-off-by: Tianling Shen --- package/lean/luci-app-xlnetacc/Makefile | 4 +- .../luasrc/model/cbi/xlnetacc.lua | 15 +++ .../luci-app-xlnetacc/po/zh_Hans/xlnetacc.po | 15 +++ .../root/usr/bin/xlnetacc.sh | 118 ++++++++++++------ 4 files changed, 111 insertions(+), 41 deletions(-) diff --git a/package/lean/luci-app-xlnetacc/Makefile b/package/lean/luci-app-xlnetacc/Makefile index 72591b624a..13c60cf0ed 100644 --- a/package/lean/luci-app-xlnetacc/Makefile +++ b/package/lean/luci-app-xlnetacc/Makefile @@ -1,8 +1,8 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-xlnetacc -PKG_VERSION:=1.0.3 -PKG_RELEASE:=9 +PKG_VERSION:=1.0.5 +PKG_RELEASE:=2 PKG_LICENSE:=GPLv2 PKG_MAINTAINER:=Sense diff --git a/package/lean/luci-app-xlnetacc/luasrc/model/cbi/xlnetacc.lua b/package/lean/luci-app-xlnetacc/luasrc/model/cbi/xlnetacc.lua index 9bef249ce9..bdab819291 100644 --- a/package/lean/luci-app-xlnetacc/luasrc/model/cbi/xlnetacc.lua +++ b/package/lean/luci-app-xlnetacc/luasrc/model/cbi/xlnetacc.lua @@ -28,6 +28,21 @@ uci:foreach("network", "interface", function(section) end end) +o = s:option(Value, "keepalive", translate("Keepalive interval"), "5-60 " .. translate("minutes")) +for _, v in ipairs({5, 10, 20, 30, 60}) do + o:value(v, v .. " " .. translate("minutes")) +end +o.datatype = "range(5, 60)" +o.default = 10 + +o = s:option(Value, "relogin", translate("Account relogin"), "1-48 " .. translate("hours")) +o:value(0, translate("Not enabled")) +for _, v in ipairs({3, 12, 18, 24, 30}) do + o:value(v, v .. " " .. translate("hours")) +end +o.datatype = "max(48)" +o.default = 0 + o = s:option(Value, "account", translate("XLNetAcc account")) o = s:option(Value, "password", translate("XLNetAcc password")) diff --git a/package/lean/luci-app-xlnetacc/po/zh_Hans/xlnetacc.po b/package/lean/luci-app-xlnetacc/po/zh_Hans/xlnetacc.po index 6f8f0af8f3..a32f1d2927 100644 --- a/package/lean/luci-app-xlnetacc/po/zh_Hans/xlnetacc.po +++ b/package/lean/luci-app-xlnetacc/po/zh_Hans/xlnetacc.po @@ -65,6 +65,21 @@ msgstr "启用详细日志" msgid "Upgrade interface" msgstr "指定提速接口" +msgid "Keepalive interval" +msgstr "保持连接周期" + +msgid "Account relogin" +msgstr "帐号重新登录" + +msgid "Not enabled" +msgstr "未启用" + +msgid "minutes" +msgstr "分钟" + +msgid "hours" +msgstr "小时" + msgid "XLNetAcc account" msgstr "迅雷快鸟帐号" diff --git a/package/lean/luci-app-xlnetacc/root/usr/bin/xlnetacc.sh b/package/lean/luci-app-xlnetacc/root/usr/bin/xlnetacc.sh index 57fac717aa..16c56684c1 100755 --- a/package/lean/luci-app-xlnetacc/root/usr/bin/xlnetacc.sh +++ b/package/lean/luci-app-xlnetacc/root/usr/bin/xlnetacc.sh @@ -2,12 +2,12 @@ # 声明常量 readonly packageName='com.xunlei.vip.swjsq' -readonly protocolVersion=200 +readonly protocolVersion=300 readonly businessType=68 -readonly sdkVersion='2.1.1.177662' -readonly clientVersion='2.4.1.3' -readonly agent_xl="android-async-http/xl-acc-sdk/version-$sdkVersion" -readonly agent_down='okhttp/3.4.1' +readonly sdkVersion='3.1.2.185150' +readonly clientVersion='2.7.2.0' +readonly agent_xl="android-ok-http-client/xl-acc-sdk/version-$sdkVersion" +readonly agent_down='okhttp/3.9.1' readonly agent_up='android-async-http/xl-acc-sdk/version-1.0.0.1' readonly client_type_down='android-swjsq' readonly client_type_up='android-uplink' @@ -53,11 +53,9 @@ uci_get_by_bool() { # 日志和状态栏输出。1 日志文件, 2 系统日志, 4 详细模式, 8 下行状态栏, 16 上行状态栏, 32 失败状态 _log() { - local msg=$1 - local flag=$2 + local msg=$1 flag=$2 timestamp=$(date +'%Y/%m/%d %H:%M:%S') [ -z "$msg" ] && return [ -z "$flag" ] && flag=1 - local timestamp=$(date +'%Y/%m/%d %H:%M:%S') [ $logging -eq 0 -a $(( $flag & 1 )) -ne 0 ] && flag=$(( $flag ^ 1 )) if [ $verbose -eq 0 -a $(( $flag & 4 )) -ne 0 ]; then @@ -145,14 +143,16 @@ swjsq_json() { json_init json_add_string protocolVersion "$protocolVersion" json_add_string sequenceNo "$sequence_xl" - json_add_string platformVersion '2' + json_add_string platformVersion '10' json_add_string isCompressed '0' - json_add_string businessType "$businessType" + json_add_string appid "$businessType" json_add_string clientVersion "$clientVersion" json_add_string peerID "$_peerid" json_add_string appName "ANDROID-$packageName" json_add_string sdkVersion "${sdkVersion##*.}" json_add_string devicesign "$_devicesign" + json_add_string netWorkType 'WIFI' + json_add_string providerName 'OTHER' json_add_string deviceModel 'MI' json_add_string deviceName 'Xiaomi Mi' json_add_string OSVersion "7.1.1" @@ -167,6 +167,7 @@ swjsq_login() { json_add_string passWord "$password" json_add_string verifyKey json_add_string verifyCode + json_add_string isMd5Pwd '0' else access_url='https://mobile-login.xunlei.com/loginkey' json_add_string userName "$_userid" @@ -240,7 +241,8 @@ swjsq_logout() { # 获取用户信息 swjsq_getuserinfo() { - [ $1 -eq 1 ] && local _vasid=14 || local _vasid=33 + local _vasid vasid_down=14 vasid_up=33 outmsg + [ $down_acc -ne 0 ] && _vasid="${_vasid}${vasid_down},"; [ $up_acc -ne 0 ] && _vasid="${_vasid}${vasid_up}," swjsq_json json_add_string userID "$_userid" json_add_string sessionID "$_sessionid" @@ -248,17 +250,16 @@ swjsq_getuserinfo() { json_close_object local ret=$($_http_cmd --user-agent="$agent_xl" 'https://mobile-login.xunlei.com/getuserinfo' --post-data="$(json_dump)") - _log "getuserinfo $1 is $ret" $(( 1 | 4 )) + _log "getuserinfo is $ret" $(( 1 | 4 )) json_cleanup; json_load "$ret" >/dev/null 2>&1 json_get_var lasterr "errorCode" - [ $1 -eq 1 ] && local outmsg="下行提速会员" || local outmsg="上行提速会员" case ${lasterr:=-1} in 0) - local index vasid isVip isYear expireDate can_upgrade + local index=1 can_down=0 vasid isVip isYear expireDate json_select "vipList" >/dev/null 2>&1 while : ; do - json_select ${index:=1} >/dev/null 2>&1 + json_select $index >/dev/null 2>&1 [ $? -ne 0 ] && break json_get_var vasid "vasid" json_get_var isVip "isVip" @@ -266,28 +267,59 @@ swjsq_getuserinfo() { json_get_var expireDate "expireDate" json_select ".." >/dev/null 2>&1 let index++ - ([ $1 -eq 1 -a ${vasid:-0} -eq 2 ] || [ ${vasid:-0} -eq $_vasid ]) && \ - [ ${isVip:-0} -eq 1 -o ${isYear:-0} -eq 1 ] && { can_upgrade=1; break; } - done - if [ ${can_upgrade:-0} -eq 1 ]; then - outmsg="获取${outmsg}信息成功。会员到期时间:${expireDate:0:4}-${expireDate:4:2}-${expireDate:6:2}"; \ - _log "$outmsg" $(( 1 | $1 * 8 )) - else - if [ ${#expireDate} -ge 8 ]; then - outmsg="${outmsg}已到期。会员到期时间:${expireDate:0:4}-${expireDate:4:2}-${expireDate:6:2}" + case ${vasid:-0} in + 2) [ $down_acc -ne 0 ] && outmsg="迅雷超级会员" || continue;; + $vasid_down) outmsg="迅雷快鸟会员";; + $vasid_up) outmsg="上行提速会员";; + *) continue;; + esac + if [ ${isVip:-0} -eq 1 -o ${isYear:-0} -eq 1 ]; then + outmsg="${outmsg}有效。会员到期时间:${expireDate:0:4}-${expireDate:4:2}-${expireDate:6:2}" + [ $vasid -eq $vasid_up ] && _log "$outmsg" $(( 1 | 16 )) || _log "$outmsg" $(( 1 | 8 )) + [ $vasid -ne $vasid_up ] && can_down=$(( $can_down | 1 )) else - outmsg="${outmsg}无效" + if [ ${#expireDate} -ge 8 ]; then + outmsg="${outmsg}已到期。会员到期时间:${expireDate:0:4}-${expireDate:4:2}-${expireDate:6:2}" + else + outmsg="${outmsg}无效" + fi + [ $vasid -eq $vasid_up ] && _log "$outmsg" $(( 1 | 16 | 32 )) || _log "$outmsg" $(( 1 | 8 | 32 )) + [ $vasid -eq $vasid_up ] && up_acc=0 fi - _log "$outmsg" $(( 1 | $1 * 8 | 32 )) - [ $1 -eq 1 ] && down_acc=0 || up_acc=0 - fi + done + [ $can_down -eq 0 ] && down_acc=0 ;; -1) - outmsg="获取${outmsg}信息失败。迅雷服务器未响应,请稍候"; _log "$outmsg";; + outmsg="获取迅雷会员信息失败。迅雷服务器未响应,请稍候"; _log "$outmsg";; *) local errorDesc; json_get_var errorDesc "errorDesc" - outmsg="获取${outmsg}信息失败。错误代码: ${lasterr}"; \ - [ -n "$errorDesc" ] && outmsg="${outmsg},原因: $errorDesc"; _log "$outmsg" $(( 1 | $1 * 8 | 32 ));; + outmsg="获取迅雷会员信息失败。错误代码: ${lasterr}"; \ + [ -n "$errorDesc" ] && outmsg="${outmsg},原因: $errorDesc"; _log "$outmsg" $(( 1 | 8 | 32 ));; + esac + + [ $lasterr -eq 0 ] && return 0 || return 1 +} + +# 登录时间更新 +swjsq_renewal() { + xlnetacc_var 1 + local limitdate=$(date +%Y%m%d -d "1970.01.01-00:00:$(( $(date +%s) + 30 * 24 * 60 * 60 ))") + + access_url='http://api.ext.swjsq.vip.xunlei.com' + local ret=$($_http_cmd --user-agent="$user_agent" "$access_url/renewal?${http_args%&dial_account=*}&limitdate=$limitdate") + _log "renewal is $ret" $(( 1 | 4 )) + json_cleanup; json_load "$ret" >/dev/null 2>&1 + json_get_var lasterr "errno" + + case ${lasterr:=-1} in + 0) + local outmsg="更新登录时间成功。帐号登录展期:${limitdate:0:4}-${limitdate:4:2}-${limitdate:6:2}"; _log "$outmsg";; + -1) + local outmsg="更新登录时间失败。迅雷服务器未响应,请稍候"; _log "$outmsg";; + *) + local message; json_get_var message "richmessage" + local outmsg="更新登录时间失败。错误代码: ${lasterr}"; \ + [ -n "$message" ] && outmsg="${outmsg},原因: $message"; _log "$outmsg" $(( 1 | 8 | 32 ));; esac [ $lasterr -eq 0 ] && return 0 || return 1 @@ -354,8 +386,8 @@ isp_bandwidth() { json_select; json_select "max_bandwidth" >/dev/null 2>&1 json_get_var max_bandwidth "$stream" json_select - cur_bandwidth=$(expr ${cur_bandwidth:-0} / 1024) - max_bandwidth=$(expr ${max_bandwidth:-0} / 1024) + cur_bandwidth=$(( ${cur_bandwidth:-0} / 1024 )) + max_bandwidth=$(( ${max_bandwidth:-0} / 1024 )) if [ -n "$bind_dial_account" -a "$bind_dial_account" != "$dial_account" ]; then local outmsg="绑定宽带账号 $bind_dial_account 与当前宽带账号 $dial_account 不一致,请联系迅雷客服解绑(每月仅一次)"; \ @@ -510,7 +542,7 @@ xlnetacc_var() { let sequence_up++ access_url=$_portal_up http_args="sequence=${sequence_up}&client_type=${client_type_up}-${clientVersion}&client_version=${client_type_up//-/}-${clientVersion}" - user_agent=$agent_up + user_agent=$agent_down link_cn="上行" fi http_args="${http_args}&peerid=${_peerid}&userid=${_userid}&sessionid=${_sessionid}&user_type=1&os=android-7.1.1" @@ -581,10 +613,16 @@ xlnetacc_init() { readonly logging=$(uci_get_by_bool "general" "logging" 1) readonly verbose=$(uci_get_by_bool "general" "verbose" 0) network=$(uci_get_by_name "general" "network" "wan") + keepalive=$(uci_get_by_name "general" "keepalive" 10) + relogin=$(uci_get_by_name "general" "relogin" 0) readonly username=$(uci_get_by_name "general" "account") readonly password=$(uci_get_by_name "general" "password") local enabled=$(uci_get_by_bool "general" "enabled" 0) ([ $enabled -eq 0 ] || [ $down_acc -eq 0 -a $up_acc -eq 0 ] || [ -z "$username" -o -z "$password" -o -z "$network" ]) && return 2 + ([ -z "$keepalive" -o -n "${keepalive//[0-9]/}" ] || [ $keepalive -lt 5 -o $keepalive -gt 60 ]) && keepalive=10 + readonly keepalive=$(( $keepalive )) + ([ -z "$relogin" -o -n "${relogin//[0-9]/}" ] || [ $relogin -gt 48 ]) && relogin=0 + readonly relogin=$(( $relogin * 60 * 60 )) [ $logging -eq 1 ] && [ ! -d /var/log ] && mkdir -p /var/log [ -f "$LOGFILE" ] && _log "------------------------------" @@ -606,6 +644,7 @@ xlnetacc_init() { clean_log [ -d /var/state ] || mkdir -p /var/state + rm -f "$down_state_file" "$up_state_file" return 0 } @@ -636,9 +675,10 @@ xlnetacc_main() { done # 获取用户信息 - xlnetacc_retry 'swjsq_getuserinfo' 1 1 - xlnetacc_retry 'swjsq_getuserinfo' 2 1 + xlnetacc_retry 'swjsq_getuserinfo' [ $down_acc -eq 0 -a $up_acc -eq 0 ] && break + # 登录时间更新 + xlnetacc_retry 'swjsq_renewal' # 获取提速入口 xlnetacc_retry 'swjsq_portal' 1 1 xlnetacc_retry 'swjsq_portal' 2 1 @@ -651,11 +691,11 @@ xlnetacc_main() { xlnetacc_retry 'isp_upgrade' 2 1 10 || { sleep 3m; continue; } # 心跳保持 -# local retry=1 + local timer=$(date +%s) while : ; do clean_log # 清理日志 - sleep 10m -# [ $retry -ge 144 ] && break || let retry++ # 心跳最多保持24小时,144=24*60/10 + sleep ${keepalive}m + [ $relogin -ne 0 -a $(( $(date +%s) - $timer )) -ge $relogin ] && break # 登录超时 xlnetacc_retry 'isp_keepalive' 1 2 5 || break xlnetacc_retry 'isp_keepalive' 2 2 5 || break done