Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,11 @@ public class OpenApiSettings
/// </summary>
public virtual bool HideSwaggerUI { get; set; }

/// <summary>
/// Gets or sets the value indicating whether to hide the document pages or not.
/// </summary>
public virtual bool HideDocument { get; set; }

/// <summary>
/// Gets or sets the API key to access to OpenAPI document.
/// </summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,33 +48,37 @@ public async Task<ImmutableArray<FunctionMetadata>> GetFunctionMetadataAsync()

private Dictionary<string, HttpBindingMetadata> SetupOpenApiHttpBindings()
{
var renderSwaggerDocument = new HttpBindingMetadata()
{
Methods = new List<string>() { HttpMethods.Get },
Route = "swagger.{extension}",
AuthLevel = this._settings.AuthLevel?.Document ?? AuthorizationLevel.Anonymous,
};
var bindings = new Dictionary<string, HttpBindingMetadata>();

var renderOpenApiDocument = new HttpBindingMetadata()
if (!this._settings.HideDocument)
{
Methods = new List<string>() { HttpMethods.Get },
Route = "openapi/{version}.{extension}",
AuthLevel = this._settings.AuthLevel?.Document ?? AuthorizationLevel.Anonymous,
};
var renderSwaggerDocument = new HttpBindingMetadata()
{
Methods = new List<string>() { HttpMethods.Get },
Route = "swagger.{extension}",
AuthLevel = this._settings.AuthLevel?.Document ?? AuthorizationLevel.Anonymous,
};

var renderOAuth2Redirect = new HttpBindingMetadata()
{
Methods = new List<string>() { HttpMethods.Get },
Route = "oauth2-redirect.html",
AuthLevel = this._settings.AuthLevel?.UI ?? AuthorizationLevel.Anonymous,
};
bindings.Add(RenderSwaggerDocumentKey, renderSwaggerDocument);

var bindings = new Dictionary<string, HttpBindingMetadata>()
{
{ RenderSwaggerDocumentKey, renderSwaggerDocument },
{ RenderOpenApiDocumentKey, renderOpenApiDocument },
{ RenderOAuth2RedirectKey, renderOAuth2Redirect },
};
var renderOpenApiDocument = new HttpBindingMetadata()
{
Methods = new List<string>() { HttpMethods.Get },
Route = "openapi/{version}.{extension}",
AuthLevel = this._settings.AuthLevel?.Document ?? AuthorizationLevel.Anonymous,
};

bindings.Add(RenderOpenApiDocumentKey, renderOpenApiDocument);

var renderOAuth2Redirect = new HttpBindingMetadata()
{
Methods = new List<string>() { HttpMethods.Get },
Route = "oauth2-redirect.html",
AuthLevel = this._settings.AuthLevel?.UI ?? AuthorizationLevel.Anonymous,
};

bindings.Add(RenderOAuth2RedirectKey, renderOAuth2Redirect);
}

