Beispiel #1
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.Configure <ApiBehaviorOptions>(op =>
            {
                op.SuppressModelStateInvalidFilter = true;
            });

            services.AddDbContext <MinhasTarefasContext>(op =>
            {
                op.UseSqlite("Data Source=Database\\MinhasTarefas.db");
            });

            services.AddScoped <IUsuarioRepository, UsuarioRepository>();
            services.AddScoped <ITarefasRepository, TarefasRepository>();
            services.AddScoped <ITokenRepository, TokenRepository>();

            services.AddIdentity <AplicationUser, IdentityRole>()
            .AddEntityFrameworkStores <MinhasTarefasContext>()
            .AddDefaultTokenProviders();

            services.AddAuthentication(options =>
            {
                options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme    = JwtBearerDefaults.AuthenticationScheme;
                options.DefaultScheme             = JwtBearerDefaults.AuthenticationScheme;
            }
                                       ).AddJwtBearer(options =>
            {
                options.TokenValidationParameters = new TokenValidationParameters()
                {
                    ValidateIssuer           = false,
                    ValidateAudience         = false,
                    ValidateLifetime         = true,
                    ValidateIssuerSigningKey = true,
                    IssuerSigningKey         = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("chave-api-jwt-minhas-tarefas")),
                };
            });

            services.AddAuthorization(auth =>
            {
                auth.AddPolicy("Bearer", new AuthorizationPolicyBuilder()
                               .AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme).
                               RequireAuthenticatedUser()
                               .Build());
            }
                                      );

            services.ConfigureApplicationCookie(options => {
                options.Events.OnRedirectToLogin = context => {
                    context.Response.StatusCode = 401;
                    return(Task.CompletedTask);
                };
            });

            services.AddMvc(config => {
                config.ReturnHttpNotAcceptable = true;
                config.InputFormatters.Add(new XmlSerializerInputFormatter(config));
                config.OutputFormatters.Add(new XmlSerializerOutputFormatter());
            })
            .SetCompatibilityVersion(CompatibilityVersion.Version_2_2)
            .AddJsonOptions(
                options => options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
                );

            services.AddSwaggerGen(cfg => {
                cfg.AddSecurityDefinition("Bearer", new ApiKeyScheme()
                {
                    In          = "header",
                    Type        = "apiKey",
                    Description = "Adicione o JSON Web Token(JWT) para autentificar",
                    Name        = "Authorization"
                });

                var security = new Dictionary <string, IEnumerable <string> >()
                {
                    { "Bearer", new string [] { } }
                };
                cfg.AddSecurityRequirement(security);

                cfg.ResolveConflictingActions(ApiDescription => ApiDescription.First());;
                cfg.SwaggerDoc("v1.0", new Swashbuckle.AspNetCore.Swagger.Info()
                {
                    Title   = "Minhas Tarefas API - V1.0",
                    Version = "v1.0"
                });

                var CaminhoProjeto = PlatformServices.Default.Application.ApplicationBasePath;
                var NomeProjeto    = $"{PlatformServices.Default.Application.ApplicationName}.xml";
                var CaminhoProjetoXmlComentario = Path.Combine(CaminhoProjeto, NomeProjeto);

                cfg.IncludeXmlComments(CaminhoProjetoXmlComentario);

                cfg.DocInclusionPredicate((docName, apiDesc) =>
                {
                    var actionApiVersionModel = apiDesc.ActionDescriptor?.GetApiVersion();

                    if (actionApiVersionModel == null)
                    {
                        return(true);
                    }
                    if (actionApiVersionModel.DeclaredApiVersions.Any())
                    {
                        return(actionApiVersionModel.DeclaredApiVersions.Any(v => $"v{v.ToString()}" == docName));
                    }
                    return(actionApiVersionModel.ImplementedApiVersions.Any(v => $"v{v.ToString()}" == docName));
                });
                cfg.OperationFilter <ApiVersionOperationFilter>();
            });
        }
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.Configure <ApiBehaviorOptions>(op =>
            {
                op.SuppressModelStateInvalidFilter = true;
            });


            #region AutoMapper-Config
            var config = new MapperConfiguration(op =>
            {
                op.AddProfile(new DTOMapperProfile());
            });
            IMapper mapper = config.CreateMapper();
            services.AddSingleton(mapper);
            #endregion


            services.AddMvc(op =>
            {
                //op.ReturnHttpNotAcceptable = true;
                //op.InputFormatters.Add(new XmlSerializerInputFormatter(op));
                //op.OutputFormatters.Add(new XmlSerializerOutputFormatter());
            }).SetCompatibilityVersion(CompatibilityVersion.Version_3_0);
            //.AddJsonOptions(
            //options => options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
            //    );

            services.AddApiVersioning(op =>
            {
                op.ReportApiVersions = true;
                op.AssumeDefaultVersionWhenUnspecified = true;
                op.DefaultApiVersion = new Microsoft.AspNetCore.Mvc.ApiVersion(1, 0);
            });


            services.AddSwaggerGen(op =>
            {
                //op.AddSecurityDefinition("Bearer", new ApiKeyScheme()
                //{
                //    In = "header",
                //    Type = "apiKey",
                //    Description = "Adicione o JSON web Token(JWT) para autenticar.",
                //    Name = "Authorization"
                //});
                //var security = new Dictionary<string, IEnumerable<string>>()
                //{
                //    {"Bearer", new string[] {} }
                //};
                //op.AddSecurityRequirement(security);

                op.ResolveConflictingActions(ApiDescription => ApiDescription.First());


                op.SwaggerDoc("v1", new OpenApiInfo
                {
                    Version     = "v1.0",
                    Title       = "Talk To API",
                    Description = "In Talk To API the user can talk with others users"
                });

                // Set the comments path for the Swagger JSON and UI.
                var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
                var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
                op.IncludeXmlComments(xmlPath);

                //op.DocInclusionPredicate((docName, apiDesc) =>
                //{
                //    var actionApiVersionModel = apiDesc.ActionDescriptor?.GetApiVersion();
                //    if (actionApiVersionModel == null)
                //    {
                //        return true;
                //    }
                //    if (actionApiVersionModel.DeclaredApiVersion.Any())
                //    {
                //        return actionApiVersionModel.DeclaredApiVersions.Any(v => $"v{v.ToString()}" == docName);
                //    }
                //    return actionApiVersionModel.implementeApiVersion.Any(v => $"v{v.ToString()}" == docName);
                //});
            });

            services.AddIdentity <ApplicationUser, IdentityRole>()
            .AddEntityFrameworkStores <TalkToContext>().AddDefaultTokenProviders()
            .AddDefaultTokenProviders();

            var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("Key-Api-Jwt-My-Taks"));

            services.AddAuthentication(options =>
            {
                options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme    = JwtBearerDefaults.AuthenticationScheme;
                options.DefaultScheme             = JwtBearerDefaults.AuthenticationScheme;
            }).AddJwtBearer(options =>
            {
                options.TokenValidationParameters = new TokenValidationParameters()
                {
                    ValidateIssuer           = false,
                    ValidateAudience         = false,
                    ValidateLifetime         = true,
                    ValidateIssuerSigningKey = true,
                    IssuerSigningKey         = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("Key-Api-Jwt-My-Taks"))
                };
            });

            services.AddAuthorization(auth =>
            {
                auth.AddPolicy("Bearer", new AuthorizationPolicyBuilder()
                               .AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme)
                               .RequireAuthenticatedUser()
                               .Build()
                               );
            });

            services.AddIdentityCore <ApplicationUser>().AddEntityFrameworkStores <TalkToContext>();


            services.AddControllersWithViews().AddNewtonsoftJson(options =>
                                                                 options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
                                                                 );


            services.AddScoped <IUserRepository, UserRepository>();
            services.AddScoped <ITokenRepository, TokenRepository>();
            services.AddScoped <IMessageRepository, MessageRepository>();

            services.AddDbContext <TalkToContext>(op =>
            {
                op.UseSqlite("Data Source=Database\\TalkTo.db");
            });
            services.AddControllers();
        }
