public async Task Invoke(HttpContext context) { _logger.LogDebug("Invoke({0}) contextPath: {1}", context.Request.Path.Value, _mgmtOptions.Path); #pragma warning disable CS0618 // Type or member is obsolete bool isEndpointEnabled = _mgmtOptions == null ? _options.IsEnabled : _options.IsEnabled(_mgmtOptions); #pragma warning restore CS0618 // Type or member is obsolete bool isEndpointExposed = _mgmtOptions == null ? true : _options.IsExposed(_mgmtOptions); if (Platform.IsCloudFoundry && isEndpointEnabled && isEndpointExposed && _base.IsCloudFoundryRequest(context.Request.Path)) { if (string.IsNullOrEmpty(_options.ApplicationId)) { await ReturnError(context, new SecurityResult(HttpStatusCode.ServiceUnavailable, _base.APPLICATION_ID_MISSING_MESSAGE)).ConfigureAwait(false); return; } if (string.IsNullOrEmpty(_options.CloudFoundryApi)) { await ReturnError(context, new SecurityResult(HttpStatusCode.ServiceUnavailable, _base.CLOUDFOUNDRY_API_MISSING_MESSAGE)).ConfigureAwait(false); return; } IEndpointOptions target = FindTargetEndpoint(context.Request.Path); if (target == null) { await ReturnError(context, new SecurityResult(HttpStatusCode.ServiceUnavailable, _base.ENDPOINT_NOT_CONFIGURED_MESSAGE)).ConfigureAwait(false); return; } var sr = await GetPermissions(context).ConfigureAwait(false); if (sr.Code != HttpStatusCode.OK) { await ReturnError(context, sr).ConfigureAwait(false); return; } var permissions = sr.Permissions; if (!target.IsAccessAllowed(permissions)) { await ReturnError(context, new SecurityResult(HttpStatusCode.Forbidden, _base.ACCESS_DENIED_MESSAGE)).ConfigureAwait(false); return; } } await _next(context).ConfigureAwait(false); }
public async Task Invoke(HttpContext context) { _logger?.LogDebug("Invoke({0}) contextPath: {1}", context.Request.Path.Value, _mgmtOptions.Path); var isEndpointExposed = _mgmtOptions == null || _options.IsExposed(_mgmtOptions); if (Platform.IsCloudFoundry && isEndpointExposed && _base.IsCloudFoundryRequest(context.Request.Path)) { if (string.IsNullOrEmpty(_options.ApplicationId)) { _logger?.LogCritical("The Application Id could not be found. Make sure the Cloud Foundry Configuration Provider has been added to the application configuration."); await ReturnError(context, new SecurityResult(HttpStatusCode.ServiceUnavailable, _base.APPLICATION_ID_MISSING_MESSAGE)).ConfigureAwait(false); return; } if (string.IsNullOrEmpty(_options.CloudFoundryApi)) { await ReturnError(context, new SecurityResult(HttpStatusCode.ServiceUnavailable, _base.CLOUDFOUNDRY_API_MISSING_MESSAGE)).ConfigureAwait(false); return; } var target = FindTargetEndpoint(context.Request.Path); if (target == null) { await ReturnError(context, new SecurityResult(HttpStatusCode.ServiceUnavailable, _base.ENDPOINT_NOT_CONFIGURED_MESSAGE)).ConfigureAwait(false); return; } var sr = await GetPermissions(context).ConfigureAwait(false); if (sr.Code != HttpStatusCode.OK) { await ReturnError(context, sr).ConfigureAwait(false); return; } var permissions = sr.Permissions; if (!target.IsAccessAllowed(permissions)) { await ReturnError(context, new SecurityResult(HttpStatusCode.Forbidden, _base.ACCESS_DENIED_MESSAGE)).ConfigureAwait(false); return; } } await _next(context).ConfigureAwait(false); }