コード例 #1
0
ファイル: NzbVortexProxy.cs プロジェクト: jhargis/Sonarr
        public List <NzbVortexGroup> GetGroups(NzbVortexSettings settings)
        {
            var request  = BuildRequest("group", Method.GET, true, settings);
            var response = ProcessRequest <NzbVortexGroupResponse>(request, settings);

            return(response.Groups);
        }
コード例 #2
0
        public List <NzbVortexGroup> GetGroups(NzbVortexSettings settings)
        {
            var request  = BuildRequest(settings).Resource("group");
            var response = ProcessRequest <NzbVortexGroupResponse>(request, true, settings);

            return(response.Groups);
        }
コード例 #3
0
ファイル: NzbVortexProxy.cs プロジェクト: jhargis/Sonarr
        public NzbVortexApiVersionResponse GetApiVersion(NzbVortexSettings settings)
        {
            var request  = BuildRequest("app/apilevel", Method.GET, false, settings);
            var response = ProcessRequest <NzbVortexApiVersionResponse>(request, settings);

            return(response);
        }
コード例 #4
0
ファイル: NzbVortexProxy.cs プロジェクト: jhargis/Sonarr
        public NzbVortexFiles GetFiles(int id, NzbVortexSettings settings)
        {
            var request  = BuildRequest(string.Format("file/{0}", id), Method.GET, true, settings);
            var response = ProcessRequest <NzbVortexFiles>(request, settings);

            return(response);
        }
コード例 #5
0
        public List <NzbVortexFile> GetFiles(int id, NzbVortexSettings settings)
        {
            var requestBuilder = BuildRequest(settings).Resource(string.Format("file/{0}", id));

            var response = ProcessRequest <NzbVortexFilesResponse>(requestBuilder, true, settings);

            return(response.Files);
        }
コード例 #6
0
        private HttpRequestBuilder BuildRequest(NzbVortexSettings settings)
        {
            var requestBuilder = new HttpRequestBuilder(true, settings.Host, settings.Port, "api");

            requestBuilder.LogResponseContent = true;

            return(requestBuilder);
        }
コード例 #7
0
        public NzbVortexApiVersionResponse GetApiVersion(NzbVortexSettings settings)
        {
            var requestBuilder = BuildRequest(settings).Resource("app/apilevel");

            var response = ProcessRequest <NzbVortexApiVersionResponse>(requestBuilder, false, settings);

            return(response);
        }
コード例 #8
0
ファイル: NzbVortexProxy.cs プロジェクト: jhargis/Sonarr
        public void Remove(int id, bool deleteData, NzbVortexSettings settings)
        {
            var request = BuildRequest(string.Format("nzb/{0}/cancel", id), Method.GET, true, settings);

            if (deleteData)
            {
                request.Resource += "Delete";
            }

            ProcessRequest(request, settings);
        }
コード例 #9
0
        private HttpRequestBuilder BuildRequest(NzbVortexSettings settings)
        {
            var baseUrl = HttpRequestBuilder.BuildBaseUrl(true, settings.Host, settings.Port, settings.UrlBase);

            baseUrl = HttpUri.CombinePath(baseUrl, "api");
            var requestBuilder = new HttpRequestBuilder(baseUrl);

            requestBuilder.LogResponseContent = true;

            return(requestBuilder);
        }
コード例 #10
0
ファイル: NzbVortexProxy.cs プロジェクト: jhargis/Sonarr
        private string GetSessionId(bool force, NzbVortexSettings settings)
        {
            var authCacheKey = string.Format("{0}_{1}_{2}", settings.Host, settings.Port, settings.ApiKey);

            if (force)
            {
                _authCache.Remove(authCacheKey);
            }

            var sessionId = _authCache.Get(authCacheKey, () => Authenticate(settings));

            return(sessionId);
        }
コード例 #11
0
ファイル: NzbVortexProxy.cs プロジェクト: jhargis/Sonarr
        public NzbVortexQueue GetQueue(int doneLimit, NzbVortexSettings settings)
        {
            var request = BuildRequest("nzb", Method.GET, true, settings);

            if (settings.TvCategory.IsNotNullOrWhiteSpace())
            {
                request.AddQueryParameter("groupName", settings.TvCategory);
            }

            request.AddQueryParameter("limitDone", doneLimit.ToString());

            var response = ProcessRequest <NzbVortexQueue>(request, settings);

            return(response);
        }
