Beispiel #1
0
        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);
            });
        }