示例#1
0
        public override IProcessingContextCollection GenerateProcessingContexts(string kraftRequestFlagsKey, ISecurityModel securityModel = null)
        {
            Dictionary <string, object> data        = ReconstructFromMultipart();
            List <InputModel>           inputModels = new List <InputModel>();

            if (securityModel == null)
            {
                if (_KraftGlobalConfigurationSettings.GeneralSettings.AuthorizationSection.RequireAuthorization)
                {
                    securityModel = new SecurityModel(_HttpContext);
                }
                else
                {
                    securityModel = new SecurityModelMock(_KraftGlobalConfigurationSettings.GeneralSettings.AuthorizationSection);
                }
            }
            InputModelParameters inputModelParameters = CreateBaseInputModelParameters(_KraftGlobalConfigurationSettings, securityModel);

            inputModelParameters             = ExtendInputModelParameters(inputModelParameters);
            inputModelParameters.LoaderType |= ELoaderType.DataLoader; //TODO Not override passed in flags

            inputModelParameters.Data = data;


            _ProcessingContextCollection = new ProcessingContextCollection(CreateProcessingContexts(new List <InputModel>()
            {
                new InputModel(inputModelParameters)
            }));
            return(_ProcessingContextCollection);
        }
示例#2
0
        private IProcessingContextCollection PrepareSignals(string moduleName, string signalKey, bool isWriteOperation, InputModelParameters inputModelParametersTemplate)
        {
            List <IProcessingContext> resultContexts = new List <IProcessingContext>();
            bool isMaintenance = false;
            InputModelParameters inputModelParameters = inputModelParametersTemplate.DeepClone();

            if (string.IsNullOrEmpty(moduleName) || moduleName.Equals("null", StringComparison.OrdinalIgnoreCase))//Apply for all modules
            {
                foreach (KraftModule kraftModule in _KraftModuleCollection.GetSortedModules())
                {
                    KraftModuleSignal signal = FindSignal(kraftModule, signalKey);
                    if (signal != null)
                    {
                        isMaintenance = signal.Maintenance;
                        if (kraftModule.KraftModuleRootConf.Signals.Count > 0)
                        {
                            resultContexts.Add(Signal2ProcessingContext(inputModelParameters, kraftModule, signal, isWriteOperation));
                        }
                    }
                }
            }
            else
            {
                KraftModule       kraftModule = _KraftModuleCollection.GetSortedModules().Find(m => m.Key.Equals(moduleName, StringComparison.OrdinalIgnoreCase));
                KraftModuleSignal signal      = FindSignal(kraftModule, signalKey);
                if (signal != null)
                {
                    isMaintenance = signal.Maintenance;
                    resultContexts.Add(Signal2ProcessingContext(inputModelParameters, kraftModule, signal, isWriteOperation));
                }
            }
            _ProcessingContextCollection = new ProcessingContextCollection(resultContexts, isMaintenance);
            return(_ProcessingContextCollection);
        }
示例#3
0
        protected InputModelParameters ExtendInputModelParameters(InputModelParameters inputModelParameters)
        {
            RouteDataPrimitives routeDataPrimitives = GetRouteData();

            inputModelParameters.Module           = routeDataPrimitives.Module;
            inputModelParameters.Nodeset          = routeDataPrimitives.Nodeset;
            inputModelParameters.Nodepath         = routeDataPrimitives.Nodepath;
            inputModelParameters.IsWriteOperation = routeDataPrimitives.IsWriteOperation;
            return(inputModelParameters);
        }
