public void GetValueProvider_ReturnsValue_IfKeyIsPresent() { // Arrange var values = new RouteValueDictionary(new Dictionary <string, object> { { "test-key", "test-value" } }); var provider = new RouteValueProvider(BindingSource.Query, values); // Act var result = provider.GetValue("test-key"); // Assert Assert.Equal("test-value", (string)result); }
public void ContainsPrefix_ReturnsNullValue_IfKeyIsPresent() { // Arrange var values = new RouteValueDictionary(new Dictionary <string, object> { { "test-key", null } }); var provider = new RouteValueProvider(BindingSource.Query, values); // Act var result = provider.GetValue("test-key"); // Assert Assert.Equal(string.Empty, (string)result); }
public void GetValueProvider_ReturnsValue_UsesInvariantCulture() { // Arrange var values = new RouteValueDictionary(new Dictionary <string, object> { { "test-key", new DateTimeOffset(2018, 10, 31, 7, 37, 38, TimeSpan.FromHours(-7)) }, }); var provider = new RouteValueProvider(BindingSource.Query, values); // Act var result = provider.GetValue("test-key"); // Assert Assert.Equal("10/31/2018 07:37:38 -07:00", (string)result); }
public void GetValueProvider_ReturnsNull_WhenKeyIsNotFound() { // Arrange var values = new RouteValueDictionary(new Dictionary <string, object> { { "test-key", "value" } }); var provider = new RouteValueProvider(BindingSource.Query, values); // Act var result = provider.GetValue("not-test-key"); // Assert Assert.Equal(ValueProviderResult.None, result); }
public void GetValue_ReturnsValue_WithDefaultCulture() { // Arrange var values = new RouteValueDictionary(new Dictionary <string, object> { { "test-key", "test-value" } }); var provider = new RouteValueProvider(BindingSource.Query, values); // Act var result = provider.GetValue("test-key"); // Assert Assert.Equal(CultureInfo.InvariantCulture, result.Culture); }
public void GetValue_DoesNotReturnAValue_ForAKeyPrefix() { // Arrange var values = new RouteValueDictionary(new Dictionary <string, object> { { "bar.baz", 2 }, }); var valueProvider = new RouteValueProvider(BindingSource.Query, values); // Act var result = valueProvider.GetValue("bar"); // Assert Assert.Equal(ValueProviderResult.None, result); }
public void GetValueProvider_ReturnsValue_UsesSpecifiedCulture() { // Arrange var values = new RouteValueDictionary(new Dictionary <string, object> { { "test-key", new DateTimeOffset(2018, 10, 31, 7, 37, 38, TimeSpan.FromHours(-7)) }, }); var provider = new RouteValueProvider(BindingSource.Query, values, new CultureInfo("de-CH")); // The formatting was changed in netcoreapp3.0 to be consistent across platforms. var expected = "31.10.2018 07:37:38 -07:00"; // Act var result = provider.GetValue("test-key"); // Assert Assert.Equal(expected, (string)result); }
public void GetValue_ReturnsCorrectValue_ForKnownKeys(string prefix, string expectedValue) { // Arrange var values = new RouteValueDictionary(new Dictionary <string, object> { { "bar", 1 }, { "bar.baz", 2 }, }); var valueProvider = new RouteValueProvider(BindingSource.Query, values); // Act var result = valueProvider.GetValue(prefix); // Assert Assert.Equal(expectedValue, (string)result); }
public async Task InvokeAsync(HttpContext context) { var providerInfoCache = context.RequestServices.GetRequiredService <IProviderInfoCache>(); var currentUserProvider = context.RequestServices.GetRequiredService <ICurrentUserProvider>(); var providerContextProvider = context.RequestServices.GetRequiredService <IProviderContextProvider>(); bool runNext = true; await TryAssignFeature(); if (runNext) { await _next(context); } async Task TryAssignFeature() { // For Provider {Super}Users the provider comes from their identity token. // For Admin or Helpdesk users there should be a route value indicating the provider. // If Provider {Super}Users specify the route value it's ignored. var user = currentUserProvider.GetCurrentUser(); if (user == null) { return; } Guid providerId; // A 'strict' provider context means it cannot be changed for a given request bool strict = true; var requestProviderId = TryGetProviderIdFromRequest(); if (!requestProviderId.HasValue) { requestProviderId = await TryGetProviderIdFromLegacyContext(); if (requestProviderId.HasValue) { strict = false; } } if (user.IsDeveloper || user.IsHelpdesk) { if (!requestProviderId.HasValue) { return; } else { providerId = requestProviderId.Value; } } else // user.IsProvider == true { var usersOwnProviderId = user.CurrentProviderId.Value; // Route param or session value, if specified, must match user's own org if (requestProviderId.HasValue && requestProviderId.Value != usersOwnProviderId) { context.Response.StatusCode = StatusCodes.Status403Forbidden; runNext = false; return; } providerId = usersOwnProviderId; } var providerInfo = await providerInfoCache.GetProviderInfo(providerId); if (providerInfo != null) { var providerContext = new ProviderContext(providerInfo, strict); providerContextProvider.SetProviderContext(providerContext); } } Guid?TryGetProviderIdFromRequest() { var routeValueProvider = new RouteValueProvider( BindingSource.Path, context.GetRouteData().Values); var queryStringValueProvider = new QueryStringValueProvider( BindingSource.Query, context.Request.Query, CultureInfo.InvariantCulture); var matches = routeValueProvider.GetValue(RouteValueKey).Values .Concat(queryStringValueProvider.GetValue(RouteValueKey).Values) .Distinct() .ToList(); if (matches.Count == 1 && Guid.TryParse(matches.Single(), out var providerId)) { return(providerId); } return(null); } async Task <Guid?> TryGetProviderIdFromLegacyContext() { var ukprn = context.Session.GetInt32("UKPRN"); return(ukprn.HasValue ? await providerInfoCache.GetProviderIdForUkprn(ukprn.Value) : null); } }