Exemplo n.º 1
0
        public static LoginTickets GetLoginTicketFromXML(XmlDocument document, LoginTicketRequests request)
        {
            string LoginTicketResponseNodeName = "loginTicketResponse";
            string HeaderNodeName         = "header";
            string SourceNodeName         = "source";
            string DestinationNodeName    = "destination";
            string UniqueIDNodeName       = "uniqueId";
            string GenerationTimeNodeName = "generationTime";
            string ExpirationTimeNodeName = "expirationTime";
            string CredentialsNodeName    = "credentials";
            string TokenNodeName          = "token";
            string SignNodeName           = "sign";



            LoginTickets result = null;

            XmlNode  headerNode      = document[LoginTicketResponseNodeName][HeaderNodeName];
            XmlNode  credentialsNode = document[LoginTicketResponseNodeName][CredentialsNodeName];
            DateTime generationTime  = XmlConvert.ToDateTime(headerNode[GenerationTimeNodeName].InnerText, XmlDateTimeSerializationMode.RoundtripKind);
            DateTime expirationTime  = XmlConvert.ToDateTime(headerNode[ExpirationTimeNodeName].InnerText, XmlDateTimeSerializationMode.RoundtripKind);
            long     requestID       = XmlConvert.ToInt64(headerNode[UniqueIDNodeName].InnerText);



            //TODO: validar que lo que devolvio el WS sea válido (expiration, source, destination, etc)
            result = new LoginTickets(requestID, request, generationTime, expirationTime, credentialsNode[TokenNodeName].InnerText, credentialsNode[SignNodeName].InnerText);
            //Save(result);

            return(result);
        }
Exemplo n.º 2
0
        private static XmlDocument GenerateLoginTicketRequestXML(LoginTicketRequests loginTicketRequest)
        {
            XmlQualifiedName qualifiedName = new XmlQualifiedName(loginTicketRequestNodeName);
            //TODO: SACAR EL hardcode del XSD
            //XMLGenerator generator = new XMLGenerator(@"C:\Vero\Proyectos\MFD\MFDHOMO\MFD\LoginTicketRequest.xsd", qualifiedName);
            XMLGenerator  generator = new XMLGenerator(AppDomain.CurrentDomain.BaseDirectory + @"LoginTicketRequest.xsd", qualifiedName);
            Stream        xmlStream = new MemoryStream();
            XmlTextWriter writer    = new XmlTextWriter(xmlStream, Encoding.UTF8);

            writer.Formatting = Formatting.Indented;
            generator.WriteXml(writer);
            XmlDocument document = new XmlDocument();

            xmlStream.Seek(0, SeekOrigin.Begin);
            XmlReader reader = new XmlTextReader(xmlStream);

            document.Load(reader);
            reader.Close();
            writer.Close();
            xmlStream.Close(); xmlStream.Dispose();

            XmlElement headerNode = document[loginTicketRequestNodeName][HeaderNodeName];

            headerNode[SourceNodeName].InnerText      = loginTicketRequest.Empresa.DNOrigen;
            headerNode[DestinationNodeName].InnerText = loginTicketRequest.Empresa.DNDestino;
            //TODO: ver cual debe ser el loginTicketRequest.Id
            headerNode[UniqueIDNodeName].InnerText       = loginTicketRequest.Id.ToString();
            headerNode[GenerationTimeNodeName].InnerText = XmlConvert.ToString(loginTicketRequest.GenerationTime, XmlDateTimeSerializationMode.RoundtripKind);
            headerNode[ExpirationTimeNodeName].InnerText = XmlConvert.ToString(loginTicketRequest.ExpirationTime, XmlDateTimeSerializationMode.RoundtripKind);
            document[loginTicketRequestNodeName][ServiceNodeName].InnerText = "wsfe";

            return(document);
        }
Exemplo n.º 3
0
        public LoginTicketRequests GenerateLoginTicket(Empresas empresa)
        {
            LoginTicketRequests loginTicketRequest = new LoginTicketRequests(empresa);

            Save(loginTicketRequest);
            return(loginTicketRequest);
        }
Exemplo n.º 4
0
        public static XmlDocument GenerateLoginTicketRequestXML(LoginTicketRequests loginTicketRequest)
        {
            const string loginTicketRequestNodeName = "loginTicketRequest";
            const string HeaderNodeName             = "header";
            const string ServiceNodeName            = "service";
            const string SourceNodeName             = "source";
            const string DestinationNodeName        = "destination";
            const string UniqueIDNodeName           = "uniqueId";
            const string GenerationTimeNodeName     = "generationTime";
            const string ExpirationTimeNodeName     = "expirationTime";


            XmlQualifiedName qualifiedName = new XmlQualifiedName(loginTicketRequestNodeName);
            //TODO: SACAR EL hardcode del XSD
            XMLGenerator  generator = new XMLGenerator("LoginTicketRequest.xsd", qualifiedName);
            Stream        xmlStream = new MemoryStream();
            XmlTextWriter writer    = new XmlTextWriter(xmlStream, Encoding.UTF8);

            writer.Formatting = Formatting.Indented;
            generator.WriteXml(writer);
            XmlDocument document = new XmlDocument();

            xmlStream.Seek(0, SeekOrigin.Begin);
            XmlReader reader = new XmlTextReader(xmlStream);

            document.Load(reader);
            reader.Close();
            writer.Close();
            xmlStream.Close(); xmlStream.Dispose();

            XmlElement headerNode = document[loginTicketRequestNodeName][HeaderNodeName];

            headerNode[SourceNodeName].InnerText      = loginTicketRequest.Empresa.DNOrigen;
            headerNode[DestinationNodeName].InnerText = loginTicketRequest.Empresa.DNDestino;
            //TODO: ver cual debe ser el loginTicketRequest.Id
            headerNode[UniqueIDNodeName].InnerText       = loginTicketRequest.Id.ToString();
            headerNode[GenerationTimeNodeName].InnerText = XmlConvert.ToString(loginTicketRequest.GenerationTime, XmlDateTimeSerializationMode.RoundtripKind);
            headerNode[ExpirationTimeNodeName].InnerText = XmlConvert.ToString(loginTicketRequest.ExpirationTime, XmlDateTimeSerializationMode.RoundtripKind);
            document[loginTicketRequestNodeName][ServiceNodeName].InnerText = "wsfe";


            return(document);
        }
