diff --git a/NzbDrone.Core/Configuration/ConfigFileProvider.cs b/NzbDrone.Core/Configuration/ConfigFileProvider.cs index da0fa5569..f2b970763 100644 --- a/NzbDrone.Core/Configuration/ConfigFileProvider.cs +++ b/NzbDrone.Core/Configuration/ConfigFileProvider.cs @@ -32,7 +32,7 @@ namespace NzbDrone.Core.Configuration public class ConfigFileProvider : IConfigFileProvider { - private const string CONFIG_ELEMENT_NAME = "Config"; + public const string CONFIG_ELEMENT_NAME = "Config"; private readonly IEventAggregator _eventAggregator; private readonly ICached _cache; @@ -214,6 +214,8 @@ namespace NzbDrone.Core.Configuration var xDoc = new XDocument(new XDeclaration("1.0", "utf-8", "yes")); xDoc.Add(new XElement(CONFIG_ELEMENT_NAME)); xDoc.Save(_configFile); + + SaveConfigDictionary(GetConfigDictionary()); } } diff --git a/NzbDrone.Integration.Test/Client/ClientBase.cs b/NzbDrone.Integration.Test/Client/ClientBase.cs index 20e35117f..9cd0b4b7a 100644 --- a/NzbDrone.Integration.Test/Client/ClientBase.cs +++ b/NzbDrone.Integration.Test/Client/ClientBase.cs @@ -14,10 +14,10 @@ namespace NzbDrone.Integration.Test.Client { private readonly IRestClient _restClient; private readonly string _resource; - + private readonly string _apiKey; private readonly Logger _logger; - public ClientBase(IRestClient restClient, string resource = null) + public ClientBase(IRestClient restClient, string apiKey, string resource = null) { if (resource == null) { @@ -26,6 +26,7 @@ namespace NzbDrone.Integration.Test.Client _restClient = restClient; _resource = resource; + _apiKey = apiKey; _logger = LogManager.GetLogger("REST"); } @@ -88,10 +89,14 @@ namespace NzbDrone.Integration.Test.Client public RestRequest BuildRequest(string command = "") { - return new RestRequest(_resource + "/" + command.Trim('/')) + var request = new RestRequest(_resource + "/" + command.Trim('/')) { - RequestFormat = DataFormat.Json + RequestFormat = DataFormat.Json, }; + + request.AddHeader("Authorization", _apiKey); + + return request; } public T Get(IRestRequest request, HttpStatusCode statusCode = HttpStatusCode.OK) where T : class, new() diff --git a/NzbDrone.Integration.Test/Client/EpisodeClient.cs b/NzbDrone.Integration.Test/Client/EpisodeClient.cs index 8cc89af4e..437226c2f 100644 --- a/NzbDrone.Integration.Test/Client/EpisodeClient.cs +++ b/NzbDrone.Integration.Test/Client/EpisodeClient.cs @@ -6,8 +6,8 @@ namespace NzbDrone.Integration.Test.Client { public class EpisodeClient : ClientBase { - public EpisodeClient(IRestClient restClient) - : base(restClient, "episodes") + public EpisodeClient(IRestClient restClient, string apiKey) + : base(restClient, apiKey, "episodes") { } diff --git a/NzbDrone.Integration.Test/Client/IndexerClient.cs b/NzbDrone.Integration.Test/Client/IndexerClient.cs index 44f5d4c77..9d6f9b974 100644 --- a/NzbDrone.Integration.Test/Client/IndexerClient.cs +++ b/NzbDrone.Integration.Test/Client/IndexerClient.cs @@ -5,12 +5,9 @@ namespace NzbDrone.Integration.Test.Client { public class IndexerClient : ClientBase { - public IndexerClient(IRestClient restClient) - : base(restClient) + public IndexerClient(IRestClient restClient, string apiKey) + : base(restClient, apiKey) { } - - - } } \ No newline at end of file diff --git a/NzbDrone.Integration.Test/Client/ReleaseClient.cs b/NzbDrone.Integration.Test/Client/ReleaseClient.cs index fba274856..46a6db839 100644 --- a/NzbDrone.Integration.Test/Client/ReleaseClient.cs +++ b/NzbDrone.Integration.Test/Client/ReleaseClient.cs @@ -5,12 +5,9 @@ namespace NzbDrone.Integration.Test.Client { public class ReleaseClient : ClientBase { - public ReleaseClient(IRestClient restClient) - : base(restClient) + public ReleaseClient(IRestClient restClient, string apiKey) + : base(restClient, apiKey) { } - - - } } diff --git a/NzbDrone.Integration.Test/Client/SeriesClient.cs b/NzbDrone.Integration.Test/Client/SeriesClient.cs index 3dc88c969..1f0a572f9 100644 --- a/NzbDrone.Integration.Test/Client/SeriesClient.cs +++ b/NzbDrone.Integration.Test/Client/SeriesClient.cs @@ -7,8 +7,8 @@ namespace NzbDrone.Integration.Test.Client { public class SeriesClient : ClientBase { - public SeriesClient(IRestClient restClient) - : base(restClient) + public SeriesClient(IRestClient restClient, string apiKey) + : base(restClient, apiKey) { } @@ -27,14 +27,11 @@ namespace NzbDrone.Integration.Test.Client } - public class SystemInfoClient : ClientBase { - public SystemInfoClient(IRestClient restClient) - : base(restClient) + public SystemInfoClient(IRestClient restClient, string apiKey) + : base(restClient, apiKey) { } - - } } diff --git a/NzbDrone.Integration.Test/IntegrationTest.cs b/NzbDrone.Integration.Test/IntegrationTest.cs index a0b5b3bcd..f8556a58d 100644 --- a/NzbDrone.Integration.Test/IntegrationTest.cs +++ b/NzbDrone.Integration.Test/IntegrationTest.cs @@ -47,22 +47,21 @@ namespace NzbDrone.Integration.Test _runner = new NzbDroneRunner(); _runner.KillAll(); - InitRestClients(); - _runner.Start(); + InitRestClients(); } private void InitRestClients() { RestClient = new RestClient("http://localhost:8989/api"); - Series = new SeriesClient(RestClient); - Releases = new ReleaseClient(RestClient); - RootFolders = new ClientBase(RestClient); - Commands = new ClientBase(RestClient); - History = new ClientBase(RestClient); - Indexers = new IndexerClient(RestClient); - Episodes = new EpisodeClient(RestClient); - NamingConfig = new ClientBase(RestClient, "config/naming"); + Series = new SeriesClient(RestClient, _runner.ApiKey); + Releases = new ReleaseClient(RestClient, _runner.ApiKey); + RootFolders = new ClientBase(RestClient, _runner.ApiKey); + Commands = new ClientBase(RestClient, _runner.ApiKey); + History = new ClientBase(RestClient, _runner.ApiKey); + Indexers = new IndexerClient(RestClient, _runner.ApiKey); + Episodes = new EpisodeClient(RestClient, _runner.ApiKey); + NamingConfig = new ClientBase(RestClient, _runner.ApiKey, "config/naming"); } //[TestFixtureTearDown] diff --git a/NzbDrone.Integration.Test/NzbDroneRunner.cs b/NzbDrone.Integration.Test/NzbDroneRunner.cs index 5955166ff..111ff02db 100644 --- a/NzbDrone.Integration.Test/NzbDroneRunner.cs +++ b/NzbDrone.Integration.Test/NzbDroneRunner.cs @@ -1,10 +1,13 @@ using System; using System.Diagnostics; using System.IO; +using System.Linq; using System.Threading; +using System.Xml.Linq; using NUnit.Framework; using NzbDrone.Common; using NzbDrone.Common.EnvironmentInfo; +using NzbDrone.Core.Configuration; using RestSharp; namespace NzbDrone.Integration.Test @@ -15,16 +18,18 @@ namespace NzbDrone.Integration.Test private readonly IRestClient _restClient; private Process _nzbDroneProcess; + public string AppData { get; private set; } + public string ApiKey { get; private set; } + public NzbDroneRunner(int port = 8989) { _processProvider = new ProcessProvider(); _restClient = new RestClient("http://localhost:8989/api"); } - public void Start() { - AppDate = Path.Combine(Directory.GetCurrentDirectory(), "_intg_" + DateTime.Now.Ticks); + AppData = Path.Combine(Directory.GetCurrentDirectory(), "_intg_" + DateTime.Now.Ticks); var nzbdroneConsoleExe = "NzbDrone.Console.exe"; @@ -33,7 +38,6 @@ namespace NzbDrone.Integration.Test nzbdroneConsoleExe = "NzbDrone.exe"; } - if (BuildInfo.IsDebug) { @@ -53,8 +57,12 @@ namespace NzbDrone.Integration.Test Assert.Fail("Process has exited"); } + SetApiKey(); - var statusCall = _restClient.Get(new RestRequest("system/status")); + var request = new RestRequest("system/status"); + request.AddHeader("Authorization", ApiKey); + + var statusCall = _restClient.Get(request); if (statusCall.ResponseStatus == ResponseStatus.Completed) { @@ -76,7 +84,7 @@ namespace NzbDrone.Integration.Test private void Start(string outputNzbdroneConsoleExe) { - var args = "-nobrowser -data=\"" + AppDate + "\""; + var args = "-nobrowser -data=\"" + AppData + "\""; _nzbDroneProcess = _processProvider.Start(outputNzbdroneConsoleExe, args, OnOutputDataReceived, OnOutputDataReceived); } @@ -91,7 +99,16 @@ namespace NzbDrone.Integration.Test } } + private void SetApiKey() + { + var configFile = Path.Combine(AppData, "config.xml"); - public string AppDate { get; private set; } + if (!String.IsNullOrWhiteSpace(ApiKey)) return; + if (!File.Exists(configFile)) return; + + var xDoc = XDocument.Load(configFile); + var config = xDoc.Descendants(ConfigFileProvider.CONFIG_ELEMENT_NAME).Single(); + ApiKey = config.Descendants("ApiKey").Single().Value; + } } } \ No newline at end of file