public void GetColorEx(int color_id, out int color_class_id, ref double[] v)
        {
            PhotoshopTypeLibrary.IActionDescriptor desc2;
            CheckEnum(color_id, (int)con.phKeyForegroundColor, (int)con.phKeyBackgroundColor);

            IActionDescriptor desc = get_descriptor_to_object_property_by_index((int)con.phClassApplication, -1, color_id);

            int actual_color_class_id;

            desc.GetObject((int)con.phKeyForegroundColor, out actual_color_class_id, out desc2);



            if (actual_color_class_id == (int)con.phClassRGBColor)
            {
                color_class_id = (int)con.phClassRGBColor;
                v[0]           = (double)get_value_from_descriptor(desc2, (int)con.phKeyRed);
                v[1]           = (double)get_value_from_descriptor(desc2, (int)con.phKeyGreen);
                v[2]           = (double)get_value_from_descriptor(desc2, (int)con.phKeyBlue);
                v[3]           = 0;
            }
            else
            {
                string msg = string.Format("Did not understand color type returned");
                var    e   = new PhotoshoProxyError(msg);
                throw e;
            }
        }
示例#2
0
        public IActionResult InvokeAction(Controller controller, IActionDescriptor actionDescriptor)
        {
            var methodWithIntParameter =
                controller.GetType()
                .GetMethods()
                .FirstOrDefault(
                    x =>
                    x.Name.ToLower() == actionDescriptor.ActionName.ToLower() && x.GetParameters().Length == 1 &&
                    x.GetParameters()[0].ParameterType == typeof(string) &&
                    x.ReturnType == typeof(IActionResult));

            if (methodWithIntParameter == null)
            {
                throw new HttpNotFoundException(
                          string.Format(
                              "Expected method with signature IActionResult {0}(string) in class {1}",
                              actionDescriptor.ActionName,
                              actionDescriptor.ControllerName));
            }

            try
            {
                var actionResult =
                    (IActionResult)methodWithIntParameter.Invoke(controller, new object[] { actionDescriptor.Parameter });
                return(actionResult);
            }
            catch (TargetInvocationException ex)
            {
                throw ex.InnerException;
            }
        }
        public static string GetRequired(this IActionDescriptor actionDescriptor, string key)
        {
            if (!actionDescriptor.Properties.TryGetValue(key.ToLowerInvariant(), out var value))
            {
                throw new KeyNotFoundException(key);
            }

            return(value);
        }
示例#4
0
        public object Bind(IActionDescriptor actionDescriptor, ActionContext context)
        {
            var action = new SendAction(context)
            {
                Output = actionDescriptor.GetRequired(nameof(SendAction.Output))
            };

            return(action);
        }
示例#5
0
        public IAsyncAction AddActionAsync(IActionDescriptor action)
        {
            var wref = new WeakReference <CodeEditor>(this);

            _parentAccessor.RegisterAction("Action" + action.Id, new Action(() => { if (wref.TryGetTarget(out CodeEditor editor))
                                                                                    {
                                                                                        action?.Run(editor);
                                                                                    }
                                                                            }));
            return(InvokeScriptAsync("addAction", action).AsAsyncAction());
        }
 public virtual void OnActionSelected(
     IHttpContext httpContext,
     IRouteData routeData,
     IActionDescriptor actionDescriptor)
 {
     ActionSelected = new OnActionSelectedEventData()
     {
         ActionDescriptor = actionDescriptor,
         HttpContext = httpContext,
         RouteData = routeData,
     };
 }
