コード例 #1
0
        public static async Task MainAsync(string[] args)
        {
            var repo = new EmployeeSqlRepository(async() =>
            {
                var conn = new PollySqlConnection(
                    "Server=localhost;Database=Sandpit;Trusted_Connection=True",
                    GetStandardDatabaseAsyncPolicies(),
                    GetStandardDatabaseSyncPolicies());

                await conn.OpenAsync().ConfigureAwait(false);

                return(conn);
            });

            var employee = await repo.GetEmployeeAsync(1).ConfigureAwait(false);

            Console.WriteLine(JsonConvert.SerializeObject(employee));
        }
コード例 #2
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc(option => option.Filters.Add(typeof(ModelStateValidationsFilterAttribute)));
            services.Configure <MvcOptions>(x => x.Filters.Add(new CorsAuthorizationFilterFactory("AllowAnyOrigin")));
            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1",
                             new Info
                {
                    Title   = "iBookmark API - V1",
                    Version = "v1",
                    Contact = new Contact()
                    {
                        Email = "*****@*****.**", Name = "Lokesh Agarwal", Url = "www.iBookmark.com"
                    }
                }
                             );

                var filePath = Path.Combine(PlatformServices.Default.Application.ApplicationBasePath, "iBookmark.API.xml");
                c.IncludeXmlComments(filePath);
            });
            var connectionString = Configuration.GetValue <string>("Data:BookmarkConnection:ConnectionString");

            Polly.IAsyncPolicy[] databaseAsyncPolicies = GetDatabaseAsyncPolicies();
            Polly.ISyncPolicy[]  databaseSyncPolicies  = GetDatabaseSyncPolicies();
            services.AddSingleton <IUserRepository>(
                repo => new UserSqlRepository(() =>
            {
                var con = new PollySqlConnection(connectionString, databaseAsyncPolicies, databaseSyncPolicies);
                con.Open();
                return(con);
            }
                                              )
                );

            services.AddSingleton <IContainerRepository>(
                repo => new ContainerSqlRepository(() =>
            {
                var con = new PollySqlConnection(connectionString, databaseAsyncPolicies, databaseSyncPolicies);
                con.Open();
                return(con);
            }
                                                   )
                );

            services.AddSingleton <IBookmarkRepository>(
                repo => new BookmarkSqlRepository(() =>
            {
                var con = new PollySqlConnection(connectionString, databaseAsyncPolicies, databaseSyncPolicies);
                con.Open();
                return(con);
            }
                                                  )
                );
            services.AddScoped <IJwtFactory, JwtFactory>();
            var saltKey    = Configuration.GetValue <string>("Security:SaltKey");
            var keySize    = Configuration.GetValue <int>("Security:KeySize");
            var passPhrase = Configuration.GetValue <string>("Security:PassPhrase");

            services.AddSingleton <IEncryptorDecryptor>(en => new RijndaelManagedEncryptorDecryptor(saltKey, keySize, passPhrase));
            if (HostingEnvironment.IsDevelopment())
            {
                services.AddCors(action => action.AddPolicy("AllowAnyOrigin",
                                                            builder => builder.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader()));
            }

            #region JWT Token
            var JwtAppSettingsTokenOptions = Configuration.GetSection(nameof(JwtIssuerOptions));
            services.Configure <JwtIssuerOptions>(options => {
                options.Issuer             = JwtAppSettingsTokenOptions[nameof(JwtIssuerOptions.Issuer)];
                options.Audience           = JwtAppSettingsTokenOptions[nameof(JwtIssuerOptions.Audience)];
                options.SigningCredentials = new SigningCredentials(_signingKey, SecurityAlgorithms.HmacSha256);
            });

            var tokenValidationParameters = new TokenValidationParameters
            {
                ValidateIssuer = true,
                ValidIssuer    = JwtAppSettingsTokenOptions[nameof(JwtIssuerOptions.Issuer)],

                ValidateAudience = false,
                ValidAudience    = JwtAppSettingsTokenOptions[nameof(JwtIssuerOptions.Audience)],

                ValidateIssuerSigningKey = true,
                IssuerSigningKey         = _signingKey,

                RequireExpirationTime = false,
                ValidateLifetime      = false,
                ClockSkew             = TimeSpan.Zero,
            };

            services.AddAuthentication(options =>
            {
                options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme    = JwtBearerDefaults.AuthenticationScheme;
            }).AddJwtBearer(configureOptions =>
            {
                configureOptions.ClaimsIssuer = JwtAppSettingsTokenOptions[nameof(JwtIssuerOptions.Issuer)];
                configureOptions.TokenValidationParameters = tokenValidationParameters;
                configureOptions.SaveToken = true;
            });

            // api user claim policy
            services.AddAuthorization(options =>
            {
                options.AddPolicy("AddContainer", policy => policy.RequireClaim(ClaimTypes.Role, "add:container"));
                options.AddPolicy("AddBookmark", policy => policy.RequireClaim(ClaimTypes.Role, "add:bookmark"));
            });
            #endregion
        }