Skip to content

Commit 46f9cc4

Browse files
committed
Allow Explicit to set AllowAnonymous for the dashboard API. (#1335)
1 parent fc778ff commit 46f9cc4

File tree

3 files changed

+30
-19
lines changed

3 files changed

+30
-19
lines changed

src/DotNetCore.CAP.Dashboard/CAP.BuilderExtension.cs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,13 @@ internal static IApplicationBuilder UseCapDashboard(this IApplicationBuilder app
5252
httpContext.Response.StatusCode = 301;
5353
httpContext.Response.Headers["Location"] = redirectUrl;
5454
return Task.CompletedTask;
55-
});
55+
}).AllowAnonymousIf(options.AllowAnonymousExplicit);
5656

5757
endPointRouteBuilder.MapGet(options.PathMatch + "/index.html", async httpContext =>
5858
{
5959
if (!await Authentication(httpContext, options))
6060
{
61-
if(httpContext.Response.StatusCode != StatusCodes.Status302Found)
61+
if (httpContext.Response.StatusCode != StatusCodes.Status302Found)
6262
httpContext.Response.StatusCode = StatusCodes.Status401Unauthorized;
6363
return;
6464
}
@@ -74,7 +74,7 @@ internal static IApplicationBuilder UseCapDashboard(this IApplicationBuilder app
7474
htmlBuilder.Replace("%(servicePrefix)", options.PathBase + options.PathMatch + "/api");
7575
htmlBuilder.Replace("%(pollingInterval)", options.StatsPollingInterval.ToString());
7676
await httpContext.Response.WriteAsync(htmlBuilder.ToString(), Encoding.UTF8);
77-
});
77+
}).AllowAnonymousIf(options.AllowAnonymousExplicit);
7878

7979
new RouteActionProvider(endPointRouteBuilder, options).MapDashboardRoutes();
8080
}
@@ -133,5 +133,10 @@ internal static async Task<bool> Authorize(HttpContext httpContext, DashboardOpt
133133
}
134134
return true;
135135
}
136+
137+
internal static IEndpointConventionBuilder AllowAnonymousIf(this IEndpointConventionBuilder builder, bool allowAnonymous)
138+
{
139+
return allowAnonymous ? builder.AllowAnonymous() : builder;
140+
}
136141
}
137142
}

src/DotNetCore.CAP.Dashboard/CAP.DashboardOptions.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ public DashboardOptions()
1111
{
1212
PathMatch = "/cap";
1313
StatsPollingInterval = 2000;
14+
AllowAnonymousExplicit = true;
1415
}
1516

1617
/// <summary>
@@ -52,5 +53,10 @@ public DashboardOptions()
5253
/// Authorization policy. If no policy is set, authorization will be inactive.
5354
/// </summary>
5455
public string AuthorizationPolicy { get; set; }
56+
57+
/// <summary>
58+
/// Allow Explicit to set AllowAnonymous for the CAP dashboard API without use ASP.NET Core global authorization filter. Default true
59+
/// </summary>
60+
public bool AllowAnonymousExplicit { get; set; }
5561
}
5662
}

src/DotNetCore.CAP.Dashboard/RouteActionProvider.cs

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -41,23 +41,23 @@ public void MapDashboardRoutes()
4141
{
4242
var prefixMatch = _options.PathMatch + "/api";
4343

44-
_builder.MapGet(prefixMatch + "/metrics-realtime", Metrics);
45-
_builder.MapGet(prefixMatch + "/meta", MetaInfo);
46-
_builder.MapGet(prefixMatch + "/stats", Stats);
47-
_builder.MapGet(prefixMatch + "/metrics-history", MetricsHistory);
48-
_builder.MapGet(prefixMatch + "/health", Health);
49-
_builder.MapGet(prefixMatch + "/published/message/{id:long}", PublishedMessageDetails);
50-
_builder.MapGet(prefixMatch + "/received/message/{id:long}", ReceivedMessageDetails);
51-
52-
_builder.MapPost(prefixMatch + "/published/requeue", PublishedRequeue);
53-
_builder.MapPost(prefixMatch + "/received/reexecute", ReceivedRequeue);
54-
55-
_builder.MapGet(prefixMatch + "/published/{status}", PublishedList);
56-
_builder.MapGet(prefixMatch + "/received/{status}", ReceivedList);
57-
_builder.MapGet(prefixMatch + "/subscriber", Subscribers);
58-
_builder.MapGet(prefixMatch + "/nodes", Nodes);
44+
_builder.MapGet(prefixMatch + "/metrics-realtime", Metrics).AllowAnonymousIf(_options.AllowAnonymousExplicit);
45+
_builder.MapGet(prefixMatch + "/meta", MetaInfo).AllowAnonymousIf(_options.AllowAnonymousExplicit);
46+
_builder.MapGet(prefixMatch + "/stats", Stats).AllowAnonymousIf(_options.AllowAnonymousExplicit);
47+
_builder.MapGet(prefixMatch + "/metrics-history", MetricsHistory).AllowAnonymousIf(_options.AllowAnonymousExplicit);
48+
_builder.MapGet(prefixMatch + "/health", Health).AllowAnonymousIf(_options.AllowAnonymousExplicit);
49+
_builder.MapGet(prefixMatch + "/published/message/{id:long}", PublishedMessageDetails).AllowAnonymousIf(_options.AllowAnonymousExplicit);
50+
_builder.MapGet(prefixMatch + "/received/message/{id:long}", ReceivedMessageDetails).AllowAnonymousIf(_options.AllowAnonymousExplicit);
51+
52+
_builder.MapPost(prefixMatch + "/published/requeue", PublishedRequeue).AllowAnonymousIf(_options.AllowAnonymousExplicit);
53+
_builder.MapPost(prefixMatch + "/received/reexecute", ReceivedRequeue).AllowAnonymousIf(_options.AllowAnonymousExplicit);
54+
55+
_builder.MapGet(prefixMatch + "/published/{status}", PublishedList).AllowAnonymousIf(_options.AllowAnonymousExplicit);
56+
_builder.MapGet(prefixMatch + "/received/{status}", ReceivedList).AllowAnonymousIf(_options.AllowAnonymousExplicit);
57+
_builder.MapGet(prefixMatch + "/subscriber", Subscribers).AllowAnonymousIf(_options.AllowAnonymousExplicit);
58+
_builder.MapGet(prefixMatch + "/nodes", Nodes).AllowAnonymousIf(_options.AllowAnonymousExplicit);
5959
}
60-
60+
6161
public async Task Metrics(HttpContext httpContext)
6262
{
6363
if (_agent != null && await _agent.Invoke(httpContext)) return;

0 commit comments

Comments
 (0)