Beispiel #3
0
        // This method gets called by the runtime. Use this method to add services to the container.
        // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
        public void ConfigureServices(IServiceCollection services)
        {
            var config = new MapperConfiguration(cfg => {
                cfg.AddProfile(new DTOMapperProfile());
            });

            IMapper mapper = config.CreateMapper();

            services.AddSingleton(mapper);

            services.AddDbContext <MimicContext>(opt => {
                opt.UseSqlite("Data Source = DataBases\\Mimic.db");
            }
                                                 );
            services.AddMvc();
            services.AddScoped <IPalavraRepository, PalavraRpository>();
            services.AddApiVersioning
            (
                cfg =>
            {
                cfg.ReportApiVersions = true;
                //cfg.ApiVersionReader = new  HeaderApiVersionReader("api-version");
                cfg.AssumeDefaultVersionWhenUnspecified = true;
                cfg.DefaultApiVersion = new Microsoft.AspNetCore.Mvc.ApiVersion(1, 0);
            }
            );

            services.AddSwaggerGen(cfg => {
                cfg.ResolveConflictingActions(ApiDescription => ApiDescription.First());;
                cfg.SwaggerDoc("v2.0", new Swashbuckle.AspNetCore.Swagger.Info()
                {
                    Title   = "MimicAPI - V2.0",
                    Version = "v2.0"
                });

                cfg.SwaggerDoc("v1.1", new Swashbuckle.AspNetCore.Swagger.Info()
                {
                    Title   = "MimicAPI - V1.1",
                    Version = "v1.1"
                });

                cfg.SwaggerDoc("v1.0", new Swashbuckle.AspNetCore.Swagger.Info()
                {
                    Title   = "MimicAPI - V1.0",
                    Version = "v1.0"
                });

                var CaminhoProjeto = PlatformServices.Default.Application.ApplicationBasePath;
                var NomeProjeto    = $"{PlatformServices.Default.Application.ApplicationName}.xml";
                var CaminhoProjetoXmlComentario = Path.Combine(CaminhoProjeto, NomeProjeto);

                cfg.IncludeXmlComments(CaminhoProjetoXmlComentario);

                cfg.DocInclusionPredicate((docName, apiDesc) =>
                {
                    var actionApiVersionModel = apiDesc.ActionDescriptor?.GetApiVersion();

                    if (actionApiVersionModel == null)
                    {
                        return(true);
                    }
                    if (actionApiVersionModel.DeclaredApiVersions.Any())
                    {
                        return(actionApiVersionModel.DeclaredApiVersions.Any(v => $"v{v.ToString()}" == docName));
                    }
                    return(actionApiVersionModel.ImplementedApiVersions.Any(v => $"v{v.ToString()}" == docName));
                });
                cfg.OperationFilter <ApiVersionOperationFilter>();
            });
        }
