public override async Task <ConfigurationLoadResult> LoadConfiguration() { var loadResult = new ConfigurationLoadResult(); if (!File.Exists(ConfigurationFileName)) { var sampleConfig = this.GetSampleConfig(); try { File.WriteAllText(ConfigurationFileName, JsonConvert.SerializeObject(sampleConfig, Formatting.Indented)); loadResult.Errors.Add(languageProvider.GetString(LanguageSection.ConfigurationStrings, "LoadNoFileFound")); return(loadResult); } catch (Exception e) { LoggingProvider.GetLogger <JsonConfigurationProvider>().Error("Failed to save sample config", e); } loadResult.Errors.Add(languageProvider.GetString(LanguageSection.ConfigurationStrings, "LoadNoFileFoundCantCreate")); return(loadResult); } var stringContent = File.ReadAllText(ConfigurationFileName); try { var config = JsonConvert.DeserializeObject <Configuration>(stringContent); await ValidateConfiguration(config, loadResult); if (loadResult.Success) { loadResult.Configuration = config; return(loadResult); } return(loadResult); } catch (Exception e) { LoggingProvider.GetLogger <JsonConfigurationProvider>().Error("Failed to parse config", e); loadResult.Errors.Add(languageProvider.GetString(LanguageSection.ConfigurationStrings, "LoadCouldntParseFile")); return(loadResult); } }
private async Task ValidateConfiguration(IConfiguration config, ConfigurationLoadResult validationResult) { if (string.IsNullOrEmpty(config.OctopusUrl)) { validationResult.Errors.Add(languageProvider.GetString(LanguageSection.ConfigurationStrings, "ValidationOctopusUrl")); } if (string.IsNullOrEmpty(config.OctopusUrl)) { validationResult.Errors.Add(languageProvider.GetString(LanguageSection.ConfigurationStrings, "ValidationOctopusApiKey")); } if (config.ChannelSeedProjectNames == null || !config.ChannelSeedProjectNames.Any()) { validationResult.Errors.Add(languageProvider.GetString(LanguageSection.ConfigurationStrings, "ValidationSeedProject")); } if (!validationResult.Errors.Any()) { try { var octoHelper = new OctopusHelper(config.OctopusUrl, config.ApiKey, null); await octoHelper.GetEnvironments(); try { if (!config.ChannelSeedProjectNames.Select(async c => await octoHelper.ValidateProjectName(c)).Select(c => c.Result).All(c => c)) { validationResult.Errors.Add(languageProvider.GetString(LanguageSection.ConfigurationStrings, "ValidationSeedProjectNotValid")); } } catch (Exception e) { validationResult.Errors.Add(languageProvider.GetString(LanguageSection.ConfigurationStrings, "ValidationSeedProjectNotValid") + ": " + e.Message); } } catch (Exception e) { validationResult.Errors.Add(languageProvider.GetString(LanguageSection.ConfigurationStrings, "ValidationOctopusApiFailure") + ": " + e.Message); } } }