/// <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()); }
/// <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); }