示例#4
0
        protected InputModelParameters CreateBaseInputModelParameters(KraftGlobalConfigurationSettings kraftGlobalConfigurationSettings, ISecurityModel securityModel)
        {
            InputModelParameters inputModelParameters = new InputModelParameters();

            inputModelParameters.QueryCollection  = _QueryCollection;
            inputModelParameters.HeaderCollection = _HeaderCollection;
            inputModelParameters.FormCollection   = _FormCollection;
            inputModelParameters.KraftGlobalConfigurationSettings = kraftGlobalConfigurationSettings;
            inputModelParameters.SecurityModel = securityModel;
            return(inputModelParameters);
        }
        private InputModel CreateInputModel(BatchRequest request, KraftGlobalConfigurationSettings kraftGlobalConfigurationSettings, string kraftRequestFlagsKey, ISecurityModel securityModel = null)
        {
            if (securityModel == null)
            {
                if (kraftGlobalConfigurationSettings.GeneralSettings.AuthorizationSection.RequireAuthorization)
                {
                    securityModel = new SecurityModel(_HttpContext);
                }
                else
                {
                    securityModel = new SecurityModelMock(kraftGlobalConfigurationSettings.GeneralSettings.AuthorizationSection);
                }
            }
            InputModelParameters inputModelParameters = CreateBaseInputModelParameters(kraftGlobalConfigurationSettings, securityModel);
            //we expect the routing to be like this:
            //domain.com/startnode/<read|write>/module/nodeset/<nodepath>?lang=de
            string decodedUrl = WebUtility.UrlDecode(request.Url);
            string pattern    = @"(?:http:\/\/.+?\/|https:\/\/.+?\/|www.+?\/)(?:.+?)\/(read|write)*(?:\/)*(.+?)\/(.+?)($|\/.+?)($|\?.+)";
            Regex  regex      = new Regex(pattern);
            var    match      = regex.Match(decodedUrl);

            if (match.Groups[1] != null)
            {
                inputModelParameters.IsWriteOperation = match.Groups[1].Value == "write";
            }
            inputModelParameters.Module   = match.Groups[2].Value;
            inputModelParameters.Nodeset  = match.Groups[3].Value;
            inputModelParameters.Nodepath = string.IsNullOrEmpty(match.Groups[4].Value) ? string.Empty : match.Groups[4].Value.Substring(1);
            string paramsStr = string.IsNullOrEmpty(match.Groups[5].Value) ? string.Empty : match.Groups[5].Value.Substring(1);

            if (!string.IsNullOrEmpty(paramsStr))
            {
                string[] parameters = paramsStr.Split(new[] { '&' }, StringSplitOptions.RemoveEmptyEntries);
                foreach (var parameter in parameters)
                {
                    string[] kvp   = parameter.Split(new[] { '=' }, StringSplitOptions.RemoveEmptyEntries);
                    string   key   = kvp[0];
                    string   value = kvp[1];

                    if (key.Equals(kraftRequestFlagsKey, StringComparison.CurrentCultureIgnoreCase))
                    {
                        inputModelParameters.LoaderType = GetLoaderContent(value);
                    }
                    else
                    {
                        inputModelParameters.QueryCollection.Add(key, value);
                    }
                }
            }
            return(new InputModel(inputModelParameters));
        }
示例#6
0
        private IProcessingContext Signal2ProcessingContext(InputModelParameters inputModelParameters, KraftModule kraftModule, KraftModuleSignal signal, bool isWriteOperation)
        {
            inputModelParameters.Module           = kraftModule.Key;
            inputModelParameters.Nodeset          = signal?.NodeSet;
            inputModelParameters.Nodepath         = signal?.NodePath;
            inputModelParameters.IsWriteOperation = isWriteOperation;
            if (inputModelParameters.LoaderType == ELoaderType.None)
            {
                inputModelParameters.LoaderType = ELoaderType.DataLoader;
            }
            IProcessingContext processingContext = new ProcessingContext(this);

            processingContext.InputModel = new InputModel(inputModelParameters);
            return(processingContext);
        }
