コード例 #1
0
        public object Any(TemplatesAdmin request)
        {
            var feature = HostContext.AssertPlugin<TemplatePagesFeature>();
            
            RequiredRoleAttribute.AssertRequiredRoles(Request, feature.TemplatesAdminRole);
            
            if (string.IsNullOrEmpty(request.Actions))
                return new TemplatesAdminResponse { Results = new[]{ "Available actions: " + string.Join(",", Actions) } };

            var actions = request.Actions.Split(',');

            var results = new List<string>();
            using (var ms = MemoryStreamFactory.GetStream())
            {
                var scope = new TemplateScopeContext(new PageResult(feature.EmptyPage), ms, new Dictionary<string, object>());
            
                if (actions.Any(x => x.EqualsIgnoreCase(nameof(TemplateProtectedFilters.invalidateAllCaches))))
                    results.Add(nameof(TemplateProtectedFilters.invalidateAllCaches) + ": " + feature.ProtectedFilters.invalidateAllCaches(scope).ToJsv());
                
                if (actions.Any(x => x.EqualsIgnoreCase(nameof(TemplatePagesFeature.RunInitPage))))
                    results.Add(nameof(TemplatePagesFeature.RunInitPage) + ": " + feature.RunInitPage());
                
                if (results.Count > 0)
                    return new TemplatesAdminResponse { Results = results.ToArray() };
            }
            
            throw new NotSupportedException("Unknown Action. Available actions: " + string.Join(",", Actions));
        }
コード例 #2
0
        public object Get(Authenticate request)
        {
            var allowGetAuthRequests = HostContext.AssertPlugin <AuthFeature>().AllowGetAuthenticateRequests;

            // null == allow all Auth Requests or
            if (allowGetAuthRequests != null && !allowGetAuthRequests(Request))
            {
                throw new NotSupportedException("GET Authenticate requests are disabled, to enable set AuthFeature.AllowGetAuthenticateRequests = req => true");
            }

            return(Post(request));
        }
コード例 #3
0
        public static PageResult GetPageResult(this IRequest request, string virtualPath, Dictionary <string, object> args = null)
        {
            var page       = HostContext.AssertPlugin <SharpPagesFeature>().GetPage(virtualPath);
            var pageResult = new PageResult(page).BindRequest(request);

            if (args != null)
            {
                foreach (var entry in args)
                {
                    pageResult.Args[entry.Key] = entry.Value;
                }
            }
            return(pageResult);
        }
コード例 #4
0
        public async Task <object> Any(GetValidationRules request)
        {
            var feature = HostContext.AssertPlugin <ValidationFeature>();
            await RequestUtils.AssertAccessRoleAsync(base.Request, accessRole : feature.AccessRole, authSecret : request.AuthSecret);

            var type = HostContext.Metadata.FindDtoType(request.Type);

            if (type == null)
            {
                throw HttpError.NotFound(request.Type);
            }

            return(new GetValidationRulesResponse {
                Results = await ValidationSource.GetAllValidateRulesAsync(request.Type).ConfigAwait(),
            });
        }
