private static void RegisterDependencies(ContainerBuilder builder) { builder.RegisterType <ConfigProvider>().As <IConfigProvider>().SingleInstance(); builder.RegisterType <TriStateAssignmentAlgorithm>().As <IAssignmentAlgorithm>().SingleInstance(); builder.RegisterType <SettingsRepository>().As <ISettingsRepository>().SingleInstance(); builder.RegisterType <EncryptionProvider>().As <IEncryptionProvider>().SingleInstance(); builder.RegisterType <CountryProvider>().SingleInstance(); builder.RegisterType <UserRepository>().As <IUserRepository>().SingleInstance(); builder.RegisterType <AssignmentService>().As <IAssignmentService>().SingleInstance(); builder.RegisterType <SecurityRepository>().As <ISantaUserStore>().SingleInstance(); builder.RegisterType <SantaUserManager>().As <UserManager <SantaSecurityUser, string> >().As <ISantaAdminProvider>().SingleInstance(); builder.RegisterType <EmailService>().As <IEmailService>().SingleInstance(); builder.RegisterType <MessageService>().As <IMessageService>().SingleInstance(); builder.RegisterType <MessageRepository>().As <IMessageReadOnlyRepository>().As <IMessageRepository>().SingleInstance(); builder.Register(context => { var config = context.Resolve <IConfigProvider>(); return(new YourPasswordSucks.PasswordValidator( new YourPasswordSucks.PasswordValidatorSettings { // rest leave with OWASP defaults MinimumPasswordLength = config.MinimumPasswordLength })); }); // expiry, as needs to expire as password reset links are dangerous builder.Register(context => { var config = context.Resolve <IConfigProvider>(); return(new SecureAccessTokenSource(new SecureAccessTokenSettings { Secret = config.SATSecret, EnsureAtLeastValidFor = true, ValidateData = true, ValidateTime = true, ValidFor = config.PasswordResetValidFor })); }).Keyed <SecureAccessTokenSource>(TokenSourceType.PasswordReset).SingleInstance(); // no expiry, just provide a token that can be validated builder.Register(context => { var config = context.Resolve <IConfigProvider>(); return(new SecureAccessTokenSource(new SecureAccessTokenSettings { Secret = config.SATSecret, ValidateData = true, })); }).Keyed <SecureAccessTokenSource>(TokenSourceType.EmailConfirmation).SingleInstance(); builder.Register(context => MappingConfig.GetMapperConfiguration(context).CreateMapper()).As <IMapper>() .SingleInstance(); }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddCors(); services.AddMvcCore().AddNewtonsoftJson(); var key = Encoding.ASCII.GetBytes(Configuration["Jwt:Key"]); services.AddAutoMapper(typeof(Startup).Assembly); services.AddControllers(); services.AddEntityFrameworkNpgsql().AddDbContext <ApplicationContext>(options => { options.UseNpgsql(Configuration.GetConnectionString("MyWebAPIConnection")); }); services.AddAuthentication(x => { x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; }).AddJwtBearer(x => { x.RequireHttpsMetadata = false; x.SaveToken = true; x.TokenValidationParameters = new TokenValidationParameters() { ValidateIssuerSigningKey = true, IssuerSigningKey = new SymmetricSecurityKey(key), ValidateIssuer = false, ValidateAudience = false }; }); new RegisterService(ref services); services.AddSwaggerGen(c => { c.EnableAnnotations(true); c.SwaggerDoc("v1", new OpenApiInfo { Title = "Controle Bancário", Version = "v1", Description = "Uma aplicação feita em ASP.NET CORE WEB API", TermsOfService = new Uri("https://github.com/gustavpereira"), Contact = new OpenApiContact { Name = "Gustavo Antonio Pereira", Email = "*****@*****.**", Url = new Uri("https://www.facebook.com/gustavo.antoniopereira.77/") }, License = new OpenApiLicense { Name = "Use sobre a licensa ", Url = new Uri("https://github.com/GUSTAVPEREIRA/ControleBancario/blob/master/LICENSE") } }); c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme { Description = "JWT Authorization, o Header usa o Bearer Scheme. Para utilizar a autorização use ('Bearer' + 'BearerToken')", Name = "Authorization", In = ParameterLocation.Header, Type = SecuritySchemeType.ApiKey, Scheme = "Bearer" }); c.AddSecurityRequirement(new OpenApiSecurityRequirement() { { new OpenApiSecurityScheme { Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" }, Scheme = "oauth2", Name = "Bearer", In = ParameterLocation.Header, }, new List <string>() } }); MappingConfig mappingConfig = new MappingConfig(); IMapper mapper = mappingConfig.GetMapperConfiguration().CreateMapper(); services.AddSingleton(mapper); // Set the comments path for the Swagger JSON and UI. var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml"; var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile); c.IncludeXmlComments(xmlPath); }); }