Ejemplo n.º 1
0
        /// <summary>
        /// Creates a new instance of the ATNA audit service
        /// </summary>
        public AtnaAuditService()
        {
            this.m_configuration = ApplicationServiceContext.Current.GetService <IConfigurationManager>().GetSection <AtnaConfigurationSection>();

            switch (this.m_configuration.Transport)
            {
            case AtnaTransportType.File:
                this.m_transporter = new FileSyslogTransport()
                {
                    EndPoint      = this.m_configuration.AuditTarget,
                    MessageFormat = this.m_configuration.Format
                };
                break;

            case AtnaTransportType.Stcp:
                this.m_transporter = new STcpSyslogTransport()
                {
                    ClientCertificate = this.m_configuration?.ClientCertificate?.Certificate,
                    EndPoint          = this.m_configuration.AuditTarget,
                    MessageFormat     = this.m_configuration.Format,
                    ServerCertificate = this.m_configuration?.ServerCertificate?.Certificate
                };
                break;

            case AtnaTransportType.Tcp:
                this.m_transporter = new TcpSyslogTransport()
                {
                    EndPoint      = this.m_configuration.AuditTarget,
                    MessageFormat = this.m_configuration.Format,
                };
                break;

            case AtnaTransportType.Udp:
                this.m_transporter = new UdpSyslogTransport()
                {
                    EndPoint      = this.m_configuration.AuditTarget,
                    MessageFormat = this.m_configuration.Format,
                };
                break;

            default:
                throw new InvalidOperationException($"Invalid transport type {this.m_configuration.Transport}");
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Configure the host for ATNA audit log shipping
        /// </summary>
        public void Configure(SanteDBConfiguration configuration, IDictionary <string, string> settings)
        {
            var atnaConfig = configuration.GetSection <AtnaConfigurationSection>();

            if (atnaConfig == null)
            {
                atnaConfig = new AtnaConfigurationSection()
                {
                    AuditTarget      = "sdb-audit:11514",
                    EnterpriseSiteId = "SanteDB^^^SanteDB",
                    Format           = AtnaApi.Transport.MessageFormatType.DICOM,
                    Transport        = AtnaTransportType.Udp
                };
                configuration.AddSection(atnaConfig);
            }

            // Is the ATNA audit service available?
            var serviceConfiguration = configuration.GetSection <ApplicationServiceContextConfigurationSection>().ServiceProviders;

            if (!serviceConfiguration.Any(s => s.Type == typeof(AtnaAuditService)))
            {
                serviceConfiguration.Add(new TypeReferenceConfiguration(typeof(AtnaAuditService)));
            }

            // Configure the ATNA service?
            if (settings.TryGetValue(TargetSetting, out string target))
            {
                if (!Uri.TryCreate(target, UriKind.Absolute, out Uri targetUri))
                {
                    throw new ArgumentException($"Target {target} is not a valid URI");
                }

                atnaConfig.AuditTarget = $"{targetUri.Host}:{targetUri.Port}";
                if (!Enum.TryParse <AtnaTransportType>(targetUri.Scheme, true, out AtnaTransportType transport))
                {
                    throw new ArgumentException($"Scheme {targetUri.Scheme} not recognized");
                }
                atnaConfig.Transport = transport;
            }

            if (settings.TryGetValue(ModeSetting, out string mode))
            {
                if (!Enum.TryParse <AtnaApi.Transport.MessageFormatType>(mode, true, out AtnaApi.Transport.MessageFormatType format))
                {
                    throw new ArgumentException($"Format {mode} is not understood");
                }
                atnaConfig.Format = format;
            }

            if (settings.TryGetValue(SiteSetting, out string site))
            {
                atnaConfig.EnterpriseSiteId = site;
            }

            if (settings.TryGetValue(CertificateSetting, out string certThumbprint))
            {
                atnaConfig.ClientCertificate = new SanteDB.Core.Security.Configuration.X509ConfigurationElement()
                {
                    FindType      = System.Security.Cryptography.X509Certificates.X509FindType.FindByThumbprint,
                    FindValue     = certThumbprint,
                    StoreLocation = System.Security.Cryptography.X509Certificates.StoreLocation.LocalMachine,
                    StoreName     = System.Security.Cryptography.X509Certificates.StoreName.My
                };
            }
        }