/// <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); }
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 })); }
private static void ConfigureServices(BaseStartup obj) { var services = new ServiceCollection(); var config = new ConfigurationBuilder().Build(); obj.ConfigureServices(services, config); }
/// <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); }
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()); }
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(); }
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 })); }
/// <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); }
/// <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); }
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); }
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); }
/// <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); }
/// <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); }