if (!this._settings.HideSwaggerUI)
{
Expand All @@ -93,11 +97,16 @@ private Dictionary<string, HttpBindingMetadata> SetupOpenApiHttpBindings()

private List<FunctionMetadata> GetFunctionMetadataList()
{
var list = new List<FunctionMetadata>()
var list = new List<FunctionMetadata>();

if (!this._settings.HideDocument)
{
this.GetFunctionMetadata(RenderSwaggerDocumentKey),
this.GetFunctionMetadata(RenderOpenApiDocumentKey),
this.GetFunctionMetadata(RenderOAuth2RedirectKey),
list.AddRange(new[]
{
this.GetFunctionMetadata(RenderSwaggerDocumentKey),
this.GetFunctionMetadata(RenderOpenApiDocumentKey),
this.GetFunctionMetadata(RenderOAuth2RedirectKey)
});
};

if (!this._settings.HideSwaggerUI)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,18 @@ namespace Microsoft.Azure.WebJobs.Extensions.OpenApi.Tests.Configurations
public class OpenApiSettingsTests
{
[DataTestMethod]
[DataRow("true", true, "lorem", "Function", AuthorizationLevel.Function, "Anonymous", AuthorizationLevel.Anonymous, "http://localhost:7071", "https://contoso.com/api/")]
[DataRow("false", false, "ipsum", "Anonymous", AuthorizationLevel.Anonymous, "Function", AuthorizationLevel.Function, "http://contoso", "https://fabrikam.com/api/")]
public void Given_EnvironmentVariables_When_Instantiated_Then_It_Should_Return_Result(string hideSwaggerUI, bool expectedHideSwaggerUI, string apiKey,
[DataRow("true", true, "false", false, "lorem", "Function", AuthorizationLevel.Function, "Anonymous", AuthorizationLevel.Anonymous, "http://localhost:7071", "https://contoso.com/api/")]
[DataRow("false", false, "false", false, "ipsum", "Anonymous", AuthorizationLevel.Anonymous, "Function", AuthorizationLevel.Function, "http://contoso", "https://fabrikam.com/api/")]
[DataRow("false", false, "true", true, "ipsum", "Anonymous", AuthorizationLevel.Anonymous, "Function", AuthorizationLevel.Function, "http://contoso", "https://fabrikam.com/api/")]
public void Given_EnvironmentVariables_When_Instantiated_Then_It_Should_Return_Result(string hideSwaggerUI, bool expectedHideSwaggerUI,
string hideDocument, bool expectedHideDocument,
string apiKey,
string authLevelDoc, AuthorizationLevel expectedAuthLevelDoc,
string authLevelUI, AuthorizationLevel expectedAuthLevelUI,
string proxyUrl, string hostnames)
{
Environment.SetEnvironmentVariable("OpenApi__HideSwaggerUI", hideSwaggerUI);
Environment.SetEnvironmentVariable("OpenApi__HideDocument", hideDocument);
Environment.SetEnvironmentVariable("OpenApi__ApiKey", apiKey);
Environment.SetEnvironmentVariable("OpenApi__AuthLevel__Document", authLevelDoc);
Environment.SetEnvironmentVariable("OpenApi__AuthLevel__UI", authLevelUI);
Expand All @@ -33,6 +37,7 @@ public void Given_EnvironmentVariables_When_Instantiated_Then_It_Should_Return_R
var settings = config.Get<OpenApiSettings>("OpenApi");

settings.HideSwaggerUI.Should().Be(expectedHideSwaggerUI);
settings.HideDocument.Should().Be(expectedHideDocument);
settings.ApiKey.Should().Be(apiKey);
settings.AuthLevel.Document.Should().Be(expectedAuthLevelDoc);
settings.AuthLevel.UI.Should().Be(expectedAuthLevelUI);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,21 @@ public async Task Given_HideSwaggerUI_When_GetFunctionMetadataAsync_Invoked_Then
result.Should().HaveCount(expected);
}

[DataTestMethod]
[DataRow(true, 1)]
[DataRow(false, 4)]
public async Task Given_HideDocument_When_GetFunctionMetadataAsync_Invoked_Then_It_Should_Return_Result(bool hideDocument, int expected)
{
var settings = new Mock<OpenApiSettings>();
settings.SetupGet(p => p.HideDocument).Returns(hideDocument);

var provider = new OpenApiTriggerFunctionProvider(settings.Object);

var result = await provider.GetFunctionMetadataAsync().ConfigureAwait(false);

result.Should().HaveCount(expected);
}

[DataTestMethod]
[DataRow(AuthorizationLevel.Anonymous, AuthorizationLevel.Anonymous)]
[DataRow(AuthorizationLevel.Anonymous, AuthorizationLevel.Function)]
Expand All @@ -51,6 +66,7 @@ public async Task Given_AuthLevel_When_GetFunctionMetadataAsync_Invoked_Then_It_

var settings = new Mock<OpenApiSettings>();
settings.SetupGet(p => p.HideSwaggerUI).Returns(false);
settings.SetupGet(p => p.HideDocument).Returns(false);
settings.SetupGet(p => p.AuthLevel).Returns(authLevelSettings.Object);

var provider = new OpenApiTriggerFunctionProvider(settings.Object);
Expand Down