Exemplo n.º 1
0
        /// <summary>
        /// 刷新令牌
        /// </summary>
        /// <returns></returns>
        public async Task <bool> RefreshTokenAsync()
        {
            try
            {
                var param = $"access_token={_accessToken}&refresh_token={_refreshToken}&appkey={BiliTool.AndroidKey.Appkey}&ts={AppTool.GetNowSeconds()}";
                param += "&sign=" + BiliTool.GetSign(param);
                var content = await BiliTool.PostContentToWebAsync(Api.PASSPORT_REFRESH_TOKEN, param);

                var obj = JObject.Parse(content);
                if (Convert.ToInt32(obj["code"]) == 0)
                {
                    var data    = JsonConvert.DeserializeObject <TokenInfo>(obj["data"].ToString());
                    var package = new TokenPackage(data.access_token, data.refresh_token, AppTool.DateToTimeStamp(DateTime.Now.AddSeconds(data.expires_in)));
                    InitToken(package);
                    TokenChanged?.Invoke(this, package);
                    await SSO();

                    return(true);
                }
                return(false);
            }
            catch (Exception)
            {
                return(false);
            }
        }
Exemplo n.º 2
0
 private void TokenChanged(object sender, TokenPackage e)
 {
     AppTool.WriteLocalSetting(Settings.AccessToken, e.AccessToken);
     AppTool.WriteLocalSetting(Settings.RefreshToken, e.RefreshToken);
     AppTool.WriteLocalSetting(Settings.TokenExpiry, e.Expiry.ToString());
     AppTool.WriteLocalSetting(Settings.UserId, "");
 }
Exemplo n.º 3
0
        /// <summary>
        /// 登录
        /// </summary>
        /// <param name="userName">用户名</param>
        /// <param name="password">密码</param>
        /// <param name="captcha">验证码</param>
        /// <returns></returns>
        public async Task <LoginCallback> LoginAsync(string userName, string password, string captcha = "")
        {
            string param = $"appkey={BiliTool.AndroidKey.Appkey}&build={BiliTool.BuildNumber}&mobi_app=android&password={Uri.EscapeDataString(await EncryptedPasswordAsync(password))}&platform=android&ts={AppTool.GetNowSeconds()}&username={Uri.EscapeDataString(userName)}";

            if (!string.IsNullOrEmpty(captcha))
            {
                param += "&captcha=" + captcha;
            }
            param += "&sign=" + BiliTool.GetSign(param);
            string response = await BiliTool.PostContentToWebAsync(Api.PASSPORT_LOGIN, param);

            var result = new LoginCallback();

            result.Status = LoginResultType.Error;
            if (!string.IsNullOrEmpty(response))
            {
                try
                {
                    var jobj = JObject.Parse(response);
                    int code = Convert.ToInt32(jobj["code"]);
                    if (code == 0)
                    {
                        var data    = JsonConvert.DeserializeObject <LoginResult>(jobj["data"].ToString());
                        var package = new TokenPackage(data.token_info.access_token, data.token_info.refresh_token, AppTool.DateToTimeStamp(DateTime.Now.AddSeconds(data.token_info.expires_in)));
                        InitToken(package);
                        TokenChanged?.Invoke(this, package);
                        result.Status = LoginResultType.Success;
                        await SSO();
                    }
                    else if (code == -2100)
                    {
                        result.Status = LoginResultType.NeedValidate;
                        result.Url    = jobj["url"].ToString();
                    }
                    else if (code == -105)
                    {
                        result.Status = LoginResultType.NeedCaptcha;
                    }
                    else if (code == -449)
                    {
                        result.Status = LoginResultType.Busy;
                    }
                    else
                    {
                        result.Status = LoginResultType.Fail;
                    }
                }
                catch (Exception)
                {
                    return(new LoginCallback {
                        Status = LoginResultType.Fail, Url = ""
                    });
                }
            }
            return(result);
        }
Exemplo n.º 4
0
        public BiliBiliClient(string accessToken = "", string refreshToken = "", int expiry = 0)
        {
            BiliTool._accessToken = accessToken;
            var package = new TokenPackage(accessToken, refreshToken, expiry);

            Account = new AccountService(package);
            Channel = new ChannelService();
            Topic   = new TopicService();
            Video   = new VideoService();
            Anime   = new AnimeService();
        }
Exemplo n.º 5
0
 public BiliBiliClient(
     TokenPackage tokenPackage,
     IAccountService accountService,
     IChannelService channelService,
     ITopicService topicService,
     IVideoService videoService,
     IAnimeService animeService)
 {
     BiliTool._accessToken = tokenPackage.AccessToken;
     Account = accountService;
     Channel = channelService;
     Topic   = topicService;
     Video   = videoService;
     Anime   = animeService;
 }
Exemplo n.º 6
0
        /// <summary>
        /// 登陆成功后设置令牌状态
        /// </summary>
        /// <param name="accessToken">令牌</param>
        /// <param name="mid">用户ID</param>
        /// <returns></returns>
        public async Task <bool> SetLoginStatusAsync(string accessToken, string refreshToken = "", int expiry = 0)
        {
            try
            {
                string refe    = string.IsNullOrEmpty(refreshToken) ? accessToken : refreshToken;
                var    package = new TokenPackage(accessToken, refe, AppTool.DateToTimeStamp(DateTime.Now.AddSeconds(expiry == 0 ? 7200 : expiry)));
                InitToken(package);
                TokenChanged?.Invoke(this, package);
                await SSO();

                return(true);
            }
            catch (Exception)
            {
                return(false);
            }
        }
Exemplo n.º 7
0
        /// <summary>
        /// 生成用户令牌数据包
        /// </summary>
        /// <param name="code">Code</param>
        /// <returns>TokenPackage 令牌数据包</returns>
        private TokenPackage initPackage(string code)
        {
            var accessToken = new AccessToken {
                id = code, userId = userId, secret = token.secretKey
            };
            var refreshToken = new AccessToken {
                id = code, userId = userId, secret = token.refreshKey
            };
            var tokenPackage = new TokenPackage
            {
                accessToken  = Util.base64(accessToken),
                refreshToken = Util.base64(refreshToken),
                expiryTime   = token.life,
                failureTime  = token.life * 12
            };

            token.hash = Util.hash(tokenPackage.accessToken);

            return(tokenPackage);
        }
Exemplo n.º 8
0
 private void InitToken(TokenPackage p)
 {
     BiliTool._accessToken = _accessToken = p.AccessToken;
     _refreshToken         = p.RefreshToken;
     _expiry = Convert.ToInt32(p.Expiry);
 }
Exemplo n.º 9
0
 public AccountService(TokenPackage p)
 {
     InitToken(p);
 }