Exemplo n.º 1
0
        public void GetNzbGetTabDownloads()
        {
            var mockNzbGet = new Mock <ISettingsService <NzbGetSettingsDto> >();
            var mockSab    = new Mock <ISettingsService <SabNzbdSettingsDto> >();
            var logger     = new Mock <ILogger>();

            var nzbGetSettings = F.Build <NzbGetSettingsDto>().With(x => x.Enabled).Create();
            var nzbList        = F.Create <NzbGetList>();
            var status         = F.Create <NzbGetStatus>();

            mockNzbGet.Setup(x => x.GetSettings()).Returns(nzbGetSettings).Verifiable();
            ThirdPartyApi.Setup(x => x.GetNzbGetList(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>())).Returns(nzbList).Verifiable();
            ThirdPartyApi.Setup(x => x.GetNzbGetStatus(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>())).Returns(status).Verifiable();

            _controller = new DashboardController(HardwareServiceMock.Object, ThirdPartyApi.Object, logger.Object, mockNzbGet.Object, mockSab.Object, NzbDashSettings.Object);

            var result = (PartialViewResult)_controller.GetTabDownloads();
            var model  = (TabDownloadViewModel)result.Model;

            Assert.That(model.Application, Is.EqualTo("NzbGet"));
            Assert.That(model.DownloadSpeed, Is.EqualTo(MemorySizeConverter.SizeSuffix(status.Result.DownloadRate / 1024)));
            Assert.That(model.Downloads.Count, Is.EqualTo(nzbList.result.Count));
            Assert.That(model.Downloads[0].DownloadName, Is.EqualTo(nzbList.result[0].NZBName));
            Assert.That(model.Downloads[0].DownloadPercentage, Is.Not.Null);
            Assert.That(model.Downloads[0].Status, Is.Not.Null);
            Assert.That(model.Downloads[0].ProgressBarClass, Is.Not.Null);
        }
Exemplo n.º 2
0
        public static RequestApiResult <WeixinThirdPartyGetAuthorizerAccessTokenResult> GetAuthorizerAccessToken(string appId, string refreshToken)
        {
            WeixinThirdPartyGetAuthorizerAccessTokenArgs args = new WeixinThirdPartyGetAuthorizerAccessTokenArgs();

            args.ComponentAppId         = _configuration.ThirdParty.AppId;
            args.AuthorizerAppId        = appId;
            args.AuthorizerRefreshToken = refreshToken;

            string accessToken = ThirdPartyAccessTokenGetter.Get();
            RequestApiResult <WeixinThirdPartyGetAuthorizerAccessTokenResult> result =
                ThirdPartyApi.GetAuthorizerAccessToken(accessToken, args);

            if (result.Success == false)
            {
                if (result.Retry)
                {
                    if (result.ApiError.ErrorCode == 40001)
                    {
                        accessToken = ThirdPartyAccessTokenGetter.Refresh(accessToken);
                    }

                    result = ThirdPartyApi.GetAuthorizerAccessToken(accessToken, args);
                    if (result.Success == false)
                    {
                        _log.Write("ThirdPartyApi.GetAuthorizerAccessToken 失败",
                                   result.GetDetail(), TraceEventType.Warning);
                    }
                }
                else
                {
                    _log.Write("ThirdPartyApi.GetAuthorizerAccessToken 失败",
                               result.GetDetail(), TraceEventType.Warning);
                }
            }
            else
            {
                //保存新的RefreshToken到数据库
                //非常重要,一旦丢失则需要公众号重新授权
                WeixinThirdPartyGetAuthorizerAccessTokenResult token = result.ApiResult;
                ThirdPartyManager.Instance.UpdateAuthorizerRefreshToken(
                    appId, token.AccessToken, DateTime.Now.AddSeconds(token.ExpiresIn), token.RefreshToken);
            }

            return(result);
        }
Exemplo n.º 3
0
        public ActionResult GetPreAuthCode()
        {
            RequestApiResult <WeixinThirdPartyGetPreAuthCodeResult> result =
                ThirdPartyApi.GetPreAuthCode(ThirdPartyAccessTokenGetter.Get(), _configuration.ThirdParty.AppId);

            if (result.Success)
            {
                return(RespondDataResult(new
                {
                    AppId = _configuration.ThirdParty.AppId,
                    PreAuthCode = result.ApiResult.PreAuthCode
                }));
            }
            else
            {
                ApiResult apiResult = new ApiResult();
                apiResult.Message = result.Message;
                return(RespondResult(apiResult));
            }
        }
