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; } }
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); }
public object Bind(IActionDescriptor actionDescriptor, ActionContext context) { var action = new SendAction(context) { Output = actionDescriptor.GetRequired(nameof(SendAction.Output)) }; return(action); }
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, }; }
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; }
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; }
/// <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); }
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); }); }
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); }
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); }
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); }
/// <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);
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; }
/// <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);
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; }
public bool CanBind(IActionDescriptor actionDescriptor) { return(actionDescriptor.Name.Equals("send", StringComparison.OrdinalIgnoreCase)); }
public IAsyncAction AddActionAsync(IActionDescriptor action) { _parentAccessor.RegisterAction("Action" + action.Id, new Action(() => { action?.Run(this); })); return(this.InvokeScriptAsync("addAction", action).AsAsyncAction()); }
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()); }