コード例 #5
0
 public static PageResult GetPageResult(this IRequest request, string virtualPath, Dictionary<string,object> args=null)
 {
     var page = HostContext.AssertPlugin<TemplatePagesFeature>().GetPage(virtualPath);
     var pageResult = new PageResult(page) {
         Args = {
             ["Request"] = request   
         }
     };
     if (args != null)
     {
         foreach (var entry in args)
         {
             pageResult.Args[entry.Key] = entry.Value;
         }
     }
     return pageResult;
 }
        public async Task Any(EvalScript request)
        {
            var feature = HostContext.AssertPlugin <DesktopFeature>();

            RequestUtils.AssertAccessRole(base.Request, accessRole: feature.AccessRole, authSecret: request.AuthSecret);

            var    appHost = HostContext.AppHost;
            string script;
            var    method = ((script = request.EvaluateScript) != null
                 ? nameof(request.EvaluateScript)
                 : (script = request.EvaluateCode) != null
                     ? nameof(request.EvaluateCode)
                     : (script = request.EvaluateLisp) != null
                         ? nameof(request.EvaluateLisp)
                         : (script = request.RenderScript) != null
                             ? nameof(request.RenderScript)
                             : (script = request.RenderCode) != null
                                 ? nameof(request.RenderCode)
                                 : (script = request.RenderLisp) != null
                                     ? nameof(request.RenderLisp)
                                     : null) ??
                            ((script = request.EvaluateScriptAsync) != null
                 ? nameof(request.EvaluateScriptAsync)
                 : (script = request.EvaluateCodeAsync) != null
                     ? nameof(request.EvaluateCodeAsync)
                     : (script = request.EvaluateLispAsync) != null
                         ? nameof(request.EvaluateLispAsync)
                         : (script = request.RenderScriptAsync) != null
                             ? nameof(request.RenderScriptAsync)
                             : (script = request.RenderCodeAsync) != null
                                 ? nameof(request.RenderCodeAsync)
                                 : (script = request.RenderLispAsync) != null
                                     ? nameof(request.RenderLispAsync)
                                     : null)
                            ?? throw new ArgumentNullException(nameof(request.EvaluateCode));

            async Task HandleExceptionAsync(Exception e)
            {
                log.Error(e.Message, e);
                base.Response.StatusCode        = 500;
                base.Response.StatusDescription = e.GetType().Name;
                base.Response.ContentType       = MimeTypes.PlainText;
                await base.Response.OutputStream.WriteAsync(MemoryProvider.Instance.ToUtf8(e.ToString().AsSpan()));

                await base.Response.EndRequestAsync(skipHeaders : true);
            }

            async Task SetResult(object value, string resultType = " result")
            {
                base.Response.ContentType       = MimeTypes.Json;
                base.Response.StatusCode        = 200;
                base.Response.StatusDescription = method + resultType;
                await base.Response.EndRequestAsync(skipHeaders : false, async res => {
                    using var ms = MemoryStreamFactory.GetStream();
                    JsonSerializer.SerializeToStream(value, ms);
                    ms.Position = 0;
                    await ms.CopyToAsync(base.Response.OutputStream);
                });
            }

            async Task SetOutput(PageResult result)
            {
                base.Response.StatusCode        = 200;
                base.Response.StatusDescription = method + " result";
                base.Response.ContentType       = MimeTypes.PlainText;
                await base.Response.EndRequestAsync(skipHeaders : false, async res => {
                    using var ms = MemoryStreamFactory.GetStream();
                    await result.RenderToStreamAsync(ms);
                    ms.Position = 0;
                    await ms.CopyToAsync(res.OutputStream);
                });
            }

            var args = new Dictionary <string, object> {
                [ScriptConstants.Request] = base.Request,
            };

            if (method.EqualsIgnoreCase(nameof(ScriptTemplateUtils.EvaluateScript)))
            {
                await SetResult(await appHost.ScriptContext.EvaluateAsync(script, args));
            }
            else if (method.EqualsIgnoreCase(nameof(ScriptTemplateUtils.RenderScript)))
            {
                await SetOutput(new PageResult(appHost.ScriptContext.SharpScriptPage(script)).AssignArgs(args));
            }

            else if (method.EqualsIgnoreCase(nameof(ScriptCodeUtils.EvaluateCode)))
            {
                await SetResult(await appHost.ScriptContext.EvaluateCodeAsync(ScriptCodeUtils.EnsureReturn(script), args));
            }
            else if (method.EqualsIgnoreCase(nameof(ScriptCodeUtils.RenderCode)))
            {
                await SetOutput(new PageResult(appHost.ScriptContext.CodeSharpPage(script)).AssignArgs(args));
            }

            else if (method.EqualsIgnoreCase(nameof(ScriptLispUtils.EvaluateLisp)))
            {
                await SetResult(await appHost.ScriptContext.EvaluateLispAsync(ScriptLispUtils.EnsureReturn(script), args));
            }
            else if (method.EqualsIgnoreCase(nameof(ScriptLispUtils.RenderLisp)))
            {
                await SetOutput(new PageResult(appHost.ScriptContext.LispSharpPage(script)).AssignArgs(args));
            }

            if (base.Response.IsClosed)
            {
                return;
            }

            async Task setResultAsync(Task <object> valueTask, string resultType = " result")
            {
                try
                {
                    base.Response.ContentType       = MimeTypes.Json;
                    base.Response.StatusCode        = 200;
                    base.Response.StatusDescription = method + resultType;
                    await base.Response.EndRequestAsync(skipHeaders : false, async res => {
                        using var ms = MemoryStreamFactory.GetStream();
                        JsonSerializer.SerializeToStream(await valueTask, ms);
                        await ms.CopyToAsync(base.Response.OutputStream);
                    });
                }
                catch (Exception e)
                {
                    await HandleExceptionAsync(e);
                }
            }

            async Task setOutputAsync(PageResult result)
            {
                try
                {
                    base.Response.StatusCode        = 200;
                    base.Response.StatusDescription = method + " async result";
                    base.Response.ContentType       = MimeTypes.PlainText;
                    await base.Response.EndRequestAsync(skipHeaders : false, async res => {
                        using var ms = MemoryStreamFactory.GetStream();
                        await result.RenderToStreamAsync(ms);
                        await ms.CopyToAsync(res.OutputStream);
                    });
                }
                catch (Exception e)
                {
                    await HandleExceptionAsync(e);
                }
            }

            if (method.EqualsIgnoreCase(nameof(ScriptTemplateUtils.EvaluateScriptAsync)))
            {
                await Task.Run(async() => await setResultAsync(appHost.ScriptContext.EvaluateAsync(script, args), " async result"));
            }
            else if (method.EqualsIgnoreCase(nameof(ScriptTemplateUtils.RenderScriptAsync)))
            {
                await Task.Run(async() => await setOutputAsync(new PageResult(appHost.ScriptContext.SharpScriptPage(script)).AssignArgs(args)));
            }

            else if (method.EqualsIgnoreCase(nameof(ScriptCodeUtils.EvaluateCodeAsync)))
            {
                await Task.Run(async() => await setResultAsync(appHost.ScriptContext.EvaluateCodeAsync(ScriptCodeUtils.EnsureReturn(script), args), " async result"));
            }
            else if (method.EqualsIgnoreCase(nameof(ScriptCodeUtils.RenderCodeAsync)))
            {
                await Task.Run(async() => await setOutputAsync(new PageResult(appHost.ScriptContext.CodeSharpPage(script)).AssignArgs(args)));
            }

            else if (method.EqualsIgnoreCase(nameof(ScriptLispUtils.EvaluateLispAsync)))
            {
                await Task.Run(async() => await setResultAsync(appHost.ScriptContext.EvaluateLispAsync(ScriptLispUtils.EnsureReturn(script), args), " async result"));
            }
            else if (method.EqualsIgnoreCase(nameof(ScriptLispUtils.RenderLispAsync)))
            {
                await Task.Run(async() => await setOutputAsync(new PageResult(appHost.ScriptContext.LispSharpPage(script)).AssignArgs(args)));
            }
            else
            {
                throw new NotSupportedException($"Unsupported script API '{method}', supported: " +
                                                "EvaluateScript/Async, EvaluateCode/Async, EvaluateLisp/Async");
            }
        }