Beispiel #4
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            var config = new MapperConfiguration(cfg => {
                cfg.AddProfile(new DTOMapperProfile());
            });

            IMapper mapper = config.CreateMapper();

            services.AddSingleton(mapper);

            services.AddDbContext <TalkToContext>(cfg =>
            {
                cfg.UseSqlite("Data Source=TalkTo.db");
            });

            //services.AddDbContext<TalkToContext>(options => options.UseInMemoryDatabase(databaseName: "DbControle"));

            services.AddScoped <IUsuarioRepository, UsuarioRepository>();
            services.AddScoped <ITokenRepository, TokenRepository>();
            services.AddScoped <IMensagemRepository, MensagemRepository>();

            services.Configure <ApiBehaviorOptions>(op =>
            {
                op.SuppressModelStateInvalidFilter = true;
            });

            services.AddIdentity <ApplicationUser, IdentityRole>(options => {
                options.Password.RequireDigit           = false;
                options.Password.RequiredLength         = 5;
                options.Password.RequireLowercase       = false;
                options.Password.RequireUppercase       = false;
                options.Password.RequireNonAlphanumeric = false;
            })
            .AddEntityFrameworkStores <TalkToContext>()
            .AddDefaultTokenProviders();

            services.AddCors(cfg =>
            {
                cfg.AddDefaultPolicy(policy => {
                    policy.WithOrigins("https://localhost:44311")
                    .AllowAnyMethod()
                    .SetIsOriginAllowedToAllowWildcardSubdomains()
                    .AllowAnyHeader();
                });

                cfg.AddPolicy("AnyOrigin", policy =>
                {
                    policy.AllowAnyOrigin()
                    .WithMethods("GET")
                    .WithHeaders();
                });
            }
                             );

            services.AddMvc(cfg => {
                cfg.ReturnHttpNotAcceptable = true;
                cfg.InputFormatters.Add(new XmlSerializerInputFormatter(cfg));
                cfg.OutputFormatters.Add(new XmlSerializerOutputFormatter());
                var jsonOutputFormatter = cfg.OutputFormatters.OfType <JsonOutputFormatter>().FirstOrDefault();
                if (jsonOutputFormatter != null)
                {
                    jsonOutputFormatter.SupportedMediaTypes.Add(CustomMediaType.Hetoas);
                }
            }).SetCompatibilityVersion(CompatibilityVersion.Version_2_2)
            .AddJsonOptions(
                options => options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
                );

            //JWT
            var key = Encoding.ASCII.GetBytes("chave-api-jwt-talkto");

            services.AddAuthentication(opt =>
            {
                opt.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                opt.DefaultChallengeScheme    = JwtBearerDefaults.AuthenticationScheme;
            }).AddJwtBearer(x =>
            {
                x.RequireHttpsMetadata      = true; //apenas https
                x.SaveToken                 = true;
                x.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuerSigningKey = true,
                    IssuerSigningKey         = new SymmetricSecurityKey(key),
                    ValidateIssuer           = false,
                    ValidateAudience         = false,
                    ClockSkew = TimeSpan.Zero
                };
            });

            services.AddAuthorization(auth =>
            {
                auth.AddPolicy("Bearer", new AuthorizationPolicyBuilder()
                               .AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme)
                               .RequireAuthenticatedUser()
                               .Build());
            });

            services.ConfigureApplicationCookie(options =>
            {
                options.Events.OnRedirectToLogin = context =>
                {
                    context.Response.StatusCode = 401;
                    return(Task.CompletedTask);
                };
            });

            services.AddSwaggerGen(cfg => {
                cfg.AddSecurityDefinition("Bearer", new ApiKeyScheme()
                {
                    In          = "header",
                    Type        = "apiKey",
                    Description = "Adicione o JSON Web Token(JWT) para autentificar",
                    Name        = "Authorization"
                });

                var security = new Dictionary <string, IEnumerable <string> >()
                {
                    { "Bearer", new string [] { } }
                };
                cfg.AddSecurityRequirement(security);

                cfg.ResolveConflictingActions(ApiDescription => ApiDescription.First());;
                cfg.SwaggerDoc("v1.0", new Swashbuckle.AspNetCore.Swagger.Info()
                {
                    Title   = "TalkTo API - V1.0",
                    Version = "v1.0"
                });

                var CaminhoProjeto = PlatformServices.Default.Application.ApplicationBasePath;
                var NomeProjeto    = $"{PlatformServices.Default.Application.ApplicationName}.xml";
                var CaminhoProjetoXmlComentario = Path.Combine(CaminhoProjeto, NomeProjeto);

                cfg.IncludeXmlComments(CaminhoProjetoXmlComentario);

                cfg.DocInclusionPredicate((docName, apiDesc) =>
                {
                    var actionApiVersionModel = apiDesc.ActionDescriptor?.GetApiVersion();

                    if (actionApiVersionModel == null)
                    {
                        return(true);
                    }
                    if (actionApiVersionModel.DeclaredApiVersions.Any())
                    {
                        return(actionApiVersionModel.DeclaredApiVersions.Any(v => $"v{v.ToString()}" == docName));
                    }
                    return(actionApiVersionModel.ImplementedApiVersions.Any(v => $"v{v.ToString()}" == docName));
                });
                cfg.OperationFilter <ApiVersionOperationFilter>();
            });
        }