public async Task InvokeAsync(HttpContext httpContext, IEndpointResolver endpointResolver) { Data.Entities.Endpoint endpoint = await endpointResolver.ResolveAsync(httpContext); if (endpoint != null) { if (!endpoint.DisallowAnonymous || (httpContext.User.Identity.IsAuthenticated && endpoint.EndpointPermissions.All(ep => httpContext.User.HasClaim(PlatformusClaimTypes.Permission, ep.Permission.Code)))) { byte[] responseBody; Func <Task <byte[]> > defaultValueFunc = async() => { IActionResult actionResult = await this.CreateRequestProcessor(endpoint).ProcessAsync(httpContext, endpoint); if (actionResult == null) { return(null); } return(await this.GetResponseBodyAsync(httpContext, actionResult)); }; if (string.IsNullOrEmpty(endpoint.ResponseCacheCSharpClassName)) { responseBody = await defaultValueFunc(); } else { responseBody = await this.CreateResponseCache(endpoint).GetWithDefaultValueAsync( httpContext, defaultValueFunc ); } if (responseBody != null) { await httpContext.Response.Body.WriteAsync(responseBody, 0, responseBody.Length); return; } } } await this.next(httpContext); }
private async Task <dynamic> CreateViewModelAsync(HttpContext httpContext, Data.Entities.Endpoint endpoint) { ExpandoObjectBuilder expandoObjectBuilder = new ExpandoObjectBuilder(); foreach (DataSource dataSource in endpoint.DataSources) { dynamic viewModel = await this.GetDataProvider(dataSource).GetDataAsync(httpContext, dataSource); if (viewModel == null) { return(null); } expandoObjectBuilder.AddProperty(dataSource.Code, viewModel); } return(expandoObjectBuilder.Build()); }
public async Task <IActionResult> ProcessAsync(HttpContext httpContext, Data.Entities.Endpoint endpoint) { dynamic viewModel = await this.CreateViewModelAsync(httpContext, endpoint); if (viewModel == null) { return(null); } return(new ViewResult() { ViewName = new ParametersParser(endpoint.RequestProcessorParameters).GetStringParameterValue("ViewName"), ViewData = new ViewDataDictionary(new EmptyModelMetadataProvider(), new ModelStateDictionary()) { Model = viewModel } }); }
public void HandleEvent(HttpContext httpContext, Data.Entities.Endpoint oldEndpoint, Data.Entities.Endpoint newEndpoint) { httpContext.GetCache().RemoveAll(); ResponseCacheManager.RemoveAll(httpContext); }
public async Task <IEnumerable <EndpointPermissionViewModel> > GetEndpointPermissionsAsync(HttpContext httpContext, Data.Entities.Endpoint endpoint = null) { return((await httpContext.GetStorage().GetRepository <int, Permission, PermissionFilter>().GetAllAsync()).Select( p => new EndpointPermissionViewModelFactory().Create(p, endpoint != null && endpoint.EndpointPermissions.Any(ep => ep.PermissionId == p.Id)) )); }
public async Task <CreateOrEditViewModel> CreateAsync(HttpContext httpContext, Data.Entities.Endpoint endpoint) { if (endpoint == null) { return new CreateOrEditViewModel() { EndpointPermissions = await this.GetEndpointPermissionsAsync(httpContext), RequestProcessorCSharpClassNameOptions = this.GetRequestProcessorCSharpClassNameOptions(), RequestProcessors = this.GetRequestProcessors(), ResponseCacheCSharpClassNameOptions = this.GetResponseCacheCSharpClassNameOptions() } } ; return(new CreateOrEditViewModel() { Id = endpoint.Id, Name = endpoint.Name, UrlTemplate = endpoint.UrlTemplate, Position = endpoint.Position, DisallowAnonymous = endpoint.DisallowAnonymous, SignInUrl = endpoint.SignInUrl, EndpointPermissions = await this.GetEndpointPermissionsAsync(httpContext, endpoint), RequestProcessorCSharpClassName = endpoint.RequestProcessorCSharpClassName, RequestProcessorCSharpClassNameOptions = this.GetRequestProcessorCSharpClassNameOptions(), RequestProcessorParameters = endpoint.RequestProcessorParameters, RequestProcessors = this.GetRequestProcessors(), ResponseCacheCSharpClassName = endpoint.ResponseCacheCSharpClassName, ResponseCacheCSharpClassNameOptions = this.GetResponseCacheCSharpClassNameOptions() }); }
private IResponseCache CreateResponseCache(Data.Entities.Endpoint endpoint) { return(StringActivator.CreateInstance <IResponseCache>(endpoint.ResponseCacheCSharpClassName)); }
private IRequestProcessor CreateRequestProcessor(Data.Entities.Endpoint endpoint) { return(StringActivator.CreateInstance <IRequestProcessor>(endpoint.RequestProcessorCSharpClassName)); }