Skip to content

Commit

Permalink
Revert changes (#3678)
Browse files Browse the repository at this point in the history
  • Loading branch information
rbans96 authored Jan 18, 2024
1 parent 20c138b commit 9bbe6cb
Show file tree
Hide file tree
Showing 21 changed files with 68 additions and 329 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ public CompartmentResourceTypesRouteConstraint()

public bool Match(HttpContext httpContext, IRouter route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection)
{
EnsureArg.IsNotNull(httpContext, nameof(httpContext));
EnsureArg.IsNotNull(route, nameof(route));
EnsureArg.IsNotNullOrEmpty(routeKey, nameof(routeKey));
EnsureArg.IsNotNull(values, nameof(values));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ public class CompartmentTypesRouteConstraint : IRouteConstraint
{
public bool Match(HttpContext httpContext, IRouter route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection)
{
EnsureArg.IsNotNull(httpContext, nameof(httpContext));
EnsureArg.IsNotNull(route, nameof(route));
EnsureArg.IsNotNullOrEmpty(routeKey, nameof(routeKey));
EnsureArg.IsNotNull(values, nameof(values));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ public class ResourceTypesRouteConstraint : IRouteConstraint
{
public bool Match(HttpContext httpContext, IRouter route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection)
{
EnsureArg.IsNotNull(httpContext, nameof(httpContext));
EnsureArg.IsNotNull(route, nameof(route));
EnsureArg.IsNotNullOrEmpty(routeKey, nameof(routeKey));
EnsureArg.IsNotNull(values, nameof(values));
Expand Down
69 changes: 18 additions & 51 deletions src/Microsoft.Health.Fhir.Api/Features/Routing/UrlResolver.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@ public class UrlResolver : IUrlResolver
{
private readonly RequestContextAccessor<IFhirRequestContext> _fhirRequestContextAccessor;
private readonly IUrlHelperFactory _urlHelperFactory;
private readonly LinkGenerator _linkGenerator;

// If we update the search implementation to not use these, we should remove
// the registration since enabling these accessors has performance implications.
Expand All @@ -50,14 +49,12 @@ public class UrlResolver : IUrlResolver
/// <param name="httpContextAccessor">The ASP.NET Core HTTP context accessor.</param>
/// <param name="actionContextAccessor">The ASP.NET Core Action context accessor.</param>
/// <param name="bundleHttpContextAccessor">The bundle aware http context accessor.</param>
/// <param name="linkGenerator">The ASP.NET Core link generator.</param>
public UrlResolver(
RequestContextAccessor<IFhirRequestContext> fhirRequestContextAccessor,
IUrlHelperFactory urlHelperFactory,
IHttpContextAccessor httpContextAccessor,
IActionContextAccessor actionContextAccessor,
IBundleHttpContextAccessor bundleHttpContextAccessor,
LinkGenerator linkGenerator)
IBundleHttpContextAccessor bundleHttpContextAccessor)
{
EnsureArg.IsNotNull(fhirRequestContextAccessor, nameof(fhirRequestContextAccessor));
EnsureArg.IsNotNull(urlHelperFactory, nameof(urlHelperFactory));
Expand All @@ -70,7 +67,6 @@ public UrlResolver(
_httpContextAccessor = httpContextAccessor;
_actionContextAccessor = actionContextAccessor;
_bundleHttpContextAccessor = bundleHttpContextAccessor;
_linkGenerator = linkGenerator;
}

private HttpRequest Request
Expand Down Expand Up @@ -100,12 +96,13 @@ public Uri ResolveMetadataUrl(bool includeSystemQueryString)
routeValues.Add("system", true);
}

return GetRouteUri(
ActionContext.HttpContext,
var uriString = UrlHelper.RouteUrl(
RouteNames.Metadata,
routeValues,
Request.Scheme,
Request.Host.Value);

return new Uri(uriString);
}

public Uri ResolveResourceUrl(IResourceElement resource, bool includeVersion = false)
Expand Down Expand Up @@ -137,12 +134,13 @@ private Uri ResolveResourceUrl(string resourceId, string resourceTypeName, strin
routeValues.Add(KnownActionParameterNames.Vid, version);
}

return GetRouteUri(
ActionContext.HttpContext,
var uriString = UrlHelper.RouteUrl(
routeName,
routeValues,
Request.Scheme,
Request.Host.Value);

return new Uri(uriString);
}

public Uri ResolveRouteUrl(IEnumerable<Tuple<string, string>> unsupportedSearchParams = null, IReadOnlyList<(SearchParameterInfo searchParameterInfo, SortOrder sortOrder)> resultSortOrder = null, string continuationToken = null, bool removeTotalParameter = false)
Expand Down Expand Up @@ -215,24 +213,26 @@ public Uri ResolveRouteUrl(IEnumerable<Tuple<string, string>> unsupportedSearchP
routeValues[KnownQueryParameterNames.ContinuationToken] = continuationToken;
}

return GetRouteUri(
ActionContext.HttpContext,
string uriString = UrlHelper.RouteUrl(
routeName,
routeValues,
Request.Scheme,
Request.Host.Value);

return new Uri(uriString);
}

public Uri ResolveRouteNameUrl(string routeName, IDictionary<string, object> routeValues)
{
var routeValueDictionary = new RouteValueDictionary(routeValues);

return GetRouteUri(
ActionContext.HttpContext,
var uriString = UrlHelper.RouteUrl(
routeName,
routeValueDictionary,
Request.Scheme,
Request.Host.Value);

return new Uri(uriString);
}

public Uri ResolveOperationResultUrl(string operationName, string id)
Expand Down Expand Up @@ -268,12 +268,13 @@ public Uri ResolveOperationResultUrl(string operationName, string id)
{ KnownActionParameterNames.Id, id },
};

return GetRouteUri(
ActionContext.HttpContext,
string uriString = UrlHelper.RouteUrl(
routeName,
routeValues,
Request.Scheme,
Request.Host.Value);

return new Uri(uriString);
}

public Uri ResolveOperationDefinitionUrl(string operationName)
Expand Down Expand Up @@ -320,45 +321,11 @@ public Uri ResolveOperationDefinitionUrl(string operationName)
throw new OperationNotImplementedException(string.Format(Resources.OperationNotImplemented, operationName));
}

return GetRouteUri(
ActionContext.HttpContext,
string uriString = UrlHelper.RouteUrl(
routeName,
null,
values: null,
Request.Scheme,
Request.Host.Value);
}

private Uri GetRouteUri(HttpContext httpContext, string routeName, RouteValueDictionary routeValues, string scheme, string host)
{
var uriString = string.Empty;

if (httpContext == null)
{
// Keep it for UTs
uriString = UrlHelper.RouteUrl(
routeName,
routeValues,
scheme,
host);
}
else
{
// NOTE: Append "/" to the end of the path base to workaround a known bug in UrlHelper.RouteUrl for endpoint routing.
// Remove the workaround when we pick up the fix. (https://github.com/dotnet/aspnetcore/issues/53177)
var pathBase = httpContext.Request?.PathBase.ToString();
if (!string.IsNullOrEmpty(pathBase) && !pathBase.EndsWith('/') && (string.IsNullOrEmpty(httpContext.Request?.Path) || string.Equals(httpContext.Request?.Path, "/", StringComparison.Ordinal)))
{
pathBase += "/";
}

uriString = _linkGenerator.GetUriByRouteValues(
httpContext,
routeName,
routeValues,
scheme,
new HostString(host),
pathBase);
}

return new Uri(uriString);
}
Expand Down
1 change: 1 addition & 0 deletions src/Microsoft.Health.Fhir.Api/Modules/SecurityModule.cs
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ public void Load(IServiceCollection services)
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
mvcOptions.Filters.Add(new AuthorizeFilter(policy));
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,15 @@
// -------------------------------------------------------------------------------------------------

using System;
using System.Linq;
using System.Net.Mime;
using System.Threading.Tasks;
using EnsureThat;
using Microsoft.AspNetCore.Diagnostics.HealthChecks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Routing;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Diagnostics.HealthChecks;
using Microsoft.Extensions.Options;
using Microsoft.Health.Api.Registration;
using Microsoft.Health.Fhir.Api.Configs;
using Microsoft.Health.Fhir.Api.Features.Routing;
using Microsoft.Health.Fhir.Core.Features.Cors;
using Newtonsoft.Json;

namespace Microsoft.AspNetCore.Builder
{
Expand All @@ -28,64 +22,25 @@ public static class FhirServerApplicationBuilderExtensions
/// Adds FHIR server functionality to the pipeline with health check filter.
/// </summary>
/// <param name="app">The application builder instance.</param>
/// <param name="useDevelopmentIdentityProvider">The method used to register the development identity provider.</param>
/// <param name="useHttpLoggingMiddleware">The method used to register the http logging middleware.</param>
/// <param name="healthCheckOptionsPredicate">The predicate used to filter health check services.</param>
/// <param name="mapAdditionalEndpoints">The method used to register additional endpoints.</param>
/// <param name="predicate">The predicate used to filter health check services.</param>
/// <returns>THe application builder instance.</returns>
public static IApplicationBuilder UseFhirServer(
this IApplicationBuilder app,
Func<IApplicationBuilder, IApplicationBuilder> useDevelopmentIdentityProvider = null,
Func<IApplicationBuilder, IApplicationBuilder> useHttpLoggingMiddleware = null,
Func<HealthCheckRegistration, bool> healthCheckOptionsPredicate = null,
Func<IEndpointRouteBuilder, IEndpointRouteBuilder> mapAdditionalEndpoints = null)
public static IApplicationBuilder UseFhirServer(this IApplicationBuilder app, Func<HealthCheckRegistration, bool> predicate = null)
{
EnsureArg.IsNotNull(app, nameof(app));

app.UseHealthChecksExtension(new PathString(KnownRoutes.HealthCheck), predicate);

var config = app.ApplicationServices.GetRequiredService<IOptions<FhirServerConfiguration>>();

var pathBase = config.Value.PathBase?.TrimEnd('/');
if (!string.IsNullOrWhiteSpace(pathBase))
{
var pathString = new PathString(pathBase);
app.UseMiddleware<PathBaseMiddleware>(pathString);
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();
useDevelopmentIdentityProvider?.Invoke(app);
useHttpLoggingMiddleware?.Invoke(app);

app.UseEndpoints(
endpoints =>
{
endpoints.MapControllers();
endpoints.MapHealthChecks(
new PathString(KnownRoutes.HealthCheck),
new HealthCheckOptions
{
Predicate = healthCheckOptionsPredicate,
ResponseWriter = async (httpContext, healthReport) =>
{
var response = JsonConvert.SerializeObject(
new
{
overallStatus = healthReport.Status.ToString(),
details = healthReport.Entries.Select(entry => new
{
name = entry.Key,
status = Enum.GetName(typeof(HealthStatus), entry.Value.Status),
description = entry.Value.Description,
data = entry.Value.Data,
}),
});
httpContext.Response.ContentType = MediaTypeNames.Application.Json;
await httpContext.Response.WriteAsync(response).ConfigureAwait(false);
},
});
mapAdditionalEndpoints?.Invoke(endpoints);
});
app.UseMvc();

return app;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,6 @@ public void GivenABundle_WhenProcessedWithConditionalQueryMaxParallelism_TheFhir
bundleOptions,
DisabledFhirAuthorizationService.Instance,
mediator,
router,
NullLogger<BundleHandler>.Instance);

return (router, bundleConfiguration, mediator, bundleHandler, fhirRequestContextAccessor.RequestContext);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,6 @@ public BundleHandlerTests()
bundleOptions,
DisabledFhirAuthorizationService.Instance,
_mediator,
_router,
NullLogger<BundleHandler>.Instance);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@
using Microsoft.Health.Test.Utilities;
using NSubstitute;
using Xunit;
using Endpoint = Microsoft.AspNetCore.Http.Endpoint;

namespace Microsoft.Health.Fhir.Api.UnitTests.Features.Routing
{
Expand All @@ -47,7 +46,6 @@ public class UrlResolverTests
private readonly IUrlHelper _urlHelper = Substitute.For<IUrlHelper>();
private readonly DefaultHttpContext _httpContext = new DefaultHttpContext();
private readonly ActionContext _actionContext = new ActionContext();
private readonly LinkGenerator _linkGenerator = Substitute.For<LinkGenerator>();

private readonly UrlResolver _urlResolver;

Expand All @@ -60,8 +58,7 @@ public UrlResolverTests()
_urlHelperFactory,
_httpContextAccessor,
_actionContextAccessor,
_bundleHttpContextAccessor,
_linkGenerator);
_bundleHttpContextAccessor);

_fhirRequestContextAccessor.RequestContext.RouteName = DefaultRouteName;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,9 @@
using EnsureThat;
using FluentValidation.Results;
using Hl7.Fhir.Model;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.AspNetCore.Routing;
using Microsoft.Health.Fhir.Api.Features.Routing;
using Microsoft.Health.Fhir.Core.Features.Validation;
using Namotion.Reflection;

namespace Microsoft.Health.Fhir.Api.Features.Filters
{
Expand All @@ -29,14 +26,7 @@ public override void OnActionExecuting(ActionExecutingContext context)
{
EnsureArg.IsNotNull(context, nameof(context));

bool foundActionId = context.RouteData.Values.TryGetValue(KnownActionParameterNames.Id, out var actionId);

if (!foundActionId)
{
actionId = GetActionIdFromRoutingFeature(context.HttpContext, KnownActionParameterNames.Id);
}

if (actionId != null &&
if (context.RouteData.Values.TryGetValue(KnownActionParameterNames.Id, out var actionId) &&
context.ActionArguments.TryGetValue(KnownActionParameterNames.Resource, out var parsedModel))
{
var resource = ParseResource((Resource)parsedModel);
Expand Down Expand Up @@ -70,19 +60,5 @@ private static void ValidateId(Resource resource, string expectedId)
});
}
}

private static string GetActionIdFromRoutingFeature(HttpContext context, string id)
{
if (context.Features[typeof(IRoutingFeature)] is IRoutingFeature routingFeature)
{
var routeValues = routingFeature.RouteData.Values;

routeValues.TryGetValue(id, out var actionId);

return actionId?.ToString();
}

return null;
}
}
}
Loading

0 comments on commit 9bbe6cb

Please sign in to comment.