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); }
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); }
public LoginTicketRequests GenerateLoginTicket(Empresas empresa) { LoginTicketRequests loginTicketRequest = new LoginTicketRequests(empresa); Save(loginTicketRequest); return(loginTicketRequest); }
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); }
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); }
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); }