コード例 #12
0
        public List <NzbVortexQueueItem> GetQueue(int doneLimit, NzbVortexSettings settings)
        {
            var requestBuilder = BuildRequest(settings).Resource("nzb");

            if (settings.Category.IsNotNullOrWhiteSpace())
            {
                requestBuilder.AddQueryParam("groupName", settings.Category);
            }

            requestBuilder.AddQueryParam("limitDone", doneLimit.ToString());

            var response = ProcessRequest <NzbVortexQueueResponse>(requestBuilder, true, settings);

            return(response.Items);
        }
コード例 #13
0
ファイル: NzbVortexProxy.cs プロジェクト: jhargis/Sonarr
        private string ProcessRequest(IRestRequest request, NzbVortexSettings settings)
        {
            var client = BuildClient(settings);

            try
            {
                return(ProcessRequest(client, request).Content);
            }
            catch (NzbVortexNotLoggedInException ex)
            {
                _logger.Warn("Not logged in response received, reauthenticating and retrying");
                request.AddQueryParameter("sessionid", GetSessionId(true, settings));

                return(ProcessRequest(client, request).Content);
            }
        }
コード例 #14
0
ファイル: NzbVortexProxy.cs プロジェクト: jhargis/Sonarr
        public string DownloadNzb(byte[] nzbData, string filename, int priority, NzbVortexSettings settings)
        {
            var request = BuildRequest("/nzb/add", Method.POST, true, settings);

            request.AddFile("name", nzbData, filename, "application/x-nzb");
            request.AddQueryParameter("priority", priority.ToString());

            if (settings.TvCategory.IsNotNullOrWhiteSpace())
            {
                request.AddQueryParameter("groupname", settings.TvCategory);
            }

            var response = ProcessRequest <NzbVortexAddResponse>(request, settings);

            return(response.Id);
        }
コード例 #15
0
        public string DownloadNzb(byte[] nzbData, string filename, int priority, NzbVortexSettings settings)
        {
            var requestBuilder = BuildRequest(settings).Resource("nzb/add")
                                 .Post()
                                 .AddQueryParam("priority", priority.ToString());

            if (settings.MusicCategory.IsNotNullOrWhiteSpace())
            {
                requestBuilder.AddQueryParam("groupname", settings.MusicCategory);
            }

            requestBuilder.AddFormUpload("name", filename, nzbData, "application/x-nzb");

            var response = ProcessRequest <NzbVortexAddResponse>(requestBuilder, true, settings);

            return(response.Id);
        }
コード例 #16
0
        private void AuthenticateClient(HttpRequestBuilder requestBuilder, NzbVortexSettings settings, bool reauthenticate = false)
        {
            var authKey = string.Format("{0}:{1}", requestBuilder.BaseUrl, settings.ApiKey);

            var sessionId = _authSessionIdCache.Find(authKey);

            if (sessionId == null || reauthenticate)
            {
                _authSessionIdCache.Remove(authKey);

                var nonceRequest  = BuildRequest(settings).Resource("auth/nonce").Build();
                var nonceResponse = _httpClient.Execute(nonceRequest);

                var nonce = Json.Deserialize <NzbVortexAuthNonceResponse>(nonceResponse.Content).AuthNonce;

                var cnonce = Guid.NewGuid().ToString();

                var hashString = string.Format("{0}:{1}:{2}", nonce, cnonce, settings.ApiKey);
                var hash       = Convert.ToBase64String(hashString.SHA256Hash().HexToByteArray());

                var authRequest = BuildRequest(settings).Resource("auth/login")
                                  .AddQueryParam("nonce", nonce)
                                  .AddQueryParam("cnonce", cnonce)
                                  .AddQueryParam("hash", hash)
                                  .Build();
                var authResponse = _httpClient.Execute(authRequest);
                var authResult   = Json.Deserialize <NzbVortexAuthResponse>(authResponse.Content);

                if (authResult.LoginResult == NzbVortexLoginResultType.Failed)
                {
                    throw new NzbVortexAuthenticationException("Authentication failed, check your API Key");
                }

                sessionId = authResult.SessionId;

                _authSessionIdCache.Set(authKey, sessionId);
            }

            requestBuilder.AddQueryParam("sessionid", sessionId);
        }
