Skip to content

Commit fa5b175

Browse files
authored
Add a HideDocument flag akin to HideSwaggerUI (Azure#297)
1 parent a65cf06 commit fa5b175

File tree

4 files changed

+64
-22
lines changed

4 files changed

+64
-22
lines changed

src/Microsoft.Azure.WebJobs.Extensions.OpenApi/Configurations/OpenApiSettings.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,11 @@ public class OpenApiSettings
1010
/// </summary>
1111
public virtual bool HideSwaggerUI { get; set; }
1212

13+
/// <summary>
14+
/// Gets or sets the value indicating whether to hide the document pages or not.
15+
/// </summary>
16+
public virtual bool HideDocument { get; set; }
17+
1318
/// <summary>
1419
/// Gets or sets the API key to access to OpenAPI document.
1520
/// </summary>

src/Microsoft.Azure.WebJobs.Extensions.OpenApi/OpenApiTriggerFunctionProvider.cs

Lines changed: 34 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -48,36 +48,42 @@ public async Task<ImmutableArray<FunctionMetadata>> GetFunctionMetadataAsync()
4848

4949
private Dictionary<string, HttpBindingMetadata> SetupOpenApiHttpBindings()
5050
{
51+
var bindings = new Dictionary<string, HttpBindingMetadata>();
52+
53+
if (this._settings.HideDocument)
54+
{
55+
return bindings;
56+
}
57+
5158
var renderSwaggerDocument = new HttpBindingMetadata()
5259
{
5360
Methods = new List<string>() { HttpMethods.Get },
5461
Route = "swagger.{extension}",
5562
AuthLevel = this._settings.AuthLevel?.Document ?? AuthorizationLevel.Anonymous,
5663
};
5764

65+
bindings.Add(RenderSwaggerDocumentKey, renderSwaggerDocument);
66+
5867
var renderOpenApiDocument = new HttpBindingMetadata()
5968
{
6069
Methods = new List<string>() { HttpMethods.Get },
6170
Route = "openapi/{version}.{extension}",
6271
AuthLevel = this._settings.AuthLevel?.Document ?? AuthorizationLevel.Anonymous,
6372
};
6473

65-
var renderOAuth2Redirect = new HttpBindingMetadata()
66-
{
67-
Methods = new List<string>() { HttpMethods.Get },
68-
Route = "oauth2-redirect.html",
69-
AuthLevel = this._settings.AuthLevel?.UI ?? AuthorizationLevel.Anonymous,
70-
};
71-
72-
var bindings = new Dictionary<string, HttpBindingMetadata>()
73-
{
74-
{ RenderSwaggerDocumentKey, renderSwaggerDocument },
75-
{ RenderOpenApiDocumentKey, renderOpenApiDocument },
76-
{ RenderOAuth2RedirectKey, renderOAuth2Redirect },
77-
};
74+
bindings.Add(RenderOpenApiDocumentKey, renderOpenApiDocument);
7875

7976
if (!this._settings.HideSwaggerUI)
8077
{
78+
var renderOAuth2Redirect = new HttpBindingMetadata()
79+
{
80+
Methods = new List<string>() { HttpMethods.Get },
81+
Route = "oauth2-redirect.html",
82+
AuthLevel = this._settings.AuthLevel?.UI ?? AuthorizationLevel.Anonymous,
83+
};
84+
85+
bindings.Add(RenderOAuth2RedirectKey, renderOAuth2Redirect);
86+
8187
var renderSwaggerUI = new HttpBindingMetadata()
8288
{
8389
Methods = new List<string>() { HttpMethods.Get },
@@ -93,16 +99,26 @@ private Dictionary<string, HttpBindingMetadata> SetupOpenApiHttpBindings()
9399

94100
private List<FunctionMetadata> GetFunctionMetadataList()
95101
{
96-
var list = new List<FunctionMetadata>()
102+
var list = new List<FunctionMetadata>();
103+
104+
if (this._settings.HideDocument)
97105
{
98-
this.GetFunctionMetadata(RenderSwaggerDocumentKey),
99-
this.GetFunctionMetadata(RenderOpenApiDocumentKey),
100-
this.GetFunctionMetadata(RenderOAuth2RedirectKey),
106+
return list;
101107
};
102108

109+
list.AddRange(new[]
110+
{
111+
this.GetFunctionMetadata(RenderSwaggerDocumentKey),
112+
this.GetFunctionMetadata(RenderOpenApiDocumentKey)
113+
});
114+
103115
if (!this._settings.HideSwaggerUI)
104116
{
105-
list.Add(this.GetFunctionMetadata(RenderSwaggerUIKey));
117+
list.AddRange(new[]
118+
{
119+
this.GetFunctionMetadata(RenderSwaggerUIKey),
120+
this.GetFunctionMetadata(RenderOAuth2RedirectKey)
121+
});
106122
}
107123

108124
return list;

test/Microsoft.Azure.WebJobs.Extensions.OpenApi.Tests/Configurations/OpenApiSettingsTests.cs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,18 @@ namespace Microsoft.Azure.WebJobs.Extensions.OpenApi.Tests.Configurations
1515
public class OpenApiSettingsTests
1616
{
1717
[DataTestMethod]
18-
[DataRow("true", true, "lorem", "Function", AuthorizationLevel.Function, "Anonymous", AuthorizationLevel.Anonymous, "http://localhost:7071", "https://contoso.com/api/")]
19-
[DataRow("false", false, "ipsum", "Anonymous", AuthorizationLevel.Anonymous, "Function", AuthorizationLevel.Function, "http://contoso", "https://fabrikam.com/api/")]
20-
public void Given_EnvironmentVariables_When_Instantiated_Then_It_Should_Return_Result(string hideSwaggerUI, bool expectedHideSwaggerUI, string apiKey,
18+
[DataRow("true", true, "false", false, "lorem", "Function", AuthorizationLevel.Function, "Anonymous", AuthorizationLevel.Anonymous, "http://localhost:7071", "https://contoso.com/api/")]
19+
[DataRow("false", false, "false", false, "ipsum", "Anonymous", AuthorizationLevel.Anonymous, "Function", AuthorizationLevel.Function, "http://contoso", "https://fabrikam.com/api/")]
20+
[DataRow("false", false, "true", true, "ipsum", "Anonymous", AuthorizationLevel.Anonymous, "Function", AuthorizationLevel.Function, "http://contoso", "https://fabrikam.com/api/")]
21+
public void Given_EnvironmentVariables_When_Instantiated_Then_It_Should_Return_Result(string hideSwaggerUI, bool expectedHideSwaggerUI,
22+
string hideDocument, bool expectedHideDocument,
23+
string apiKey,
2124
string authLevelDoc, AuthorizationLevel expectedAuthLevelDoc,
2225
string authLevelUI, AuthorizationLevel expectedAuthLevelUI,
2326
string proxyUrl, string hostnames)
2427
{
2528
Environment.SetEnvironmentVariable("OpenApi__HideSwaggerUI", hideSwaggerUI);
29+
Environment.SetEnvironmentVariable("OpenApi__HideDocument", hideDocument);
2630
Environment.SetEnvironmentVariable("OpenApi__ApiKey", apiKey);
2731
Environment.SetEnvironmentVariable("OpenApi__AuthLevel__Document", authLevelDoc);
2832
Environment.SetEnvironmentVariable("OpenApi__AuthLevel__UI", authLevelUI);
@@ -33,6 +37,7 @@ public void Given_EnvironmentVariables_When_Instantiated_Then_It_Should_Return_R
3337
var settings = config.Get<OpenApiSettings>("OpenApi");
3438

3539
settings.HideSwaggerUI.Should().Be(expectedHideSwaggerUI);
40+
settings.HideDocument.Should().Be(expectedHideDocument);
3641
settings.ApiKey.Should().Be(apiKey);
3742
settings.AuthLevel.Document.Should().Be(expectedAuthLevelDoc);
3843
settings.AuthLevel.UI.Should().Be(expectedAuthLevelUI);

test/Microsoft.Azure.WebJobs.Extensions.OpenApi.Tests/OpenApiTriggerFunctionProviderTests.cs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public void Given_Null_When_Instantiated_Then_It_Should_Throw_Exception()
2424
}
2525

2626
[DataTestMethod]
27-
[DataRow(true, 3)]
27+
[DataRow(true, 2)]
2828
[DataRow(false, 4)]
2929
public async Task Given_HideSwaggerUI_When_GetFunctionMetadataAsync_Invoked_Then_It_Should_Return_Result(bool hideSwaggerUI, int expected)
3030
{
@@ -38,6 +38,21 @@ public async Task Given_HideSwaggerUI_When_GetFunctionMetadataAsync_Invoked_Then
3838
result.Should().HaveCount(expected);
3939
}
4040

41+
[DataTestMethod]
42+
[DataRow(true, 0)]
43+
[DataRow(false, 4)]
44+
public async Task Given_HideDocument_When_GetFunctionMetadataAsync_Invoked_Then_It_Should_Return_Result(bool hideDocument, int expected)
45+
{
46+
var settings = new Mock<OpenApiSettings>();
47+
settings.SetupGet(p => p.HideDocument).Returns(hideDocument);
48+
49+
var provider = new OpenApiTriggerFunctionProvider(settings.Object);
50+
51+
var result = await provider.GetFunctionMetadataAsync().ConfigureAwait(false);
52+
53+
result.Should().HaveCount(expected);
54+
}
55+
4156
[DataTestMethod]
4257
[DataRow(AuthorizationLevel.Anonymous, AuthorizationLevel.Anonymous)]
4358
[DataRow(AuthorizationLevel.Anonymous, AuthorizationLevel.Function)]
@@ -51,6 +66,7 @@ public async Task Given_AuthLevel_When_GetFunctionMetadataAsync_Invoked_Then_It_
5166

5267
var settings = new Mock<OpenApiSettings>();
5368
settings.SetupGet(p => p.HideSwaggerUI).Returns(false);
69+
settings.SetupGet(p => p.HideDocument).Returns(false);
5470
settings.SetupGet(p => p.AuthLevel).Returns(authLevelSettings.Object);
5571

5672
var provider = new OpenApiTriggerFunctionProvider(settings.Object);

0 commit comments

Comments
 (0)