/// <summary>
        /// Use the startup class specified with the options
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="applicationBuilder"></param>
        /// <param name="options"></param>
        /// <returns></returns>
        public static IApplicationBuilder UseStartup <T>(this IApplicationBuilder applicationBuilder, Action <ApplicationStartupOptions> options) where T : BaseStartup, new()
        {
            var startupOptions = new ApplicationStartupOptions();

            options?.Invoke(startupOptions);

            BaseStartup startup = Activator.CreateInstance <T>();

            applicationBuilder.Startup      = startup;
            applicationBuilder.Cancellation = startupOptions._cancellationToken;
            startup.Arguments = startupOptions.Arguments;

            Func <IApplicationBuilder, Task> onBuild = async(IApplicationBuilder appBuilder) =>
            {
                IServiceCollection serviceCollection = new ServiceCollection();

                await startup.ConfigureAsync(serviceCollection, applicationBuilder);
            };

            var configureOptions = new ConfiguredOption("Startup")
            {
                OnBuild     = onBuild,
                OnConfigure = null,
                OnStart     = null,
                OnStop      = null
            };

            applicationBuilder.ConfiguredOptions.Add(configureOptions);

            return(applicationBuilder);
        }
Exemple #2
0
        public Startup()
        {
            _lsc = new LifeStyleContainer();
            _lsc.set(LifeStyle.Transient);

            var assemblies = new [] {
                typeof(Startup).Assembly,
                typeof(PhiladelphiaPowered.Domain.Dummy).Assembly,
                typeof(PhiladelphiaPowered.Services.Dummy).Assembly
            };

            var dllsLoc = Path.GetDirectoryName(typeof(Startup).Assembly.Location);

            Directory.SetCurrentDirectory(dllsLoc); //to make configuration reading from disk working

            var staticResourcesDir = Path.Combine(dllsLoc, "../../..");

            Logger.ConfigureImplementation(new ConsoleWritelineLoggerImplementation());
            _baseStartup = new BaseStartup(
                _lsc,
                _ => {},
                assemblies,
                ServerSettings.CreateDefault()
                .With(x => x.CustomStaticResourceDirs = new [] { staticResourcesDir }));
        }
Exemple #3
0
        private static void ConfigureServices(BaseStartup obj)
        {
            var services = new ServiceCollection();
            var config   = new ConfigurationBuilder().Build();

            obj.ConfigureServices(services, config);
        }
Exemple #4
0
        /// <summary>
        /// Habilita um middleware para segurança.
        /// </summary>
        /// <param name="app">Construtor da aplicação.</param>
        /// <param name="startup">Inicializador da hospedagem.</param>
        /// <returns>Construtor da aplicação.</returns>
        public static IApplicationBuilder UseSecurity(this IApplicationBuilder app, BaseStartup startup)
        {
            app.UseAuthentication();

            app.UseCors(options =>
            {
                options.AllowAnyHeader();
                options.AllowAnyMethod();
                options.AllowAnyOrigin();
                options.AllowCredentials();
            });

            return(app);
        }
Exemple #5
0
        public Startup()
        {
            _lsc.set(LifeStyle.Transient); //least surprising
            var dllsLoc    = System.IO.Path.GetDirectoryName(typeof(Startup).Assembly.Location);
            var assemblies = new [] {
                typeof(Startup).Assembly,
                typeof(SharedModel.Dummy).Assembly,
                typeof(ServicesImpl.Dummy).Assembly
            };

            _baseStartup = new BaseStartup(
                _lsc,
                _ => {},
                assemblies,
                ServerSettings.CreateDefault());
        }
