private void StartAgents() { List <Int64> resource = new List <Int64>(); //Separa os contextos String certPass = CATools.SHA1Checksum(Encoding.UTF8.GetBytes(config.fqdn)); OpenSSL.X509.X509Certificate cert = CATools.LoadCert(Convert.FromBase64String(config.client_cert), certPass); try { foreach (PluginConfig p in config.plugins) { if (p.uri.ToLower() == plugin.GetPluginId().AbsoluteUri.ToLower()) { Dictionary <String, Object> connectorConf = new Dictionary <String, Object>(); JsonGeneric pgConf = new JsonGeneric(); try { if (cert == null) { throw new Exception("Certificate is null"); } using (CryptApi cApi = CryptApi.ParsePackage(cert, Convert.FromBase64String(p.parameters))) pgConf.FromJsonString(Encoding.UTF8.GetString(cApi.clearData)); } catch (Exception ex) { throw new Exception("Decrypt error: " + ex.Message); } if ((pgConf.data == null) || (pgConf.data.Count == 0)) { continue; } Int32 kCol = pgConf.GetKeyIndex("key"); Int32 vCol = pgConf.GetKeyIndex("value"); foreach (String[] d1 in pgConf.data) { PluginBase.FillConfig(plugin, ref connectorConf, d1[kCol], d1[vCol].ToString()); } /*if (!connectorConf.ContainsKey(d1[kCol])) * connectorConf.Add(d1[kCol], d1[vCol].ToString());*/ try { StartAgents(connectorConf); } catch (Exception ex) { TextLog.Log("PluginStarter", "{" + plugin.GetPluginId().AbsoluteUri + "} Error on start agent: " + ex.Message); } finally { connectorConf.Clear(); connectorConf = null; } } } } catch (Exception ex) { TextLog.Log("PluginStarter", "{" + plugin.GetPluginId().AbsoluteUri + "} Error on parse config: " + ex.Message); } cert = null; certPass = null; }
private void ExecuteConnector(Boolean deployOnly) { List <Int64> resource_plugin = new List <Int64>(); //Separa os contextos String certPass = CATools.SHA1Checksum(Encoding.UTF8.GetBytes(config.fqdn)); OpenSSL.X509.X509Certificate cert = CATools.LoadCert(Convert.FromBase64String(config.client_cert), certPass); try { foreach (PluginConfig p in config.plugins) { if (p.uri.ToLower() == plugin.GetPluginId().AbsoluteUri.ToLower()) { JsonGeneric pgConf = new JsonGeneric(); try { using (CryptApi cApi = CryptApi.ParsePackage(cert, Convert.FromBase64String(p.parameters))) pgConf.FromJsonString(Encoding.UTF8.GetString(cApi.clearData)); } catch (Exception ex) { throw new Exception("Decrypt error1 " + ex.Message); } finally { pgConf = null; } if (!resource_plugin.Contains(p.resource_plugin)) { resource_plugin.Add(p.resource_plugin); } } } foreach (Int64 rp in resource_plugin) { DebugLog("{" + plugin.GetPluginId().AbsoluteUri + "} Resource plugin " + rp); Dictionary <String, Object> connectorConf = new Dictionary <String, Object>(); List <PluginConnectorBaseDeployPackageMapping> mapping = new List <PluginConnectorBaseDeployPackageMapping>(); Boolean enableDeploy = false; Int64 r = 0; try { foreach (PluginConfig p in config.plugins) { if ((p.uri.ToLower() == plugin.GetPluginId().AbsoluteUri.ToLower()) && (p.resource_plugin == rp)) { r = p.resource; Dictionary <String, String> tmp = new Dictionary <string, string>(); foreach (PluginConfigMapping m in p.mapping) { mapping.Add(new PluginConnectorBaseDeployPackageMapping(m.data_name, m.data_type, m.is_id, m.is_unique_property, m.is_password, m.is_login, m.is_name)); } enableDeploy = p.enable_deploy; JsonGeneric pgConf = new JsonGeneric(); try { if (cert == null) { throw new Exception("Certificate is null"); } using (CryptApi cApi = CryptApi.ParsePackage(cert, Convert.FromBase64String(p.parameters))) pgConf.FromJsonString(Encoding.UTF8.GetString(cApi.clearData)); } catch (Exception ex) { throw new Exception("Decrypt error: " + ex.Message); } if ((pgConf.data == null) || (pgConf.data.Count == 0)) { continue; } Int32 kCol = pgConf.GetKeyIndex("key"); Int32 vCol = pgConf.GetKeyIndex("value"); if (!String.IsNullOrWhiteSpace(p.mail_domain)) { PluginBase.FillConfig(plugin, ref connectorConf, "iam_mail_domain", p.mail_domain); } //connectorConf.Add("iam_mail_domain", p.mail_domain); foreach (String[] d1 in pgConf.data) { PluginBase.FillConfig(plugin, ref connectorConf, d1[kCol], d1[vCol].ToString()); } /* * if (!connectorConf.ContainsKey(d1[kCol])) * connectorConf.Add(d1[kCol], d1[vCol].ToString());*/ } } //Deploy ocorre antes da importação //Para que na importação ja apareça os registros que foram publicados pelo deploy try { System.Reflection.Assembly asm = System.Reflection.Assembly.GetAssembly(plugin.GetType()); DirectoryInfo dirFrom = new DirectoryInfo(Path.Combine(basePath, "In\\" + Path.GetFileNameWithoutExtension(asm.Location) + "\\rp" + rp)); DebugLog("{" + plugin.GetPluginId().AbsoluteUri + "} RP =" + rp + ", r = " + r + " => path " + dirFrom.FullName + ", exists? " + dirFrom.Exists); if (enableDeploy) { //Verifica se há algo para processar if (dirFrom.Exists) { ProcessDeploy(r, rp, connectorConf, mapping); } } else { TextLog.Log("PluginStarter", "{" + plugin.GetPluginId().AbsoluteUri + "} Deploy disabled"); //Exclui os arquivos if (dirFrom.Exists) { foreach (FileInfo f in dirFrom.GetFiles("*.iamdat")) { f.Delete(); } } } } catch (Exception ex) { TextLog.Log("PluginStarter", "{" + plugin.GetPluginId().AbsoluteUri + "} Error on deploy: " + ex.Message); } if (!deployOnly) { try { //O import não é desabilitado, pois ele é necessário para relatório de consistência //o Engine não utilizará ele para adicionar novas entidades ProcessImport(r, rp, connectorConf, mapping); } catch (Exception ex) { TextLog.Log("PluginStarter", "{" + plugin.GetPluginId().AbsoluteUri + "} Error on import: " + ex.Message); } } executionCount++; if (executionCount > 50) { executionCount = 0; TextLog.Log("PluginStarter", "{" + plugin.GetPluginId().AbsoluteUri + "} Cleaning up proccess"); System.Diagnostics.Process.GetCurrentProcess().Kill(); } } catch (Exception ex) { TextLog.Log("PluginStarter", "{" + plugin.GetPluginId().AbsoluteUri + "} Error on parse config: " + ex.Message); } finally { connectorConf.Clear(); connectorConf = null; mapping.Clear(); mapping = null; } } } finally { cert = null; certPass = null; } }