2020-07-02 11:50:39 +08:00
const chavy = init ( )
const cookieName = 'CSDN'
const KEY _loginurl = 'chavy_tokenurl_csdn'
const KEY _loginheader = 'chavy_tokenheader_csdn'
const KEY _signurl = 'chavy_signurl_csdn'
const KEY _signheader = 'chavy_signheader_csdn'
const signinfo = { }
let VAL _loginurl = chavy . getdata ( KEY _loginurl )
let VAL _loginheader = chavy . getdata ( KEY _loginheader )
let VAL _signurl = chavy . getdata ( KEY _signurl )
let VAL _signheader = chavy . getdata ( KEY _signheader )
; ( sign = async ( ) => {
2020-07-02 11:52:57 +08:00
chavy . log ( ` 🔔 ${ cookieName } ` )
await loginapp ( )
await signapp ( )
await getlucky ( )
for ( let i = 0 ; i < signinfo . lucky . data . drawTimes ; i ++ ) {
await luckyapp ( )
}
showmsg ( )
chavy . done ( )
2020-07-02 11:50:39 +08:00
} ) ( ) . catch ( ( e ) => chavy . log ( ` ❌ ${ cookieName } 签到失败: ${ e } ` ) , chavy . done ( ) )
function loginapp ( ) {
2020-07-02 11:52:57 +08:00
return new Promise ( ( resolve , reject ) => {
const url = { url : VAL _loginurl , headers : JSON . parse ( VAL _loginheader ) }
chavy . get ( url , ( error , response , data ) => {
try {
signinfo . loginapp = JSON . parse ( data )
updateSignAppCookies ( )
resolve ( )
} catch ( e ) {
chavy . msg ( cookieName , ` 登录结果: 失败 ` , ` 说明: ${ e } ` )
chavy . log ( ` ❌ ${ cookieName } loginapp - 登录失败: ${ e } ` )
chavy . log ( ` ❌ ${ cookieName } loginapp - response: ${ JSON . stringify ( response ) } ` )
resolve ( )
}
} )
2020-07-02 11:50:39 +08:00
} )
}
function updateSignAppCookies ( ) {
2020-07-02 11:52:57 +08:00
if ( signinfo . loginapp ) {
const signheaderObj = JSON . parse ( VAL _signheader )
signheaderObj [ 'JWT-TOKEN' ] = signinfo . loginapp . data . token
signheaderObj [ 'Cookie' ] = signheaderObj [ 'Cookie' ] . replace ( /JWT-TOKEN=[^;]*/ , ` JWT-TOKEN= ${ signinfo . loginapp . data . token } ` )
VAL _signheader = JSON . stringify ( signheaderObj )
} else {
chavy . log ( ` ⚠ ${ cookieName } updateSignAppCookies: 请先获取 Cookies ` )
}
2020-07-02 11:50:39 +08:00
}
function signapp ( ) {
2020-07-02 11:52:57 +08:00
return new Promise ( ( resolve , reject ) => {
const url = { url : VAL _signurl , body : '{}' , headers : JSON . parse ( VAL _signheader ) }
chavy . post ( url , ( error , response , data ) => {
try {
signinfo . signapp = JSON . parse ( data )
resolve ( )
} catch ( e ) {
chavy . msg ( cookieName , ` 签到结果: 失败 ` , ` 说明: ${ e } ` )
chavy . log ( ` ❌ ${ cookieName } signapp - 签到失败: ${ e } ` )
chavy . log ( ` ❌ ${ cookieName } signapp - response: ${ JSON . stringify ( response ) } ` )
resolve ( )
}
} )
2020-07-02 11:50:39 +08:00
} )
}
function getlucky ( ) {
2020-07-02 11:52:57 +08:00
return new Promise ( ( resolve , reject ) => {
const VAL _getluckyurl = ` https://gw.csdn.net/mini-app/v2/lucky_draw/login/sign_info?projectVersion=1.0.0 `
const url = { url : VAL _getluckyurl , headers : JSON . parse ( VAL _signheader ) }
delete url . headers [ 'Content-Length' ]
url . headers [ 'Connection' ] = 'keep-alive'
url . headers [ 'Accept-Encoding' ] = 'gzip, deflate, br'
url . headers [ 'X-OS' ] = 'iOS'
url . headers [ 'Content-Type' ] = 'application/json'
url . headers [ 'X-App-ID' ] = 'CSDN-APP'
url . headers [ 'Origin' ] = 'https://webapp.csdn.net'
url . headers [ 'User-Agent' ] = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 CSDNApp/4.1.5(iOS) AnalysysAgent/Hybrid'
url . headers [ 'Referer' ] = 'https://webapp.csdn.net/'
url . headers [ 'Host' ] = 'gw.csdn.net'
url . headers [ 'Accept-Language' ] = 'zh-cn'
url . headers [ 'Accept' ] = '*/*'
2020-07-02 11:50:39 +08:00
2020-07-02 11:52:57 +08:00
chavy . get ( url , ( error , response , data ) => {
try {
signinfo . lucky = JSON . parse ( data )
resolve ( )
} catch ( e ) {
chavy . msg ( cookieName , ` 获取抽奖次数: 失败 ` , ` 说明: ${ e } ` )
chavy . log ( ` ❌ ${ cookieName } getlucky - 获取抽奖次数失败: ${ e } ` )
chavy . log ( ` ❌ ${ cookieName } getlucky - response: ${ JSON . stringify ( response ) } ` )
resolve ( )
}
} )
2020-07-02 11:50:39 +08:00
} )
}
function luckyapp ( ) {
2020-07-02 11:52:57 +08:00
return new Promise ( ( resolve , reject ) => {
const VAL _luckyappurl = ` https://gw.csdn.net/mini-app/v2/lucky_draw/login/good_luck?projectVersion=1.0.0 `
const url = { url : VAL _luckyappurl , body : '{}' , headers : JSON . parse ( VAL _signheader ) }
url . headers [ 'Connection' ] = 'keep-alive'
url . headers [ 'Accept-Encoding' ] = 'gzip, deflate, br'
url . headers [ 'X-OS' ] = 'iOS'
url . headers [ 'Content-Type' ] = 'application/json'
url . headers [ 'X-App-ID' ] = 'CSDN-APP'
url . headers [ 'Origin' ] = 'https://webapp.csdn.net'
url . headers [ 'User-Agent' ] = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 CSDNApp/4.1.5(iOS) AnalysysAgent/Hybrid'
url . headers [ 'Referer' ] = 'https://webapp.csdn.net/'
url . headers [ 'Host' ] = 'gw.csdn.net'
url . headers [ 'Accept-Language' ] = 'zh-cn'
url . headers [ 'Accept' ] = '*/*'
chavy . post ( url , ( error , response , data ) => {
try {
chavy . log ( ` ❕ ${ cookieName } luckyapp - response: ${ JSON . stringify ( response ) } ` )
signinfo . luckylist = signinfo . luckylist ? signinfo . luckylist : [ ]
signinfo . luckylist . push ( JSON . parse ( data ) )
resolve ( )
} catch ( e ) {
chavy . msg ( cookieName , ` 抽奖结果: 失败 ` , ` 说明: ${ e } ` )
chavy . log ( ` ❌ ${ cookieName } luckyapp - 抽奖失败: ${ e } ` )
chavy . log ( ` ❌ ${ cookieName } luckyapp - response: ${ JSON . stringify ( response ) } ` )
resolve ( )
}
} )
2020-07-02 11:50:39 +08:00
} )
}
function showmsg ( ) {
2020-07-02 11:52:57 +08:00
let subTitle = ''
let detail = ''
if ( signinfo . signapp . code == 200 ) {
if ( signinfo . signapp . data . isSigned === false ) {
subTitle = ` 签到结果: 成功 `
detail = ` 共签: ${ signinfo . signapp . data . totalCount } 天, 连签: ${ signinfo . signapp . data . keepCount } 天 `
} else if ( signinfo . signapp . data . isSigned === true ) {
subTitle = ` 签到结果: 重复 `
} else {
subTitle = ` 签到结果: 失败 `
detail = ` 编码: ${ signinfo . signapp . code } , 说明: ${ signinfo . signapp . msg } `
}
2020-07-02 11:50:39 +08:00
} else {
2020-07-02 11:52:57 +08:00
subTitle = ` 签到结果: 失败 `
detail = ` 说明: 详见日志 `
2020-07-02 11:50:39 +08:00
}
2020-07-02 11:52:57 +08:00
if ( signinfo . lucky && signinfo . lucky . data && signinfo . lucky . data . drawTimes && signinfo . lucky . data . drawTimes > 0 ) {
subTitle += ` ; 抽奖次数: ${ signinfo . lucky . data . drawTimes } `
detail += ` \n 查看抽奖详情 \n `
for ( let i = 0 ; i < signinfo . luckylist . length ; i ++ ) {
const can _draw = signinfo . luckylist [ i ] . data . can _draw
if ( can _draw ) detail += ` \n 抽奖 ${ i + 1 } : ${ signinfo . luckylist [ i ] . data . title } `
else detail += ` \n 抽奖 ${ i + 1 } : ${ signinfo . luckylist [ i ] . data . msg } `
}
2020-07-02 11:50:39 +08:00
}
2020-07-02 11:52:57 +08:00
chavy . msg ( cookieName , subTitle , detail )
2020-07-02 11:50:39 +08:00
}
function init ( ) {
2020-07-02 11:52:57 +08:00
isSurge = ( ) => {
return undefined === this . $httpClient ? false : true
}
isQuanX = ( ) => {
return undefined === this . $task ? false : true
}
getdata = ( key ) => {
if ( isSurge ( ) ) return $persistentStore . read ( key )
if ( isQuanX ( ) ) return $prefs . valueForKey ( key )
}
setdata = ( key , val ) => {
if ( isSurge ( ) ) return $persistentStore . write ( key , val )
if ( isQuanX ( ) ) return $prefs . setValueForKey ( key , val )
}
msg = ( title , subtitle , body ) => {
if ( isSurge ( ) ) $notification . post ( title , subtitle , body )
if ( isQuanX ( ) ) $notify ( title , subtitle , body )
2020-07-02 11:50:39 +08:00
}
2020-07-02 11:52:57 +08:00
log = ( message ) => console . log ( message )
get = ( url , cb ) => {
if ( isSurge ( ) ) {
$httpClient . get ( url , cb )
}
if ( isQuanX ( ) ) {
url . method = 'GET'
$task . fetch ( url ) . then ( ( resp ) => cb ( null , resp , resp . body ) )
}
2020-07-02 11:50:39 +08:00
}
2020-07-02 11:52:57 +08:00
post = ( url , cb ) => {
if ( isSurge ( ) ) {
$httpClient . post ( url , cb )
}
if ( isQuanX ( ) ) {
url . method = 'POST'
$task . fetch ( url ) . then ( ( resp ) => cb ( null , resp , resp . body ) )
}
2020-07-02 11:50:39 +08:00
}
2020-07-02 11:52:57 +08:00
done = ( value = { } ) => {
$done ( value )
2020-07-02 11:50:39 +08:00
}
2020-07-02 11:52:57 +08:00
return { isSurge , isQuanX , msg , log , getdata , setdata , get , post , done }
2020-07-02 11:50:39 +08:00
}