|
2 | 2 | // Licensed under the MIT license.
|
3 | 3 |
|
4 | 4 | using System;
|
| 5 | +using System.Collections.Generic; |
5 | 6 | using System.IO;
|
6 | 7 | using System.Linq;
|
7 | 8 | using System.Net;
|
8 | 9 | using System.Net.Http;
|
9 | 10 | using System.Text;
|
| 11 | +using System.Text.Json; |
10 | 12 | using Microsoft.OpenApi.Extensions;
|
11 | 13 | using Microsoft.OpenApi.Models;
|
12 | 14 | using Microsoft.OpenApi.Readers;
|
@@ -72,7 +74,7 @@ public static void ProcessOpenApiDocument(
|
72 | 74 | if (!string.IsNullOrEmpty(filterByCollection))
|
73 | 75 | {
|
74 | 76 | var fileStream = GetStream(filterByCollection);
|
75 |
| - var requestUrls = OpenApiFilterService.ParseJsonCollectionFile(fileStream); |
| 77 | + var requestUrls = ParseJsonCollectionFile(fileStream); |
76 | 78 | predicate = OpenApiFilterService.CreatePredicate(requestUrls: requestUrls, source:document);
|
77 | 79 | document = OpenApiFilterService.CreateFilteredDocument(document, predicate);
|
78 | 80 | }
|
@@ -133,6 +135,38 @@ private static Stream GetStream(string input)
|
133 | 135 | return stream;
|
134 | 136 | }
|
135 | 137 |
|
| 138 | + /// <summary> |
| 139 | + /// Takes in a file stream, parses the stream into a JsonDocument and gets a list of paths and Http methods |
| 140 | + /// </summary> |
| 141 | + /// <param name="stream"> A file stream.</param> |
| 142 | + /// <returns> A dictionary of request urls and http methods from a collection.</returns> |
| 143 | + private static Dictionary<string, List<string>> ParseJsonCollectionFile(Stream stream) |
| 144 | + { |
| 145 | + var requestUrls = new Dictionary<string, List<string>>(); |
| 146 | + |
| 147 | + // Convert file to JsonDocument |
| 148 | + using var document = JsonDocument.Parse(stream); |
| 149 | + var root = document.RootElement; |
| 150 | + var itemElement = root.GetProperty("item"); |
| 151 | + foreach (var requestObject in itemElement.EnumerateArray().Select(item => item.GetProperty("request"))) |
| 152 | + { |
| 153 | + // Fetch list of methods and urls from collection, store them in a dictionary |
| 154 | + var path = requestObject.GetProperty("url").GetProperty("raw").ToString(); |
| 155 | + var method = requestObject.GetProperty("method").ToString(); |
| 156 | + |
| 157 | + if (!requestUrls.ContainsKey(path)) |
| 158 | + { |
| 159 | + requestUrls.Add(path, new List<string> { method }); |
| 160 | + } |
| 161 | + else |
| 162 | + { |
| 163 | + requestUrls[path].Add(method); |
| 164 | + } |
| 165 | + } |
| 166 | + |
| 167 | + return requestUrls; |
| 168 | + } |
| 169 | + |
136 | 170 | internal static void ValidateOpenApiDocument(string input)
|
137 | 171 | {
|
138 | 172 | if (input == null)
|
|
0 commit comments