コード例 #17
0
ファイル: NzbVortexProxy.cs プロジェクト: jhargis/Sonarr
        private string Authenticate(NzbVortexSettings settings)
        {
            var nonce      = GetNonce(settings);
            var cnonce     = Guid.NewGuid().ToString();
            var hashString = string.Format("{0}:{1}:{2}", nonce, cnonce, settings.ApiKey);
            var sha256     = hashString.SHA256Hash();
            var base64     = Convert.ToBase64String(sha256.HexToByteArray());
            var request    = BuildRequest("auth/login", Method.GET, false, settings);

            request.AddQueryParameter("nonce", nonce);
            request.AddQueryParameter("cnonce", cnonce);
            request.AddQueryParameter("hash", base64);

            var response = ProcessRequest(request, settings);
            var result   = Json.Deserialize <NzbVortexAuthResponse>(response);

            if (result.LoginResult == NzbVortexLoginResultType.Failed)
            {
                throw new NzbVortexAuthenticationException("Authentication failed, check your API Key");
            }

            return(result.SessionId);
        }
コード例 #18
0
ファイル: NzbVortexProxy.cs プロジェクト: jhargis/Sonarr
        private IRestClient BuildClient(NzbVortexSettings settings)
        {
            var url = string.Format(@"https://{0}:{1}/api", settings.Host, settings.Port);

            return(RestClientFactory.BuildClient(url));
        }
コード例 #19
0
        public void Remove(int id, bool deleteData, NzbVortexSettings settings)
        {
            var requestBuilder = BuildRequest(settings).Resource(string.Format("nzb/{0}/{1}", id, deleteData ? "cancelDelete" : "cancel"));

            ProcessRequest <NzbVortexResponseBase>(requestBuilder, true, settings);
        }
コード例 #20
0
        private T ProcessRequest <T>(HttpRequestBuilder requestBuilder, bool requiresAuthentication, NzbVortexSettings settings)
            where T : NzbVortexResponseBase, new()
        {
            if (requiresAuthentication)
            {
                AuthenticateClient(requestBuilder, settings);
            }

            HttpResponse response = null;

            try
            {
                response = _httpClient.Execute(requestBuilder.Build());

                var result = Json.Deserialize <T>(response.Content);

                if (result.Result == NzbVortexResultType.NotLoggedIn)
                {
                    _logger.Debug("Not logged in response received, reauthenticating and retrying");
                    AuthenticateClient(requestBuilder, settings, true);

                    response = _httpClient.Execute(requestBuilder.Build());

                    result = Json.Deserialize <T>(response.Content);

                    if (result.Result == NzbVortexResultType.NotLoggedIn)
                    {
                        throw new DownloadClientException("Unable to connect to remain authenticated to NzbVortex");
                    }
                }

                return(result);
            }
            catch (JsonException ex)
            {
                throw new DownloadClientException("NzbVortex response could not be processed {0}: {1}", ex.Message, response.Content);
            }
            catch (HttpException ex)
            {
                throw new DownloadClientException("Unable to connect to NZBVortex, please check your settings", ex);
            }
            catch (WebException ex)
            {
                throw new DownloadClientUnavailableException("Unable to connect to NZBVortex, please check your settings", ex);
            }
        }
コード例 #21
0
ファイル: NzbVortexProxy.cs プロジェクト: jhargis/Sonarr
        private IRestRequest BuildRequest(string resource, Method method, bool requiresAuthentication, NzbVortexSettings settings)
        {
            var request = new RestRequest(resource, method);

            if (requiresAuthentication)
            {
                request.AddQueryParameter("sessionid", GetSessionId(false, settings));
            }

            return(request);
        }
コード例 #22
0
ファイル: NzbVortexProxy.cs プロジェクト: jhargis/Sonarr
 private T ProcessRequest <T>(IRestRequest request, NzbVortexSettings settings) where T : new()
 {
     return(Json.Deserialize <T>(ProcessRequest(request, settings)));
 }
コード例 #23
0
ファイル: NzbVortexProxy.cs プロジェクト: jhargis/Sonarr
        private string GetNonce(NzbVortexSettings settings)
        {
            var request = BuildRequest("auth/nonce", Method.GET, false, settings);

            return(ProcessRequest <NzbVortexAuthNonceResponse>(request, settings).AuthNonce);
        }