Example #1
0
        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);
        }
Example #2
0
        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());
        }
Example #3
0
        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()
            });
        }
Example #7
0
 private IResponseCache CreateResponseCache(Data.Entities.Endpoint endpoint)
 {
     return(StringActivator.CreateInstance <IResponseCache>(endpoint.ResponseCacheCSharpClassName));
 }
Example #8
0
 private IRequestProcessor CreateRequestProcessor(Data.Entities.Endpoint endpoint)
 {
     return(StringActivator.CreateInstance <IRequestProcessor>(endpoint.RequestProcessorCSharpClassName));
 }