private static async Task <ApiDefinition> GetSwaggerDocAsync(HttpClient client, Uri uri, CancellationToken cancellationToken) { var resp = await client.GetAsync(uri, cancellationToken).ConfigureAwait(false); if (cancellationToken.IsCancellationRequested) { return(null); } resp.EnsureSuccessStatusCode(); string responseString = await resp.Content.ReadAsStringAsync().ConfigureAwait(false); JsonSerializer serializer = new JsonSerializer { PreserveReferencesHandling = PreserveReferencesHandling.All }; JObject responseObject = (JObject)serializer.Deserialize(new StringReader(responseString), typeof(JObject)); ApiDefinitionReader reader = new ApiDefinitionReader(); responseObject = await PointerUtil.ResolvePointersAsync(uri, responseObject, client).ConfigureAwait(false) as JObject; if (responseObject is null) { return(new ApiDefinition()); } return(reader.Read(responseObject, uri)); }
public async Task FindSwaggerDoc(HttpClient client, IEnumerable <string> swaggerSearchPaths, CancellationToken cancellationToken) { ApiDefinitionReader reader = new ApiDefinitionReader(); HashSet <Uri> checkedUris = new HashSet <Uri>(); List <Uri> baseUrisToCheck = new List <Uri>(); if (HasRootUri) { baseUrisToCheck.Add(RootUri); } if (HasBaseUri) { baseUrisToCheck.Add(BaseUri); } foreach (Uri baseUriToCheck in baseUrisToCheck) { foreach (string swaggerSearchPath in swaggerSearchPaths) { if (Uri.TryCreate(baseUriToCheck, swaggerSearchPath, out Uri swaggerUri) && !checkedUris.Contains(swaggerUri)) { var result = await TryGetSwaggerDocAsync(client, swaggerUri, cancellationToken); if (result.Success && reader.CanHandle(result.Document)) { SwaggerUri = swaggerUri; SwaggerDocument = result.Document; return; } checkedUris.Add(swaggerUri); } } } }
public void SetupApiDefinition(HttpState programState) { ApiDefinitionReader reader = new ApiDefinitionReader(); programState.ApiDefinition = reader.Read(SwaggerDocument, SwaggerUri); if (programState.ApiDefinition is object) { programState.SwaggerEndpoint = SwaggerUri; } }
public void Read_WithJObjectFormatNotSupportedByAnyExistingReader_ReturnsNull() { string json = @"{ ""info"": { ""version"": ""v1"", ""title"": ""My API"" } }"; ApiDefinitionReader apiDefinitionReader = new ApiDefinitionReader(); ApiDefinition definition = apiDefinitionReader.Read(json, null); Assert.Null(definition); }
public void SetupApiDefinition(HttpState programState) { if (SwaggerDocument is not null && SwaggerUri is not null) { ApiDefinitionReader reader = new ApiDefinitionReader(); ApiDefinitionParseResult parseResult = reader.Read(SwaggerDocument, SwaggerUri); if (parseResult.Success) { programState.ApiDefinition = parseResult.ApiDefinition; if (programState.ApiDefinition is not null) { programState.SwaggerEndpoint = SwaggerUri; } } } }
public void RegisterReader_AddNewReader_VerifyReadReturnsApiDefinitionWithStructure() { string json = @"{ ""fakeApi"": ""1.0.0"", ""info"": { ""version"": ""v1"" } }"; ApiDefinition apiDefinition = new ApiDefinition() { DirectoryStructure = new DirectoryStructure(null) }; ApiDefinitionReaderStub apiDefinitionReaderStub = new ApiDefinitionReaderStub(apiDefinition); ApiDefinitionReader reader = new ApiDefinitionReader(); reader.RegisterReader(apiDefinitionReaderStub); ApiDefinition result = reader.Read(json, null); Assert.Same(apiDefinition, result); }
private async Task <string?> GetSwaggerDocAsync(HttpClient client, Uri uri, CancellationToken cancellationToken) { try { WriteVerbose(string.Format(Resources.Strings.ApiConnection_Logging_Checking, uri)); HttpResponseMessage?response = await client.GetAsync(uri, cancellationToken).ConfigureAwait(false); if (cancellationToken.IsCancellationRequested) { _logger.WriteLine(Resources.Strings.ApiConnection_Logging_Cancelled.SetColor(_httpState.ErrorColor)); return(null); } if (response.IsSuccessStatusCode) { WriteLineVerbose(Resources.Strings.ApiConnection_Logging_Found.SetColor(AllowedColors.BoldGreen)); #if NET5_0 string responseString = await response.Content.ReadAsStringAsync(cancellationToken).ConfigureAwait(false); #else string responseString = await response.Content.ReadAsStringAsync().ConfigureAwait(false); #endif WriteVerbose(Resources.Strings.ApiConnection_Logging_Parsing); ApiDefinitionReader reader = new ApiDefinitionReader(); ApiDefinitionParseResult result = reader.CanHandle(responseString); if (result.Success) { if (result.ValidationMessages.Count == 0) { WriteLineVerbose(Resources.Strings.ApiConnection_Logging_Successful.SetColor(AllowedColors.BoldGreen)); } else { WriteLineVerbose(Resources.Strings.ApiConnection_Logging_SuccessfulWithWarnings.SetColor(_httpState.WarningColor)); foreach (string validationMessage in result.ValidationMessages) { WriteLineVerbose(validationMessage.SetColor(_httpState.WarningColor)); } } return(responseString); } else { WriteLineVerbose(Resources.Strings.ApiConnection_Logging_Failed.SetColor(_httpState.ErrorColor)); return(null); } } else { int statusCode = (int)response.StatusCode; string statusCodeDescription = response.StatusCode.ToString(); WriteLineVerbose($"{statusCode} {statusCodeDescription}".SetColor(_httpState.ErrorColor)); return(null); } } catch (Exception e) { WriteLineVerbose(e.Message.SetColor(_httpState.ErrorColor)); return(null); } finally { WriteLineVerbose(); } }