Exemplo n.º 5
0
        public XmlDocument GenerateLoginTicketRequestXML(LoginTicketRequests loginTicketRequest)
        {
            XmlQualifiedName qualifiedName = new XmlQualifiedName(LoginTicketRequestNodeName);
            //TODO: SACAR EL hardcode del XSD
            XMLGenerator  generator = new XMLGenerator("LoginTicketRequest.xsd", qualifiedName);
            Stream        xmlStream = new MemoryStream();
            XmlTextWriter writer    = new XmlTextWriter(xmlStream, Encoding.UTF8);

            writer.Formatting = Formatting.Indented;
            generator.WriteXml(writer);
            XmlDocument document = new XmlDocument();

            xmlStream.Seek(0, SeekOrigin.Begin);
            XmlReader reader = new XmlTextReader(xmlStream);

            document.Load(reader);
            reader.Close();
            writer.Close();
            xmlStream.Close(); xmlStream.Dispose();

            EmpresasBL empresasBL = new EmpresasBL();

            empresasBL.SetParameters(DBConnection);


            XmlElement headerNode = document[LoginTicketRequestNodeName][HeaderNodeName];

            headerNode[SourceNodeName].InnerText         = loginTicketRequest.Empresa.DNOrigen;
            headerNode[DestinationNodeName].InnerText    = loginTicketRequest.Empresa.DNDestino;
            headerNode[UniqueIDNodeName].InnerText       = loginTicketRequest.Id.ToString();
            headerNode[GenerationTimeNodeName].InnerText = XmlConvert.ToString(loginTicketRequest.GenerationTime, XmlDateTimeSerializationMode.RoundtripKind);
            headerNode[ExpirationTimeNodeName].InnerText = XmlConvert.ToString(loginTicketRequest.ExpirationTime, XmlDateTimeSerializationMode.RoundtripKind);
            document[LoginTicketRequestNodeName][ServiceNodeName].InnerText = GeneralSettings.Instance.WSNegocio;

            //writer = new XmlTextWriter("c:\\pepe.xml",Encoding.UTF8);
            //writer.Formatting = Formatting.Indented;
            //document.WriteTo(writer);
            //writer.Flush();
            //writer.Close();
            return(document);
        }
Exemplo n.º 6
0
        private static LoginTickets GetLoginTicket(Empresas empresa)
        {
            LoginTickets result = null;
            string       ntpServer;
            NTPClient    ntp;

            if (loginTicketsBL != null)
            {
                result    = loginTicketsBL.GetCurrentLoginTicket(empresa);
                ntpServer = GeneralSettings.Instance.NTPServer;
            }
            if (result == null)
            {
                //Sincronización de reloj por NTP
                ntp = new NTPClient("time.afip.gov.ar");
                ntp.Connect(true);

                XmlDocument         xmlDocument;
                LoginTicketRequests loginTicketRequest;
                //Generacion del Ticket de Requerimiento de Acceso
                if (loginTicketRequestsBL != null)
                {
                    loginTicketRequest = loginTicketRequestsBL.GenerateLoginTicket(empresa);
                    xmlDocument        = loginTicketRequestsBL.GenerateLoginTicketRequestXML(loginTicketRequest);
                }
                else
                {
                    loginTicketRequest = new LoginTicketRequests(empresa);
                    xmlDocument        = GenerateLoginTicketRequestXML(loginTicketRequest);
                }
                // Conversion del XML a bytes
                StringWriter sw = new StringWriter();
                xmlDocument.WriteTo(new XmlTextWriter(sw));
                byte[] loginTicketRequestXml = new ASCIIEncoding().GetBytes(sw.ToString());

                //Firma del Ticket de Requerimiento de Acceso
                X509Certificate2 certOrigen            = GetSenderCertificate(empresa);
                byte[]           loginTicketRequestCMS = Sign(loginTicketRequestXml, certOrigen);

                //Codificacion a base 64
                //string loginTicketRequestBase64 = Convert.ToBase64String(encryptedTicket);
                string loginTicketRequestBase64 = Convert.ToBase64String(loginTicketRequestCMS);

                //Transmisión del Ticket de Requerimiento de Acceso al WSAA
                LoginCMSService loginService = new LoginCMSService();
                ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate);
                string loginServiceResponse = loginService.loginCms(loginTicketRequestBase64);

                //Extracción del Ticket de Acceso devuelto por el WSAA
                XmlDocument loginTicketXml = new XmlDocument();
                loginTicketXml.LoadXml(loginServiceResponse);
                if (loginTicketRequestsBL != null)
                {
                    result = loginTicketsBL.GetLoginTicketFromXML(loginTicketXml, loginTicketRequest);
                }
                else
                {
                    result = GetLoginTicketFromXML(loginTicketXml, null);
                }
            }
            return(result);
        }