Exemplo n.º 4
0
        /// <summary>
        /// 使用授权码换取公众号的授权信息
        /// </summary>
        public static RequestApiResult <WeixinThirdPartyGetAuthorizationInfoResult> GetAuthorizationInfo(string authorizationCode)
        {
            WeixinThirdPartyGetAuthorizationInfoArgs args = new WeixinThirdPartyGetAuthorizationInfoArgs();

            args.ComponentAppId    = _configuration.ThirdParty.AppId;
            args.AuthorizationCode = authorizationCode;

            string accessToken = ThirdPartyAccessTokenGetter.Get();

            RequestApiResult <WeixinThirdPartyGetAuthorizationInfoResult> result =
                ThirdPartyApi.GetAuthorizationInfo(accessToken, args);

            if (result.Success == false)
            {
                if (result.Retry)
                {
                    if (result.ApiError.ErrorCode == 40001)
                    {
                        accessToken = ThirdPartyAccessTokenGetter.Refresh(accessToken);
                    }

                    result = ThirdPartyApi.GetAuthorizationInfo(accessToken, args);
                    if (result.Success == false)
                    {
                        _log.Write("ThirdPartyApi.GetAuthorizationInfo 失败",
                                   result.GetDetail(), TraceEventType.Warning);
                    }
                }
                else
                {
                    _log.Write("ThirdPartyApi.GetAuthorizationInfo 失败",
                               result.GetDetail(), TraceEventType.Warning);
                }
            }

            //此时数据库中可能还没有建立记录,保存refreshtoken的工作在调用处做

            return(result);
        }
        /// <summary>
        /// 向服务器请求一个新的 accessToken
        /// </summary>
        private void RequestAccessToken()
        {
            WeixinThirdPartyGetAccessTokenArgs args = new WeixinThirdPartyGetAccessTokenArgs();

            args.ComponentAppId     = _configuration.ThirdParty.AppId;
            args.ComponentAppSecret = _configuration.ThirdParty.AppSecret;
            args.VerifyTicket       = _thirdPartyAuthHandler.GetComponentVerifyTicket();
            RequestApiResult <WeixinThirdPartyGetAccessTokenResult> result =
                ThirdPartyApi.GetAccessToken(args);

            if (result.Success)
            {
                _token = result.ApiResult;

                //写数据库,用于启动时恢复
                _thirdPartyManager.UpdateAccessToken(
                    _token.AccessToken, DateTime.Now.AddSeconds(_token.ExpiresIn));
            }
            else
            {
                _log.Write("ThirdPartyAccessToken.GetToken 失败", result.GetDetail(), TraceEventType.Error);
            }
        }
Exemplo n.º 6
0
        public void GetSabTabDownloads()
        {
            var mockNzbGet = new Mock <ISettingsService <NzbGetSettingsDto> >();
            var mockSab    = new Mock <ISettingsService <SabNzbdSettingsDto> >();

            var sabSettings = F.Build <SabNzbdSettingsDto>().With(x => x.Enabled, true).Create();
            var sabQueue    = F.Create <SabNzbdQueue>();

            mockSab.Setup(x => x.GetSettings()).Returns(sabSettings).Verifiable();
            ThirdPartyApi.Setup(x => x.GetSabNzbdQueue(It.IsAny <string>(), It.IsAny <string>())).Returns(sabQueue).Verifiable();

            _controller = new DashboardController(HardwareServiceMock.Object, ThirdPartyApi.Object, new Mock <ILogger>().Object, mockNzbGet.Object, mockSab.Object, NzbDashSettings.Object);

            var result = (PartialViewResult)_controller.GetTabDownloads();
            var model  = (TabDownloadViewModel)result.Model;

            Assert.That(model.Application, Is.EqualTo("Sabnzbd"));
            Assert.That(model.Downloads.Count, Is.EqualTo(sabQueue.jobs.Count));
            Assert.That(model.DownloadSpeed, Is.Not.Null);
            Assert.That(model.Downloads[0].DownloadPercentage, Is.Not.Null);
            Assert.That(model.Downloads[0].Status, Is.Not.Null);
            Assert.That(model.Downloads[0].ProgressBarClass, Is.Not.Null);
        }
Exemplo n.º 7
0
        public void GetNzbGetDownloadCount()
        {
            var mockNzbGet = new Mock <ISettingsService <NzbGetSettingsDto> >();
            var mockSab    = new Mock <ISettingsService <SabNzbdSettingsDto> >();

            var nzbGetSettings = F.Create <NzbGetSettingsDto>();
            var nzbList        = F.Create <NzbGetList>();

            mockNzbGet.Setup(x => x.GetSettings()).Returns(nzbGetSettings).Verifiable();
            ThirdPartyApi.Setup(x => x.GetNzbGetList(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>())).Returns(nzbList).Verifiable();
            _controller = new DashboardController(HardwareServiceMock.Object, ThirdPartyApi.Object, new Mock <ILogger>().Object, mockNzbGet.Object, mockSab.Object, NzbDashSettings.Object);

            var result = (PartialViewResult)_controller.GetDownloads();
            var model  = (DashboardDownloadViewModel)result.Model;

            Assert.That(model.Application, Is.EqualTo("NzbGet"));
            Assert.That(model.DownloadItems, Is.EqualTo(nzbList.result.Count));

            mockNzbGet.Verify(x => x.GetSettings(), Times.Once);
            mockSab.Verify(x => x.GetSettings(), Times.Once);
            ThirdPartyApi.Verify(x => x.GetNzbGetList(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>()), Times.Once);
            ThirdPartyApi.Verify(x => x.GetSabNzbdQueue(It.IsAny <string>(), It.IsAny <string>()), Times.Never);
        }