Example #1
0
        /// <summary>
        /// Get query info
        /// </summary>
        /// <param name="templateQueryInfo">Template node query info</param>
        /// <returns>Query info</returns>
        public List <QueryInfo> GetQueryByTemplateNodeQueryInfo(TemplateNodeQueryInfo templateQueryInfo)
        {
            log.InfoFormat("templateQueryInfo:QueryFileName:'{0}';QueryName:'{1}'",
                           templateQueryInfo.QueryFileName,
                           templateQueryInfo.QueryName
                           );

            string key = templateQueryInfo.QueryFileName + "|" + templateQueryInfo.QueryName;

            if (!this._queriesCache.Any(x => x.Item1 == key))
            {
                log.DebugFormat("QueryFileName:'{0}'",
                                FilesProvider.GetQueryFileName(
                                    templateQueryInfo.QueryFileName,
                                    templateQueryInfo.TemplateNode.ConnectionGroup.TemplateDir
                                    )
                                );

                List <QueryInfo> queries =
                    LoadQueries(FilesProvider.GetQueryFileName(
                                    templateQueryInfo.QueryFileName,
                                    templateQueryInfo.TemplateNode.ConnectionGroup.TemplateDir
                                    ),
                                templateQueryInfo.TemplateNode.ConnectionGroup.IsExternal
                                );

                foreach (QueryInfo query in queries)
                {
                    log.InfoFormat("query:name:'{0}';source:'{1}'",
                                   query.Name,
                                   query.Source
                                   );

                    string curKey = templateQueryInfo.QueryFileName + "|" + query.Name;

                    if (!this._queriesCache.Any(x => x.Item1 == curKey && x.Item2.Source == query.Source))
                    {
                        this._queriesCache.Add(new Tuple <string, QueryInfo>(curKey, query));
                    }
                }
            }

            if (!this._queriesCache.Any(x => x.Item1 == key))
            {
                throw new ArgumentException(
                          string.Format(
                              LocaleManager.GetLocalizedText(
                                  LocaleManager.Exceptions,
                                  "querynotfound"
                                  ),
                              key
                              )
                          );
            }

            return(this._queriesCache.Where(x => x.Item1 == key).Select(x => x.Item2).ToList());
        }
Example #2
0
        /// <summary>
        /// Load queries with signature check
        /// </summary>
        /// <param name="filename">Xml-file name</param>
        /// <param name="isExternal">Is opened from user file template</param>
        /// <returns>Queries list</returns>
        public List <QueryInfo> LoadQueries(string filename, bool isExternal)
        {
            log.InfoFormat("filename:'{0}',isExternal:'{1}'",
                           filename ?? "<null>",
                           isExternal
                           );

            List <string>   wrongQueries    = new List <string>();
            CryptoProcessor cryptoProcessor = null;

            try
            {
                if (AppVersionHelper.IsNotDebug())
                {
                    cryptoProcessor = new CryptoProcessor(
                        Settings.SystemSettings.PublicKeyXmlSign,
                        Settings.SystemSettings.PrivateKeyXmlDecrypt
                        );
                }
            }
            catch (System.Security.XmlSyntaxException ex)
            {
                log.Error(ex);
            }
            catch (Exception ex)
            {
                log.Error(ex);
                log.Error(ex.GetBaseException());
            }

            List <QueryInfo> queries = QueriesLoader.LoadFromXml(filename, cryptoProcessor, isExternal);

            for (int i = queries.Count - 1; i >= 0; i--)
            {
                QueryInfo query = queries[i];

                log.InfoFormat("query:'{0}'", query);

                if (AppVersionHelper.IsNotDebug() && !isExternal)
                {
                    for (int j = query.DatabaseSelect.Count - 1; j >= 0; j--)
                    {
                        QueryItemInfo queryItem = query.DatabaseSelect[j];

                        if (cryptoProcessor != null && !cryptoProcessor.Verify(queryItem.Text, queryItem.Signature))
                        {
                            if (!wrongQueries.Contains(query.Name))
                            {
                                wrongQueries.Add(query.Name);
                            }

                            query.DatabaseSelect.RemoveAt(j);
                        }
                    }

                    for (int j = query.Items.Count - 1; j >= 0; j--)
                    {
                        QueryItemInfo queryItem = query.Items[j];

                        log.InfoFormat("queryItem.Text:'{0}'", queryItem.Text);

                        if (cryptoProcessor != null && !cryptoProcessor.Verify(queryItem.Text, queryItem.Signature))
                        {
                            if (!wrongQueries.Contains(query.Name))
                            {
                                wrongQueries.Add(query.Name);
                            }

                            query.Items.RemoveAt(j);
                        }
                    }
                }

                if (query.Items.Count == 0)
                {
                    queries.RemoveAt(i);
                }
            }

            if ((Settings.WarnAboutUnsignedQuery) && (wrongQueries.Count > 0))
            {
                StringBuilder sb = new StringBuilder();

                sb.Append(filename + Environment.NewLine + Environment.NewLine);

                foreach (string wrongQuery in wrongQueries)
                {
                    sb.Append(wrongQuery + Environment.NewLine);
                }

                MessageBox.Show(sb.ToString(), LocaleManager.GetLocalizedText(LocaleManager.Exceptions, "wrongQueriesSignatures"));
            }

            return(queries);
        }