Пример #1
0
        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;
                    }
                }
            }
        }
Пример #2
0
 public OperationValues RunOperationFilters(OperationFilterType pre, OperationValues operationValues)
 {
     foreach (var operationFilter in OperationFilters[pre])
     {
         operationValues = operationFilter.Run(operationValues);
     }
     return(operationValues);
 }
Пример #3
0
        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);
            });
        }