private OperationResult ProcessingTransaction(string transact, string cmd) { //TEST //return new OperationResult(transact, cmd, "9000"); using (OperationValues trava = GetTransactionValues(transact, cmd)) { IPlugin gateway = null; gateway = (from plugin in plugins.Gateways where plugin.HowCode == trava.HowPoint select plugin).First().CreateNewInstance(); try { try { gateway.StartOperation(cmd, transact); return(new OperationResult(transact, cmd, trava.HowPoint)); } catch (Exception) { return(new OperationResult(transact, cmd, trava.HowPoint)); } } finally { if (gateway != null) { gateway.Destroy(); gateway = null; } } } }
public OperationValues RunOperationFilters(OperationFilterType pre, OperationValues operationValues) { foreach (var operationFilter in OperationFilters[pre]) { operationValues = operationFilter.Run(operationValues); } return(operationValues); }
private OperationValues GetTransactionValues(string transact, string cmd /*, ref string requestFields*/) { try { OperationValues trava = new OperationValues(); //TEST DATA Random rnd = new Random(); Dictionary <string, string> fields = new Dictionary <string, string>(); fields.Add("field_1", "val 1"); fields.Add("field_2", "val 2"); fields.Add("field_3", "val 3"); fields.Add("field_4", "val 4"); string how_point = rnd.Next(0, 2) == 1 ? "9000" : "9500"; //END TEST trava.Transact = this.NewTransact(); trava.Command = cmd; trava.Fields = fields; trava.How = "GateOne"; trava.HowPoint = how_point; trava.Id = "1221231321312321"; trava.FieldsHistory = "dsfdsfskdfnlkdskmfdskmgsdsd"; trava.ResultText = fields; trava.TryCount = "0"; trava.NextTryDate = DateTime.Now; return(trava); } catch (Exception) { return(null); } }
public void AddQuery <TOutputObject, TInput>(Func <TInput, InputField[], object> function) where TOutputObject : GraphType where TInput : class, new() { var fieldName = function.Method.Name.ToCamelCase(); var authFieldName = $"{fieldName}()"; var fieldDescription = ""; var arguments = GraphArguments.FromModel <TInput>(); var queryArguments = arguments.GetQueryArguments(); // Function authorization var functionAttributes = function.Method.GetCustomAttributes(true).OfType <Attribute>().ToArray(); var authorizeAttributeType = typeof(AuthorizeAttribute); var functionAuth = functionAttributes.FirstOrDefault(attr => typeof(AuthorizeAttribute).IsAssignableFrom(attr.GetType())) as AuthorizeAttribute; if (functionAuth == null && function.Method.DeclaringType != null) { var classAttributes = function.Method.DeclaringType.GetCustomAttributes(true).OfType <Attribute>().ToArray(); functionAuth = classAttributes.FirstOrDefault(attr => typeof(AuthorizeAttribute).IsAssignableFrom(attr.GetType())) as AuthorizeAttribute; } if (functionAuth != null) { var authMap = Container.GetInstance <AuthorizationMap>(); authMap.Authorizations.Add(new Authorization() { TargetName = authFieldName, Roles = functionAuth.Claims }); } // Add function as operation Field <TOutputObject>(fieldName, fieldDescription, queryArguments, context => { AuthorizeFunction(Container, authFieldName); var values = new Dictionary <string, object>(); InputField[] fields = null; if (context.FieldAst.Arguments != null) { var astArgs = context.FieldAst.Arguments.Children.OfType <Argument>().ToDictionary(a => a.Name, a => a.Value); foreach (var argument in arguments) { if (astArgs.ContainsKey(argument.Value.Name)) { try { var jsonString = JsonConvert.SerializeObject(context.Arguments[argument.Value.Name]); values[argument.Value.Name] = JsonConvert.DeserializeObject(jsonString, argument.Value.Type); } catch { } } } fields = CollectFields(astArgs); } var valuesJson = JsonConvert.SerializeObject(values); var inputModel = JsonConvert.DeserializeObject <TInput>(valuesJson); ValidationError.ValidateObject(inputModel); var operationValues = new OperationValues() { Context = context, FieldName = fieldName, Fields = fields, FunctionAttributes = functionAttributes, Input = inputModel, }; operationValues = Container.GetInstance <ApiSchema>().RunOperationFilters(OperationFilterType.Pre, operationValues); operationValues.Output = function.Invoke(inputModel, fields); operationValues = Container.GetInstance <ApiSchema>().RunOperationFilters(OperationFilterType.Post, operationValues); return(operationValues.Output); }); }