示例#1
0
        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>());
        }
示例#2
0
        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);
            }
        }
示例#3
0
        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));
        }
示例#4
0
        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);
            }
        }