doc.md 3.0 KB

猜测:

流程
    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)记录,