示例#7
0
        public override IProcessingContextCollection GenerateProcessingContexts(KraftGlobalConfigurationSettings kraftGlobalConfigurationSettings, string kraftRequestFlagsKey, ISecurityModel securityModel = null)
        {
            if (securityModel == null)
            {
                if (kraftGlobalConfigurationSettings.GeneralSettings.AuthorizationSection.RequireAuthorization)
                {
                    securityModel = new SecurityModel(_HttpContext);
                }
                else
                {
                    securityModel = new SecurityModelMock(kraftGlobalConfigurationSettings.GeneralSettings.AuthorizationSection);
                }
            }
            InputModelParameters inputModelParameters = CreateBaseInputModelParameters(kraftGlobalConfigurationSettings, securityModel);

            inputModelParameters = ExtendInputModelParameters(inputModelParameters);
            if (_RequestContentType == ESupportedContentTypes.JSON)
            {
                inputModelParameters.Data = GetBodyJson <Dictionary <string, object> >(_HttpContext.Request);
            }
            else
            {
                inputModelParameters.Data = _FormCollection;
            }
            inputModelParameters.FormCollection = _FormCollection;
            inputModelParameters.LoaderType     = GetLoaderType(kraftRequestFlagsKey);

            RouteData routeData = _HttpContext.GetRouteData();

            if (routeData != null)
            {
                string routeDataKey = routeData.DataTokens["key"]?.ToString()?.ToLower();
                if (!string.IsNullOrEmpty(routeDataKey))
                {
                    string signal           = routeData.Values[Constants.RouteSegmentConstants.RouteModuleSignalParameter]?.ToString();
                    bool   isWriteOperation = routeDataKey.Equals(Constants.RouteSegmentConstants.RouteDataTokenSignalWrite);
                    return(PrepareSignals(inputModelParameters.Module, signal, isWriteOperation, inputModelParameters));
                }
            }
            //Return only empty collection
            return(new ProcessingContextCollection(new List <IProcessingContext>()));
        }
示例#8
0
        public override IProcessingContextCollection GenerateProcessingContexts(KraftGlobalConfigurationSettings kraftGlobalConfigurationSettings, string kraftRequestFlagsKey, ISecurityModel securityModel = null)
        {
            Dictionary <string, object> files       = ResolveMultipartAsJson();
            List <InputModel>           inputModels = new List <InputModel>();

            if (files != null)
            {
                foreach (string key in files.Keys)
                {
                    if (files[key] is IPostedFile postedFile)
                    {
                        if (securityModel == null)
                        {
                            if (kraftGlobalConfigurationSettings.GeneralSettings.AuthorizationSection.RequireAuthorization)
                            {
                                securityModel = new SecurityModel(_HttpContext);
                            }
                            else
                            {
                                securityModel = new SecurityModelMock(kraftGlobalConfigurationSettings.GeneralSettings.AuthorizationSection);
                            }
                        }
                        InputModelParameters inputModelParameters = CreateBaseInputModelParameters(kraftGlobalConfigurationSettings, securityModel);
                        inputModelParameters             = ExtendInputModelParameters(inputModelParameters);
                        inputModelParameters.LoaderType |= ELoaderType.DataLoader; //TODO Not override passed in flags

                        foreach (string metaInfoKey in postedFile.MetaInfo.Keys)
                        {
                            inputModelParameters.Data.Add(metaInfoKey, postedFile.MetaInfo[metaInfoKey]);
                        }
                        inputModelParameters.Data.Add(key, postedFile);

                        inputModels.Add(new InputModel(inputModelParameters));
                    }
                }
            }
            _ProcessingContextCollection = new ProcessingContextCollection(CreateProcessingContexts(inputModels));
            return(_ProcessingContextCollection);
        }