示例#7
0
 public virtual void OnActionSelected(
     IHttpContext httpContext,
     IRouteData routeData,
     IActionDescriptor actionDescriptor)
 {
     ActionSelected = new OnActionSelectedEventData()
     {
         ActionDescriptor = actionDescriptor,
         HttpContext      = httpContext,
         RouteData        = routeData,
     };
 }
        public object Bind(IActionDescriptor actionDescriptor, ActionContext context)
        {
            var action = new ExpectUserAction(context)
            {
                Pattern = actionDescriptor.GetRequired(nameof(ExpectUserAction.Pattern))
            };

            var maskedInput = actionDescriptor.GetOptional("masked-input") ?? "false";

            action.MaskedInput = bool.Parse(maskedInput);
            action.CacheKey    = actionDescriptor.GetRequired("assign");
            //action.InputType = actionDescriptor.GetOptional("type");

            return(action);
        }
        /// <summary>
        /// When implemented in a derived class, finds all pre and post <see cref="IResultFilter">result filters</see> that apply to the given action.
        /// </summary>
        /// <param name="action">The action.</param>
        /// <param name="controllerContext">The controller context.</param>
        /// <param name="actionName">Name of the action.</param>
        /// <returns></returns>
        protected override IEnumerable<IResultFilter> FindResultFilters(IActionDescriptor action, ControllerContext controllerContext, string actionName)
        {
            Guard.ArgumentNotNull(action, "action");
            Guard.ArgumentNotNull(controllerContext, "controllerContext");
            Guard.ArgumentNotNullOrEmpty(actionName, "actionName");
            Guard.ArgumentIsOfType(action, typeof(DelegateActionDescriptor), "action");

            var delegateDescriptor = (DelegateActionDescriptor)action;
            var attributeSources = new ICustomAttributeProvider[] { delegateDescriptor.Method, controllerContext.Controller.GetType() };
            var filters = attributeSources.SelectMany(x => x.GetCustomAttributes(true)).Select(x => x as IResultFilter).Where(x => x != null).ToList();
            TraceSources.MagellanSource.TraceVerbose("DefaultActionInvoker found the following result filters for action '{0}': '{1}'.", actionName, 
                string.Join(", ", filters.Select(x => x.GetType().Name).ToArray())
                );
            return filters;
        }
示例#10
0
        private void ExecuteResult(IActionDescriptor actionDescriptor, ControllerContext controllerContext, string actionName, ActionResult actionResult)
        {
            if (actionResult == null)
            {
                return;
            }

            var resultFilters    = FindResultFilters(actionDescriptor, controllerContext, actionName);
            var preResultContext = ExecutePreResultFilters(controllerContext, actionResult, resultFilters);

            if (preResultContext.Cancel)
            {
                return;
            }

            actionResult = preResultContext.Result;

            controllerContext.Request.ReportProgress(new ExecutingResultNavigationEvent());

            try
            {
                actionResult.Execute(controllerContext);
            }
            catch (Exception ex)
            {
                var errorResult = ExecutePostResultFilters(controllerContext, actionResult, ex, resultFilters);
                if (errorResult.ExceptionHandled || errorResult.Exception == null)
                {
                    return;
                }

                if (errorResult.Exception == ex)
                {
                    throw;
                }

                throw errorResult.Exception;
            }

            var successResult = ExecutePostResultFilters(controllerContext, actionResult, null, resultFilters);

            if (successResult.ExceptionHandled || successResult.Exception == null)
            {
                return;
            }

            throw successResult.Exception;
        }
示例#11
0
        /// <summary>
        /// When implemented in a derived class, finds all pre and post <see cref="IResultFilter">result filters</see> that apply to the given action.
        /// </summary>
        /// <param name="action">The action.</param>
        /// <param name="controllerContext">The controller context.</param>
        /// <param name="actionName">Name of the action.</param>
        /// <returns></returns>
        protected override IEnumerable <IResultFilter> FindResultFilters(IActionDescriptor action, ControllerContext controllerContext, string actionName)
        {
            Guard.ArgumentNotNull(action, "action");
            Guard.ArgumentNotNull(controllerContext, "controllerContext");
            Guard.ArgumentNotNullOrEmpty(actionName, "actionName");
            Guard.ArgumentIsOfType(action, typeof(DelegateActionDescriptor), "action");

            var delegateDescriptor = (DelegateActionDescriptor)action;
            var attributeSources   = new ICustomAttributeProvider[] { delegateDescriptor.Method, controllerContext.Controller.GetType() };
            var filters            = attributeSources.SelectMany(x => x.GetCustomAttributes(true)).Select(x => x as IResultFilter).Where(x => x != null).ToList();

            TraceSources.MagellanSource.TraceVerbose("DefaultActionInvoker found the following result filters for action '{0}': '{1}'.", actionName,
                                                     string.Join(", ", filters.Select(x => x.GetType().Name).ToArray())
                                                     );
            return(filters);
        }
