猜测:
流程
1. account.bnet.163
url: https://account.bnet.163.com/battlenet/login?inner_client_id=ow&inner_redirect_uri=http%3A%2F%2Fow.blizzard.cn%2Fbattlenet%2Flogin%3Fredirect_url%3Dhttp%253A%252F%252Fow.blizzard.cn%252Fcareer%252F
cookies: MTK_BBID, _ntes_nuid
2. 被forward到oauth
url: https://www.battlenet.com.cn/oauth/authorize?client_id=netease-hearthstone-site&response_type=code&scope=account.basic+account.full&redirect_uri=https%3A%2F%2Faccount.bnet.163.com%2Fbattlenet%2Flogin%3Finner_client_id%3Dow%26inner_redirect_uri%3Dhttp%253A%252F%252Fow.blizzard.cn%252Fbattlenet%252Flogin%253Fredirect_url%253Dhttp%25253A%25252F%25252Fow.blizzard.cn%25252Fcareer%25252F
cookies: BA-tessadar-login.key, login.key, opt, web.inner_client_id
此时被set-cookie
loginChecked=1
3. bnet.com.cn/login
url: https://www.battlenet.com.cn/login/en/?ref=https://www.battlenet.com.cn/oauth/authorize?client_id%3Dnetease-hearthstone-site%26response_type%3Dcode%26scope%3Daccount.basic%2Baccount.full%26redirect_uri%3Dhttps%253A%252F%252Faccount.bnet.163.com%252Fbattlenet%252Flogin%253Finner_client_id%253Dow%2526inner_redirect_uri%253Dhttp%25253A%25252F%25252Fow.blizzard.cn%25252Fbattlenet%25252Flogin%25253Fredirect_url%25253Dhttp%2525253A%2525252F%2525252Fow.blizzard.cn%2525252Fcareer%2525252F&app=oauth&opt
cookies: BA-tassadar, bnet.extra (path=/login)
同时被set-cookies:
BA-tassadar
BA-tassadar-cl
cl
BA-tassadar-login.key
login.key
opt=1
4. 被返回到oauth, params里携带了ST, 被set-cookies JSESSIONID
5. 被返回到oauth, 在redirect中添加了code
6. 被返回到account.bnet, 在携带code时被set-cookies
MTK_BBID
account_user_cred
同时加上了inner code
7. 返回ow.bnet, 以及innercode, 被设了bnet_user_cred和battletag, 一小时后过期
结构:
User -> Denotes a user / maybe a bnet ID or just a user
See further iteration
本质上是user collection里的一条唯一记录
以插件的方式来做一些交互
以线程/协程的方式跑起来
Profile: 用来做信息的获取, format 和比较的结构
LatestProfile: 简单的handle, 用以取数据库中最新的Profile
NewProfile: 用以取最新接口获取回来的Profile
CredentialManager: 管理登录时的cred及其更新
Updator: 完成具体的更新逻辑 (可能在User的上层), 并且更新完成后调用相关其他Plugin的callback
Stats: 统计更新发生后的数据变动 (分数变动等细节计算)
如何完成第一次初始化?
Updator中定义细节逻辑: 在某个时间后, 获取LatestProfile和NewProfile, 做比较, 决定是否更新数据库, 并将比较结果给Stats(作为Stats)记录,