示例#9
0
        public IProcessingContextCollection GenerateProcessingContexts(string kraftRequestFlagsKey, ISecurityModel securityModel = null)
        {
            InputModelParameters inputModelParameters = new InputModelParameters();

            inputModelParameters.KraftGlobalConfigurationSettings = _KraftGlobalConfigurationSettings;
            inputModelParameters.SecurityModel    = securityModel;
            inputModelParameters.Module           = _InputModel.Module;
            inputModelParameters.Nodeset          = _InputModel.Nodeset;
            inputModelParameters.Nodepath         = _InputModel.Nodepath;
            inputModelParameters.IsWriteOperation = _InputModel.IsWriteOperation;
            inputModelParameters.QueryCollection  = _InputModel.QueryCollection;
            inputModelParameters.Data             = _InputModel.Data;
            inputModelParameters.LoaderType       = ELoaderType.DataLoader;

            IProcessingContext processingContext = new ProcessingContext(this);

            processingContext.InputModel = new InputModel(inputModelParameters);
            List <IProcessingContext> processingContexts = new List <IProcessingContext>(1);

            processingContexts.Add(processingContext);
            return(new ProcessingContextCollection(processingContexts));
        }
示例#10
0
        public override IProcessingContextCollection GenerateProcessingContexts(KraftGlobalConfigurationSettings kraftGlobalConfigurationSettings, string kraftRequestFlagsKey, ISecurityModel securityModel = null)
        {
            if (securityModel == null)
            {
                if (kraftGlobalConfigurationSettings.GeneralSettings.AuthorizationSection.RequireAuthorization)
                {
                    securityModel = new SecurityModel(_HttpContext);
                }
                else
                {
                    securityModel = new SecurityModelMock(kraftGlobalConfigurationSettings.GeneralSettings.AuthorizationSection);
                }
            }
            InputModelParameters inputModelParameters = CreateBaseInputModelParameters(kraftGlobalConfigurationSettings, securityModel);

            inputModelParameters                = ExtendInputModelParameters(inputModelParameters);
            inputModelParameters.Data           = GetBodyJson <Dictionary <string, object> >(_HttpContext.Request);
            inputModelParameters.FormCollection = _FormCollection;
            inputModelParameters.LoaderType     = GetLoaderType(kraftRequestFlagsKey);
            if (inputModelParameters.LoaderType == ELoaderType.None)
            {
                inputModelParameters.LoaderType = ELoaderType.ViewLoader;
            }
            RouteData routeData = _HttpContext.GetRouteData();

            if (routeData != null)
            {
                inputModelParameters.BindingKey = routeData.Values[Constants.RouteSegmentConstants.RouteBindingkey] as string;
            }
            IProcessingContext processingContext = new ProcessingContext(this);

            processingContext.InputModel = new InputModel(inputModelParameters);
            List <IProcessingContext> processingContexts = new List <IProcessingContext>(1);

            processingContexts.Add(processingContext);
            _ProcessingContextCollection = new ProcessingContextCollection(processingContexts);
            return(_ProcessingContextCollection);
        }
示例#11
0
        public override IProcessingContextCollection GenerateProcessingContexts(KraftGlobalConfigurationSettings kraftGlobalConfigurationSettings, string kraftRequestFlagsKey, ISecurityModel securityModel = null)
        {
            if (securityModel == null)
            {
                if (kraftGlobalConfigurationSettings.GeneralSettings.AuthorizationSection.RequireAuthorization)
                {
                    securityModel = new SecurityModel(_HttpContext);
                }
                else
                {
                    securityModel = new SecurityModelMock(kraftGlobalConfigurationSettings.GeneralSettings.AuthorizationSection);
                }
            }
            InputModelParameters inputModelParameters = CreateBaseInputModelParameters(kraftGlobalConfigurationSettings, securityModel);

            inputModelParameters                = ExtendInputModelParameters(inputModelParameters);
            inputModelParameters.Data           = GetBodyJson <Dictionary <string, object> >(_HttpContext.Request);
            inputModelParameters.FormCollection = _FormCollection;
            inputModelParameters.LoaderType     = GetLoaderType(kraftRequestFlagsKey);
            _ProcessingContextCollection        = new ProcessingContextCollection(CreateProcessingContexts(new List <InputModel> {
                new InputModel(inputModelParameters)
            }));
            return(_ProcessingContextCollection);
        }
