public static void Setup() { var builder = new ContainerBuilder(); builder.RegisterType <HyperwayOutboundComponent>().AsSelf(); builder.RegisterType <TransmissionRequestBuilder>().AsSelf(); builder.RegisterType <NoSbdhParser>().As <IContentDetector>(); // Lookup module registration builder.RegisterModule(new ModeModule()); // Configuration builder.RegisterModule(new CertificateModule()); // Keystore builder.RegisterModule(new LookupModule()); builder.RegisterModule(new TransmissionModule()); builder.RegisterModule(new As2OutboundModule()); builder.RegisterModule(new TimestampModule()); builder.RegisterModule(new PersisterModule()); // Manual registration builder.RegisterType <SMimeMessageFactory>().AsSelf().InstancePerLifetimeScope(); // builder.RegisterType <LookupClient>().AsSelf(); builder.RegisterType <BusdoxLocator>().As <IMetadataLocator>(); builder.RegisterType <MultiReader>().As <IMetadataReader>(); builder.RegisterType <DifiCertificateValidator>().As <ICertificateValidator>(); builder.RegisterType <IMetadataProvider>().AsSelf(); builder.RegisterType <MessageSenderFactory>().AsSelf(); builder.RegisterType <NoopStatisticsService>().As <IStatisticsService>(); builder.RegisterType <DefaultTransmissionVerifier>().As <ITransmissionVerifier>(); builder.RegisterType <TransmissionRequestBuilder>().AsSelf(); builder.RegisterType <Mx.Peppol.Lookup.Provider.DefaultProvider>().As <IMetadataProvider>(); builder.Register( (c) => { var config = c.Resolve <Mode>(); return(config.Defaults.Transports.Where(x => x.Enabled).OrderBy(x => x.Weight) .Select(x => TransportProfile.Of(x.Profile)).ToList()); }).Keyed <List <TransportProfile> >("prioritized") .As <List <TransportProfile> >(); // prioritized builder.RegisterType <Bdxr201605Reader>() .Keyed <Bdxr201605Reader>("reader-protocols") .As <IMetadataReader>(); builder.RegisterType <BusdoxReader>() .Keyed <BusdoxReader>("reader-protocols") .As <IMetadataReader>(); Container = builder.Build(); CryptographyContext.Register(() => Container.Resolve <HyperwaySecureMimeContext>()); }
public IPotentiallySigned <ServiceMetadata> ParseServiceMetadata(FetcherResponse fetcherResponse) { try { XmlDocument doc = new XmlDocument(); doc.Load(fetcherResponse.InputStream); var o = ClassFactory.FromXmlStream(fetcherResponse.InputStream); X509Certificate signer = null; if (o is SignedServiceMetadata) { signer = XmldsigVerifier.Verify(doc); } ServiceInformationType serviceInformation = ((tns.ServiceMetadata)o).ServiceInformation; List <ProcessMetadata <Endpoint> > processMetadatas = new List <ProcessMetadata <Endpoint> >(); foreach (ProcessType processType in serviceInformation.ProcessList.Process) { List <Endpoint> endpoints = new List <Endpoint>(); foreach (EndpointType endpointType in processType.ServiceEndpointList.Endpoint) { endpoints.Add( Endpoint.Of( TransportProfile.Of(endpointType.TransportProfile), new Uri(endpointType.EndpointURI), this.CertificateInstance(endpointType.Certificate.Data))); } processMetadatas.Add( ProcessMetadata <Endpoint> .Of( ProcessIdentifier.Of( processType.ProcessIdentifier.PrimitiveValue, Scheme.Of(processType.ProcessIdentifier.Scheme)), endpoints)); } return(Signed <ServiceMetadata> .Of( ServiceMetadata.Of( ParticipantIdentifier.Of( serviceInformation.ParticipantIdentifier.PrimitiveValue, Scheme.Of(serviceInformation.ParticipantIdentifier.Scheme)), DocumentTypeIdentifier.Of( serviceInformation.DocumentIdentifier.PrimitiveValue, Scheme.Of(serviceInformation.DocumentIdentifier.Scheme)), processMetadatas), signer)); } catch (Exception e) when(e is CertificateException | e is IOException) { throw new Exception(e.Message, e); } }
public MessageSenderFactory(IComponentContext injector, Mode config) { this.injector = injector; this.configMap = config.Defaults.Transports.Where(x => x.Enabled).OrderBy(x => x.Weight) .ToDictionary(t => TransportProfile.Of(t.Profile), x => x); this.prioritizedTransportProfiles = config.Defaults.Transports.Where(x => x.Enabled).OrderBy(x => x.Weight) .Select(x => TransportProfile.Of(x.Profile)).ToList(); // Logging list of prioritized transport profiles supported. Logger.Info("Prioritized list of transport profiles:"); this.prioritizedTransportProfiles.ForEach(tp => Logger.InfoFormat("=> {0}", tp.Identifier)); }
public IPotentiallySigned <ServiceMetadata> ParseServiceMetadata(FetcherResponse fetcherResponse) { try { XmlDocument doc = new XmlDocument(); doc.PreserveWhitespace = true; doc.Load(fetcherResponse.InputStream); var o = ClassFactory.FromXmlElement(doc.DocumentElement); Xml.Busdox.tns.ServiceMetadata serviceMetadata = o as Xml.Busdox.tns.ServiceMetadata; X509Certificate signer = null; if (o is SignedServiceMetadata) { signer = XmldsigVerifier.Verify(doc); serviceMetadata = ((SignedServiceMetadata)o).ServiceMetadata; } if (serviceMetadata == null) { throw new LookupException("ServiceMetadata element not found"); } ServiceInformationType serviceInformation = serviceMetadata.ServiceInformation; List <ProcessMetadata <Endpoint> > processMetadatas = new List <ProcessMetadata <Endpoint> >(); foreach (ProcessType processType in serviceInformation.ProcessList.Process) { List <Endpoint> endpoints = new List <Endpoint>(); foreach (EndpointType endpointType in processType.ServiceEndpointList.Endpoint) { var certificate = this.CertificateInstance(Convert.FromBase64String(endpointType.Certificate)); var endpointUri = new Uri(endpointType.EndpointReference.Address.PrimitiveValue); var profile = TransportProfile.Of(endpointType.TransportProfile); endpoints.Add(Endpoint.Of(profile, endpointUri, certificate)); } processMetadatas.Add( ProcessMetadata <Endpoint> .Of( ProcessIdentifier.Of( processType.ProcessIdentifier.PrimitiveValue, Scheme.Of(processType.ProcessIdentifier.Scheme)), endpoints)); } return(Signed <ServiceMetadata> .Of( ServiceMetadata.Of( ParticipantIdentifier.Of( serviceInformation.ParticipantIdentifier.PrimitiveValue, Scheme.Of(serviceInformation.ParticipantIdentifier.Scheme)), DocumentTypeIdentifier.Of( serviceInformation.DocumentIdentifier.PrimitiveValue, Scheme.Of(serviceInformation.DocumentIdentifier.Scheme)), processMetadatas), signer)); } catch (Exception e) when(e is CertificateException | e is IOException) { throw new Exception(e.Message, e); } }