示例#12
0
        public void OnBeforeAction(object actionDescriptor, HttpContext httpContext)
        {
            // NOTE: This event is the start of the action pipeline. The action has been selected, the route
            //       has been selected but no filters have run and model binding hasn't occured.
            Execute(() =>
            {
                IActionDescriptor typedActionDescriptor = ConvertActionDescriptor(actionDescriptor);

                string operationName = $"action_{typedActionDescriptor.ControllerName}/{typedActionDescriptor.ActionName}";

                Tracer.BuildSpan(operationName)
                .WithTag(Tags.Component.Key, ActionComponent)
                .WithTag(ActionTagControllerName, typedActionDescriptor.ControllerName)
                .WithTag(ActionTagActionName, typedActionDescriptor.ActionName)
                .StartActive(finishSpanOnDispose: true);
            });
        }
示例#13
0
        private IActionDescriptor ConvertActionDescriptor(object actionDescriptor)
        {
            IActionDescriptor typedActionDescriptor = null;

            // NOTE: ActionDescriptor is usually ControllerActionDescriptor but the compile time type is
            //       ActionDescriptor. This is a problem because we are missing the ControllerName which
            //       we use a lot.
            switch (actionDescriptor.GetType().FullName)
            {
            case "Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor":
                typedActionDescriptor = _proxyAdapter.Process <IActionDescriptor>("Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor", actionDescriptor);
                break;

            case "Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor":
                typedActionDescriptor = _proxyAdapter.Process <IActionDescriptor>("Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor", actionDescriptor);
                break;
            }

            return(typedActionDescriptor);
        }
示例#14
0
        public object Bind(IActionDescriptor actionDescriptor, ActionContext context)
        {
            var action = new ExpectAction(context)
            {
                Pattern = actionDescriptor.GetRequired(nameof(ExpectAction.Pattern)),
                Match   = Match.Contains
            };

            if (Enum.TryParse(actionDescriptor.GetOptional(nameof(ExpectAction.Match)), true, out Match match))
            {
                action.Match = match;
            }

            var defaultTimeoutValue = (int)context.ItemsCache[nameof(ISessionDescriptor.DefaultTimeout)];
            var timeoutValue        = actionDescriptor.GetOptional(nameof(ExpectAction.Timeout));

            action.Timeout = timeoutValue != null?int.Parse(timeoutValue) : defaultTimeoutValue;

            action.CacheKey = actionDescriptor.GetOptional("assign");

            return(action);
        }
示例#15
0
        private ActionResult ExecuteAction(ControllerContext controllerContext, ModelBinderDictionary modelBinders, string actionName, IActionDescriptor actionDescriptor)
        {
            var filters = FindActionFilters(actionDescriptor, controllerContext, actionName);
            var result = ExecutePreActionFilters(controllerContext, modelBinders, filters);

            // If one of the filters gave us a result, we can short-circuit calling the action and skip ahead
            if (result != null)
                return result;

            controllerContext.Request.ReportProgress(new ExecutingActionNavigationEvent());

            try
            {
                // Invoke the action on the controller
                result = actionDescriptor.Execute(controllerContext, modelBinders);
            }
            catch (Exception ex)
            {
                // Give post-filters a chance to suppress or handle the exception
                var errorFilterResult = ExecutePostActionFilters(controllerContext, result, ex, filters);
                
                if (errorFilterResult.ExceptionHandled || errorFilterResult.Exception == null)
                    return errorFilterResult.Result;

                if (ex == errorFilterResult.Exception)
                    throw;

                throw errorFilterResult.Exception;
            }

            // Give post-filters a chance rewrite the result
            var filterResult = ExecutePostActionFilters(controllerContext, result, null, filters);
            if (filterResult.ExceptionHandled || filterResult.Exception == null)
                return filterResult.Result;

            throw filterResult.Exception;
        }
 public static string GetOptional(this IActionDescriptor actionDescriptor, string key)
 {
     return(actionDescriptor.Properties.TryGetValue(key.ToLowerInvariant(), out var value) ? value : null);
 }