コード例 #7
0
 public static string SvgBaseUrl(this IHtmlHelper html) => html.GetRequest().ResolveAbsoluteUrl(HostContext.AssertPlugin <SvgFeature>().RoutePath);
コード例 #8
0
 public static TemplatePage OneTimePage(this IRequest request, string contents, string ext = null)
 {
     return(HostContext.AssertPlugin <TemplatePagesFeature>().OneTimePage(contents, ext));
 }
コード例 #9
0
 public static TemplatePage GetPage(this IRequest request, string virtualPath)
 {
     return(HostContext.AssertPlugin <TemplatePagesFeature>().GetPage(virtualPath));
 }
コード例 #10
0
 public static SharpCodePage GetCodePage(this IRequest request, string virtualPath)
 {
     return(HostContext.AssertPlugin <SharpPagesFeature>().GetCodePage(virtualPath).With(request));
 }
コード例 #11
0
 public GrpcProtoGenerator(MetadataTypesConfig config)
 {
     Config  = config;
     feature = HostContext.AssertPlugin <NativeTypesFeature>();
     grpc    = HostContext.AssertPlugin <GrpcFeature>();
 }
コード例 #12
0
ファイル: DeviceService.cs プロジェクト: nukedbit/stackx
        public async Task <object> AnyAsync(RegisterDevice request)
        {
            string userAuthName = GetSession().UserAuthName;
            string userAuthId   = GetSession().UserAuthId;
            var    utcNow       = DateTime.UtcNow;
            var    existings    = await Db.SelectAsync <Device>(d => d.DeviceId.ToLower() == request.DeviceId.ToLower());

            if (existings.FirstOrDefault() is { } existing)
            {
                if (existing.DeletedDate is not null)
                {
                    return(new RegisterDeviceResponse()
                    {
                        DeviceBlocked = true
                    });
                }

                existing.LastActiveBy   = userAuthName;
                existing.LastActiveDate = utcNow;
                existing.Meta           = request.Meta;
                await Db.SaveAsync(existing);

                return(new RegisterDeviceResponse()
                {
                    DeviceBlocked = false
                });
            }

            var deviceFeature = HostContext.AssertPlugin <DevicesFeature>();

            if (deviceFeature.LimitActiveDevicesForUser)
            {
                var limit = await deviceFeature.GetUserDeviceCountLimitAsync(Request);

                var deviceCount = await Db.CountAsync <Device>(d => d.UserAuthId == userAuthId && d.DeletedDate == null);

                if (deviceCount >= limit)
                {
                    throw new HttpError(HttpStatusCode.Forbidden, "Device Limit Reached");
                }
            }

            var device = new Device()
            {
                UserAuthId     = userAuthId,
                DeviceId       = request.DeviceId,
                Description    = request.Description,
                ModifiedBy     = userAuthName,
                CreatedBy      = userAuthName,
                CreatedDate    = utcNow,
                ModifiedDate   = utcNow,
                LastActiveBy   = userAuthName,
                LastActiveDate = utcNow,
                Meta           = request.Meta,
                DeviceKindId   = request.DeviceKindId
            };
            await Db.InsertAsync(device);

            return(new RegisterDeviceResponse()
            {
                DeviceBlocked = false
            });
        }