示例#12
0
        /// <summary>
        /// Calls and executes plugin.
        /// </summary>
        /// <param name="execContext">Data loader context.</param>
        /// <param name="parameters">Dictionary or custom parameters of the Call Data Loader.</param>
        /// <param name="isWriteOperation">boolean parameter - the type of operation.</param>
        /// <returns>The called plugin result.</returns>
        private List <Dictionary <string, object> > ExecuteOperation(IDataLoaderContext execContext, Dictionary <string, object> parameters, bool isWriteOperation)
        {
            List <Dictionary <string, object> > result = new List <Dictionary <string, object> >();
            CustomSettings customSettings = new CustomSettings(execContext, isWriteOperation);

            if (execContext.ProcessingContext.InputModel.ProcessingContextRef is RequestExecutor requestExecutor)
            {
                parameters = ConcatDictionaries(parameters, GetChildrenFromKeyRecursive(execContext.ProcessingContext.InputModel.Data, execContext.CurrentNode.NodeKey) as IDictionary <string, object>);

                object getChildren = GetChildrenFromKeyRecursive(execContext.ProcessingContext.InputModel.Data, execContext.CurrentNode.NodeKey);

                if (getChildren != null && getChildren is IDictionary <string, object> children)
                {
                    parameters = ConcatDictionaries(parameters, children);
                }
                else
                {
                    parameters = ConcatDictionaries(parameters, execContext.ProcessingContext.InputModel.Data);

                    KraftLogger.LogDebug($"Key '{execContext.CurrentNode.NodeKey}' was not passed in the request data. The CallDataLoader will be executed with input model's data. For the request to node '{execContext.ProcessingContext.InputModel.Module}.{execContext.ProcessingContext.InputModel.NodeSet}.{execContext.CurrentNode.NodeKey}'.");
                }

                InputModelParameters inputModelParameters = new InputModelParameters()
                {
                    Module         = customSettings.ModuleValue,
                    Nodeset        = customSettings.NodesetValue,
                    Nodepath       = customSettings.NodepathValue,
                    Data           = parameters,
                    FormCollection = execContext.ParentResult,
                    KraftGlobalConfigurationSettings = execContext.ProcessingContext.InputModel.KraftGlobalConfigurationSettings,
                    IsWriteOperation = customSettings.OperationValue,
                    LoaderType       = execContext.ProcessingContext.InputModel.LoaderType,
                    SecurityModel    = execContext.ProcessingContext.InputModel.SecurityModel,
                    Server           = execContext.ProcessingContext.InputModel.Server != default(ReadOnlyDictionary <string, object>) ? execContext.ProcessingContext.InputModel.Server.ToDictionary(item => item.Key, item => item.Value) : null
                };

                IProcessingContext processingContext = new ProcessingContext(execContext.ProcessingContext.ProcessorHandler)
                {
                    InputModel = new InputModel(inputModelParameters)
                };

                requestExecutor.ExecuteReEntrance(processingContext, false);

                if (!processingContext.ReturnModel.Status.IsSuccessful)
                {
                    string message = string.Empty;
                    string space   = " ";

                    execContext.ProcessingContext.ReturnModel.Status.IsSuccessful = processingContext.ReturnModel.Status.IsSuccessful;

                    processingContext.ReturnModel.Status.StatusResults.ForEach(statusResult =>
                    {
                        if (message.Length != 0)
                        {
                            message += space + statusResult.Message;
                        }
                        else
                        {
                            message += statusResult.Message;
                        }
                    });

                    throw new Exception(message);
                }

                if (processingContext.ReturnModel.Data is List <Dictionary <string, object> > resultListOfDictionary)
                {
                    result = resultListOfDictionary;
                }
                else if (processingContext.ReturnModel.Data is Dictionary <string, object> resultDictionary)
                {
                    result.Add(resultDictionary);
                }
            }

            return(result);
        }