Example #1
0
 public PlatformNancyBootstrapper(ILifetimeScope scopedKernel)
 {
     ScopedKernel     = scopedKernel;
     RootPathProvider = new WwwrootPathProvider();
     Logger           = scopedKernel.Resolve <IPlatformLogger>();
     Configuration    = scopedKernel.Resolve <REstateConfiguration>();
 }
Example #2
0
        public static void Main(string[] args)
        {
            var configuration = new ConfigurationBuilder()
                                .AddJsonFile("appconfig.json")
                                .Build();

            var config = new REstateConfiguration();

            configuration.GetSection("REstate").Bind(config);

            var logger = new LoggerConfiguration()
                         .WriteTo.Logentries("123e94f6-51c3-4038-89f3-804e23b67414")
                         .CreateLogger();

            var containerBuilder = new ContainerBuilder();

            var container = RegisterComponents(containerBuilder, configuration, config, logger);

            var host = new WebHostBuilder()
                       .UseConfiguration(configuration)
                       .UseContentRoot(Directory.GetCurrentDirectory())
                       .UseKestrel()
                       .UseIISIntegration()
                       .Configure(app =>
            {
                app.UseDeveloperExceptionPage(new DeveloperExceptionPageOptions {
                });
                app.UseOwin(owin =>
                {
                    var authenticationSettings = config.Authentication;

                    if (authenticationSettings.UseAuthentication)
                    {
                        owin((next) =>
                             new JwtAndCookieMiddleware(next, new Options
                        {
                            Certificate = new X509Certificate2(
                                Path.Combine(
                                    Directory.GetCurrentDirectory(),
                                    authenticationSettings.TokenEncryptionCertificate.FileName),
                                authenticationSettings.TokenEncryptionCertificate.PrivateKeyPassword),
                            CookieName     = authenticationSettings.CookieName,
                            CookiePath     = "/",
                            CookieHttpOnly = true,
                            TokenLifeSpan  = TimeSpan.FromMinutes(authenticationSettings.TokenLifeSpanMinutes),
                            ClaimsPrincipalResourceName = authenticationSettings.ClaimsPrincipalResourceName,
                            CreatePrincipal             = (payload) => CreateClaimsPrincipalFromPayload(container.Resolve <StringSerializer>(), payload)
                        }).Invoke);
                    }

                    owin.UseNancy(o =>
                    {
                        o.Bootstrapper = authenticationSettings.UseAuthentication
                                ? new PlatformJwtNancyBootstrapper(container)
                                : new PlatformNancyBootstrapper(container);
                    });
                });
            })
                       .Build();

            var chronoConsumer = container.Resolve <ChronoConsumer>();

            using (CancellationTokenSource chronoConsumerSource = new CancellationTokenSource())
            {
                //Start the Consumer thread and hold a reference to the task.
                var chronoTask = chronoConsumer.StartAsync(config.Authentication.SchedulerApiKey, chronoConsumerSource.Token);

                //Running web layer, blocking call.
                host.Run();

                //Request work to stop.
                chronoConsumerSource.Cancel();

                //Wait for work to finish before exiting.
                chronoTask.Wait();
            }
        }
Example #3
0
        private static IContainer RegisterComponents(ContainerBuilder containerBuilder, IConfigurationRoot configurationSource, REstateConfiguration config, ILogger logger)
        {
            //rabbitmq connection factory
            containerBuilder.RegisterInstance(new ConnectionFactory()
            {
                Uri = configurationSource.GetSection("RabbitMQ").GetValue <string>("AmqpUri")
            });

            //nancy binders
            containerBuilder.RegisterType <JsonOnlyStringDictionaryBinder>().As <IModelBinder>();

            //configuration
            containerBuilder.RegisterInstance(config);

            //serilog + adapter
            containerBuilder.RegisterInstance(logger).As <ILogger>();
            containerBuilder.RegisterAdapter <ILogger, IPlatformLogger>((serilogLogger) =>
                                                                        new SerilogLoggingAdapter(serilogLogger));

            //simplejson serializer
            containerBuilder.RegisterType <SimpleJsonSerializer>().As <StringSerializer>();

            //repositories
            containerBuilder.Register((ctx)
                                      => new ChronoRepositoryFactory(
                                          config.ConnectionStrings.Scheduler))
            .As <IChronoRepositoryFactory>();

            containerBuilder.Register((ctx)
                                      => new RepositoryContextFactory(
                                          config.ConnectionStrings.Engine,
                                          ctx.Resolve <StringSerializer>(),
                                          ctx.Resolve <IPlatformLogger>()))
            .As <IRepositoryContextFactory>();

            containerBuilder.Register((ctx)
                                      => new AuthRepositoryFactory(config.ConnectionStrings.Auth))
            .As <IAuthRepositoryFactory>();

            //API
            containerBuilder.RegisterType <REstateMachineFactory>().As <IStateMachineFactory>();
            containerBuilder.RegisterType <StateEngineFactory>();

            //connectors
            containerBuilder.RegisterType <DirectChronoTriggerConnectorFactory>().As <IConnectorFactory>();
            containerBuilder.RegisterType <RabbitMqConnectorFactory>().As <IConnectorFactory>();

            //connector resolver
            containerBuilder.Register((ctx)
                                      => new DefaultConnectorFactoryResolver(ctx.Resolve <IEnumerable <IConnectorFactory> >()))
            .As <IConnectorFactoryResolver>();

            //diagram service (cartographer)
            containerBuilder.RegisterInstance(new DotGraphCartographer()).AsSelf();

            //delay processor (chronoconsumer)
            containerBuilder.RegisterType <DirectChronoConsumer>().As <ChronoConsumer>();
            containerBuilder.RegisterType <TriggerSchedulerFactory>();

            return(containerBuilder.Build());
        }