示例#17
0
 /// <summary>
 /// When implemented in a derived class, finds all pre and post <see cref="IResultFilter">result filters</see> that apply to the given action.
 /// </summary>
 /// <param name="action">The action.</param>
 /// <param name="controllerContext">The controller context.</param>
 /// <param name="actionName">Name of the action.</param>
 /// <returns></returns>
 protected abstract IEnumerable <IResultFilter> FindResultFilters(IActionDescriptor action, ControllerContext controllerContext, string actionName);
示例#18
0
        private ActionResult ExecuteAction(ControllerContext controllerContext, ModelBinderDictionary modelBinders, string actionName, IActionDescriptor actionDescriptor)
        {
            var filters = FindActionFilters(actionDescriptor, controllerContext, actionName);
            var result  = ExecutePreActionFilters(controllerContext, modelBinders, filters);

            // If one of the filters gave us a result, we can short-circuit calling the action and skip ahead
            if (result != null)
            {
                return(result);
            }

            controllerContext.Request.ReportProgress(new ExecutingActionNavigationEvent());

            try
            {
                // Invoke the action on the controller
                result = actionDescriptor.Execute(controllerContext, modelBinders);
            }
            catch (Exception ex)
            {
                // Give post-filters a chance to suppress or handle the exception
                var errorFilterResult = ExecutePostActionFilters(controllerContext, result, ex, filters);

                if (errorFilterResult.ExceptionHandled || errorFilterResult.Exception == null)
                {
                    return(errorFilterResult.Result);
                }

                if (ex == errorFilterResult.Exception)
                {
                    throw;
                }

                throw errorFilterResult.Exception;
            }

            // Give post-filters a chance rewrite the result
            var filterResult = ExecutePostActionFilters(controllerContext, result, null, filters);

            if (filterResult.ExceptionHandled || filterResult.Exception == null)
            {
                return(filterResult.Result);
            }

            throw filterResult.Exception;
        }
示例#19
0
 /// <summary>
 /// When implemented in a derived class, finds all pre and post <see cref="IResultFilter">result filters</see> that apply to the given action.
 /// </summary>
 /// <param name="action">The action.</param>
 /// <param name="controllerContext">The controller context.</param>
 /// <param name="actionName">Name of the action.</param>
 /// <returns></returns>
 protected abstract IEnumerable<IResultFilter> FindResultFilters(IActionDescriptor action, ControllerContext controllerContext, string actionName);
示例#20
0
        private void ExecuteResult(IActionDescriptor actionDescriptor, ControllerContext controllerContext, string actionName, ActionResult actionResult)
        {
            if (actionResult == null)
                return;

            var resultFilters = FindResultFilters(actionDescriptor, controllerContext, actionName);
            var preResultContext = ExecutePreResultFilters(controllerContext, actionResult, resultFilters);
            if (preResultContext.Cancel)
                return;

            actionResult = preResultContext.Result;

            controllerContext.Request.ReportProgress(new ExecutingResultNavigationEvent());

            try
            {
                actionResult.Execute(controllerContext);
            }
            catch (Exception ex)
            {
                var errorResult = ExecutePostResultFilters(controllerContext, actionResult, ex, resultFilters);
                if (errorResult.ExceptionHandled || errorResult.Exception == null)
                    return;

                if (errorResult.Exception == ex)
                    throw;

                throw errorResult.Exception;
            }

            var successResult = ExecutePostResultFilters(controllerContext, actionResult, null, resultFilters);
            if (successResult.ExceptionHandled || successResult.Exception == null)
                return;

            throw successResult.Exception;
        }