Exemple #6
0
        public Startup()
        {
            var assemblies = new [] {
                typeof(Startup).Assembly,
                typeof(SimpleValidation.Domain.Dummy).Assembly,
                typeof(SimpleValidation.Services.Dummy).Assembly
            };

            var dllsLoc = Path.GetDirectoryName(typeof(Startup).Assembly.Location);

            Directory.SetCurrentDirectory(dllsLoc); //to make configuration reading from disk working

            var staticResourcesDir = Path.Combine(dllsLoc, "../../..");

            Logger.ConfigureImplementation(new ConsoleWritelineLoggerImplementation());
            _baseStartup = new BaseStartup(
                _ => {},
                assemblies,
                ServerSettings.CreateDefault()
                .With(x => x.CustomStaticResourceDirs = new [] { staticResourcesDir }));
        }
        public static void ConfigureSerilog(this BaseStartup _, IConfiguration configuration)
        {
            var index         = ServiceName.Replace(".", "-");
            var loggingConfig = configuration.GetSection(nameof(LoggingConfig)).Get <LoggingConfig>();

            var esConfig    = loggingConfig.ElasticSearch;
            var slackConfig = loggingConfig.Slack;

            var logger = new LoggerConfiguration()
                         .Enrich.FromLogContext()
                         .MinimumLevel.Warning();

            if (!string.IsNullOrEmpty(esConfig.ElasticUrl))
            {
                logger = logger.WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri(esConfig.ElasticUrl))
                {
                    ModifyConnectionSettings = conn =>
                    {
                        var awsCredentials =
                            new BasicAWSCredentials(esConfig.AwsAccessKeyId, esConfig.AwsSecretKey);
                        var httpConnection = new AwsHttpConnection(awsCredentials,
                                                                   RegionEndpoint.GetBySystemName(esConfig.AwsRegion));
                        var pool = new SingleNodeConnectionPool(new Uri(esConfig.ElasticUrl));

                        return(new ConnectionConfiguration(pool, httpConnection));
                    },
                    IndexFormat          = $"{index}-{{0:yyyy.MM}}",
                    AutoRegisterTemplate = true
                });
            }

            if (slackConfig.Channels.Length > 0 && !string.IsNullOrEmpty(slackConfig.Channels[0].WebhookUrl))
            {
                logger = logger.WriteTo.Slack(
                    (SlackChannelCollection)slackConfig.Channels.Select(c => new SlackChannel(c.WebhookUrl)), null,
                    slackConfig.LogLevel);
            }

            Log.Logger = logger.CreateLogger();
        }
Exemple #8
0
        public Startup()
        {
            _lsc.set(LifeStyle.Transient); //least surprising
            var assemblies = new [] {
                typeof(Startup).Assembly,
                typeof(ControlledByTests.Domain.Dummy).Assembly
            };

            var dllsLoc = Path.GetDirectoryName(typeof(Startup).Assembly.Location);

            Directory.SetCurrentDirectory(dllsLoc); //to make configuration reading from disk working

            _ltFilter = new ConsoleBasedControllerAsLifeTimeFilter();
            var staticResourcesDir = Path.Combine(dllsLoc, "../../..");

            Logger.ConfigureImplementation(new ForwardToServerControllerLoggerImplementation(_ltFilter));
            _baseStartup = new BaseStartup(
                _lsc,
                _ => {},
                assemblies,
                ServerSettings.CreateDefault()
                .With(x => x.CustomStaticResourceDirs = new [] { staticResourcesDir }));
        }
Exemple #9
0
        /// <summary>
        /// Configura os valores padrões para as chaves de configuração do sistema.
        /// </summary>
        /// <param name="services">Configurador de serviços da aplicação web.</param>
        /// <param name="startup">Inicializador da hospedagem.</param>
        /// <returns>Configurador de serviços da aplicação web.</returns>
        public static IServiceCollection AddMappers(this IServiceCollection services, BaseStartup startup)
        {
            var items = ReflectionHelper.ListClassesInheritFromType(typeof(Profile));

            services.AddAutoMapper(cfg =>
            {
                foreach (var item in items)
                {
                    cfg.AddProfile(item);
                }
            });

            return(services);
        }
