Esempio n. 1
0
        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;
        }
Esempio n. 2
0
        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;
            }
        }