示例#21
0
 public bool CanBind(IActionDescriptor actionDescriptor)
 {
     return(actionDescriptor.Name.Equals("send", StringComparison.OrdinalIgnoreCase));
 }
示例#22
0
 public IAsyncAction AddActionAsync(IActionDescriptor action)
 {
     _parentAccessor.RegisterAction("Action" + action.Id, new Action(() => { action?.Run(this); }));
     return(this.InvokeScriptAsync("addAction", action).AsAsyncAction());
 }
示例#23
0
        public static string GetLogString(string header, LogLevel level, IActionContext actionContext, IActionDescriptor actionDescriptor, bool logResponse)
        {
            var sb = new StringBuilder();

            sb.Append(string.Format(header, actionDescriptor.ActionName)).AppendLine();

            var separator = ',' + Environment.NewLine;

            if (level >= LogLevel.Track)
            {
                sb.AppendLine("[Raw RawUrl]: ");
                sb.AppendLine(actionContext.Request.RawUrl);
                sb.AppendLine();
                // GET / HTTP/1.1
                //sb.Append($"{actionDescriptor.}");
                // write request query string.
            }

            if (level >= LogLevel.Debug)
            {
                sb.Append($"Action: {actionDescriptor.ActionName}(");
                sb.AppendLine();
                sb.Append(string.Join(separator, actionDescriptor.GetParameters().Select(x => $"{x.Type.Name} {x.Name}=")));
                sb.AppendLine();
                sb.Append(')');
            }
            else if (level >= LogLevel.Track)
            {
                sb.Append("Action: ");
                sb.Append(actionDescriptor.ActionName);
                sb.Append('(');
                sb.Append(string.Join(", ", actionDescriptor.GetParameters().Select(x => $"{x.Type.Name} {x.Name}")));
                sb.Append(')');
                sb.AppendLine();
            }

            if (level >= LogLevel.Track)
            {
                sb.AppendLine("--== Request ::Begin ==--");
            }

            if (level >= LogLevel.Track)
            {
                sb.AppendLine("[Raw Query Parameters]: ");
                sb.AppendLine(string.Join("," + Environment.NewLine, actionContext.Request.QueryString.ToKeyValuePairs().Select(x => $"{x.Key}: {x.Value}")));
                sb.AppendLine();

                sb.AppendLine("[Raw Form Data]: ");
                sb.AppendLine(string.Join("," + Environment.NewLine, actionContext.Request.Form.ToKeyValuePairs().Select(x => $"{x.Key}: {x.Value}")));
                sb.AppendLine();
            }

            if (level >= LogLevel.Track)
            {
                sb.AppendLine("[Raw Headers]: ");
                sb.AppendLine(string.Join("," + Environment.NewLine, actionContext.Request.Headers.ToKeyValuePairs().Select(x => $"{x.Key}: {x.Value}")));
                sb.AppendLine();
            }

            if (level >= LogLevel.Track)
            {
                sb.AppendLine("[Raw Body]: ");
                sb.AppendLine(actionContext.Request.GetRawBody());
                sb.AppendLine();
            }

            if (level >= LogLevel.Track)
            {
                sb.AppendLine("--== Request ::End ==--");
            }

            if (logResponse)
            {
                if (level >= LogLevel.Track)
                {
                    sb.AppendLine("--== Response ::Begin ==--");
                }

                if (level >= LogLevel.Track)
                {
                    sb.AppendLine("[Raw Headers]:");
                    sb.AppendLine(string.Join("," + Environment.NewLine, actionContext.Response.Headers.ToKeyValuePairs().Select(x => $"{x.Key}: {x.Value}")));
                    sb.AppendLine();
                }

                if (level >= LogLevel.Debug)
                {
                    //sb.Append("[Raw Body]:");
                    //sb.AppendLine(actionContext.Response);
                }

                if (level >= LogLevel.Track)
                {
                    sb.AppendLine("--== Response ::End ==--");
                }
            }

            return(sb.ToString());
        }