Exemple #10
0
        /// <summary>
        /// Configura os valores padrões para as chaves de configuração do sistema.
        /// </summary>
        /// <param name="services">Configurador de serviços da aplicação web.</param>
        /// <param name="startup">Inicializador da hospedagem.</param>
        /// <returns>Configurador de serviços da aplicação web.</returns>
        public static IServiceCollection AddRepositories(this IServiceCollection services, BaseStartup startup)
        {
            var all = ReflectionHelper.ListClassesInheritFromGeneric(typeof(MongoRepository <>));

            var mongoOptions = Options.Create(OptionsHelper.GetConfiguration <MongoOptions>(startup.Configuration));

            var provider = new MongoDatabaseProvider(mongoOptions);

            foreach (var item in all)
            {
                services.AddSingleton(item);

                var nameMethod = item.GetMethod("CreateIndexes");

                nameMethod.Invoke(Activator.CreateInstance(item, provider, null), null);
            }

            return(services);
        }
Exemple #11
0
        private static IServiceCollection AddSecurityForAPI(this IServiceCollection services, BaseStartup startup)
        {
            var config = OptionsHelper.GetConfiguration <SecurityApiOptions>(startup.Configuration);

            services.AddAuthentication(IdentityServerAuthenticationDefaults.AuthenticationScheme)
            .AddIdentityServerAuthentication(options =>
            {
                options.Authority            = config.Authority;
                options.RequireHttpsMetadata = false;
                options.ApiName   = config.ApiName;
                options.ApiSecret = config.ApiSecret;
            });

            return(services);
        }
Exemple #12
0
        private static IServiceCollection AddSecurityForUI(this IServiceCollection services, BaseStartup startup)
        {
            var config = OptionsHelper.GetConfiguration <SecurityUIOptions>(startup.Configuration);

            JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();

            services.AddAuthentication(options =>
            {
                options.DefaultScheme          = "Cookies";
                options.DefaultChallengeScheme = "oidc";
            })
            .AddCookie("Cookies")
            .AddOpenIdConnect("oidc", options =>
            {
                options.SignInScheme = "Cookies";

                options.Authority            = config.Authority;
                options.RequireHttpsMetadata = false;

                options.ClientId     = config.ClientId;
                options.ClientSecret = config.ClientSecret;
                options.ResponseType = "code id_token";

                options.SaveTokens = true;
                options.GetClaimsFromUserInfoEndpoint = true;

                foreach (var item in config.Scopes)
                {
                    options.Scope.Add(item);
                }
            });

            return(services);
        }
Exemple #13
0
        /// <summary>
        /// Configura os valores padrões para as chaves de configuração do sistema.
        /// </summary>
        /// <param name="services">Configurador de serviços da aplicação web.</param>
        /// <param name="startup">Inicializador da hospedagem.</param>
        /// <returns>Configurador de serviços da aplicação web.</returns>
        public static IServiceCollection AddSecurity(this IServiceCollection services, BaseStartup startup)
        {
            services.AddCors();

            switch (startup.Startup)
            {
            case StartupEnum.UI:
                services.AddSecurityForUI(startup);
                break;

            case StartupEnum.API:
                services.AddSecurityForAPI(startup);
                break;

            default:
                throw new NotImplementedException("Não implementado camada de segurança para o tipo: " + Enum.GetName(typeof(StartupEnum), startup.Startup) + ".");
            }

            return(services);
        }
Exemple #14
0
        /// <summary>
        /// Configura os valores padrões para as chaves de configuração do sistema.
        /// </summary>
        /// <param name="services">Configurador de serviços da aplicação web.</param>
        /// <param name="startup">Inicializador da hospedagem.</param>
        /// <returns>Configurador de serviços da aplicação web.</returns>
        public static IServiceCollection AddConfigurations(this IServiceCollection services, BaseStartup startup)
        {
            services.ConfigureOption <MongoOptions>(startup.Configuration);

            switch (startup.Startup)
            {
            case StartupEnum.UI:
                services.ConfigureOption <SecurityUIOptions>(startup.Configuration);
                services.ConfigureOption <RecaptchaOptions>(startup.Configuration);
                break;

            case StartupEnum.API:
                services.ConfigureOption <SecurityApiOptions>(startup.Configuration);
                break;

            default:
                throw new NotImplementedException("Não implementado camada de configuração para o tipo: " + Enum.GetName(typeof(StartupEnum), startup.Startup) + ".");
            }

            return(services);
        }