public override List<DatabaseUser> CarregaConexoes(string nomeProvedor)
        {
            try
            {
                var sh1 = new HashSha1();
                var pathXml = string.Format("{0}\\conexoes.xml", AppDomain.CurrentDomain.BaseDirectory);
                var servidores = new List<DatabaseUser>();

                if (File.Exists(pathXml))
                {
                    if (SerializerHelper.VerificaXml(pathXml))
                    {
                        var xdoc = XDocument.Load(pathXml);

                        var conexoes = from conexao in xdoc.Descendants("conexoes")
                                       select new
                                                  {
                                                      Children = conexao.Descendants("conexao")
                                                  };

                        servidores.AddRange(from conexao in conexoes
                                            from cnn in conexao.Children
                                            where cnn != null 
                                            select new DatabaseUser
                                                       {
                                                           ServerAddress = cnn.Element("servidor").Value,
                                                           DatabaseName = cnn.Element("database").Value,
                                                           UserName = cnn.Element("usuario").Value,
                                                           Password = sh1.Descriptografa(cnn.Element("senha").Value.Trim()),
                                                           Port = cnn.Element("porta").ToString().ToInt32(),
                                                           NomeProvedor = cnn.Element("nomeProvedor").Value
                                                       });
                    }
                }
                return servidores.Where(p => p.NomeProvedor == nomeProvedor).ToList();
            }
            catch
            {
                throw;
            }
        }
 public DatabaseHistory()
 {
     _sh1 = new HashSha1();
     var exeDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
     if (exeDir != null) Directory.SetCurrentDirectory(exeDir);
 }
        public override void SalvaConexao(DatabaseUser dadosLogin)
        {
            var sh1 = new HashSha1();
            var pathXml = string.Format("{0}\\conexoes.xml", AppDomain.CurrentDomain.BaseDirectory);
            var existe = System.IO.File.Exists(pathXml);
            var xmlDoc = new XmlDocument();

            if (dadosLogin==null)
            {
                return;
            }

            try
            {
                if (ValidaExistente(CarregaConexoes(dadosLogin.NomeProvedor), dadosLogin))
                {
                    var doc = XElement.Load(pathXml);

                    var singleBook = (from b in doc.Elements("conexao")
                                      where b.Element("servidor").Value == dadosLogin.ServerAddress
                                            && b.Element("usuario").Value == dadosLogin.UserName
                                      select b);

                    foreach (var xe in singleBook)
                    {
                        xe.SetElementValue("senha", sh1.Criptografa(dadosLogin.Password));
                        xe.SetElementValue("data", XmlConvert.ToString(DateTime.Now, XmlDateTimeSerializationMode.Local));
                    }

                    var xmlSemAssinatura = Regex.Replace(doc.ToString(), @"<Signature(.|\n)*?Signature>", string.Empty);

                    SerializerHelper.AssinaXml(xmlSemAssinatura, pathXml);
                }
                else
                {
                    if (existe)
                    {
                        xmlDoc.Load(pathXml);
                    }
                    else
                    {
                        xmlDoc.AppendChild(xmlDoc.CreateXmlDeclaration("1.0", "ISO-8859-1", "no"));
                    }

                    var maquinaId = xmlDoc.CreateElement("maquina");
                    var servidor = xmlDoc.CreateElement("servidor");
                    var database = xmlDoc.CreateElement("database");
                    var usuario = xmlDoc.CreateElement("usuario");
                    var porta = xmlDoc.CreateElement("porta");
                    var senha = xmlDoc.CreateElement("senha");
                    var nomeProvedor = xmlDoc.CreateElement("nomeProvedor");

                    maquinaId.AppendChild(xmlDoc.CreateTextNode(dadosLogin.MachineId));
                    servidor.AppendChild(xmlDoc.CreateTextNode(dadosLogin.ServerAddress));
                    database.AppendChild(xmlDoc.CreateTextNode(dadosLogin.DatabaseName));
                    usuario.AppendChild(xmlDoc.CreateTextNode(dadosLogin.UserName));
                    senha.AppendChild(xmlDoc.CreateTextNode(sh1.Criptografa(dadosLogin.Password)));
                    porta.AppendChild(xmlDoc.CreateTextNode(dadosLogin.Port.ToString()));
                    nomeProvedor.AppendChild(xmlDoc.CreateTextNode(dadosLogin.NomeProvedor));

                    var dataConexao = xmlDoc.CreateElement("data");
                    dataConexao.AppendChild(xmlDoc.CreateTextNode(XmlConvert.ToString(DateTime.Now, XmlDateTimeSerializationMode.Local)));

                    var conexao = xmlDoc.CreateElement("conexao");
                    conexao.AppendChild(maquinaId);
                    conexao.AppendChild(servidor);
                    conexao.AppendChild(database);
                    conexao.AppendChild(usuario);
                    conexao.AppendChild(senha);
                    conexao.AppendChild(porta);
                    conexao.AppendChild(nomeProvedor);
                    conexao.AppendChild(dataConexao);

                    if (existe)
                    {
                        var conexoes = xmlDoc.SelectSingleNode("conexoes");
                        if (conexoes != null)
                        {
                            conexoes.AppendChild(conexao);
                            xmlDoc.AppendChild(conexoes);
                        }
                    }
                    else
                    {
                        var acoes = xmlDoc.CreateElement("conexoes");
                        acoes.AppendChild(conexao);
                        xmlDoc.AppendChild(acoes);
                    }
                    var xmlSemAssinatura = Regex.Replace(xmlDoc.OuterXml, @"<Signature(.|\n)*?Signature>", string.Empty);
                    SerializerHelper.AssinaXml(xmlSemAssinatura, pathXml);
                }
            }
            catch
            {
                throw;
            }
        }
 public RegistryHistory()
 {
     _sh1 = new HashSha1();
 }