Web API for the bulk printing desktop application.

Startup.cs 3.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. using BulkPrintingAPI.Configuration;
  2. using Microsoft.AspNetCore.Authorization;
  3. using Microsoft.AspNetCore.Builder;
  4. using Microsoft.AspNetCore.Hosting;
  5. using Microsoft.AspNetCore.Mvc.Authorization;
  6. using Microsoft.EntityFrameworkCore;
  7. using Microsoft.Extensions.Configuration;
  8. using Microsoft.Extensions.DependencyInjection;
  9. using Microsoft.Extensions.Logging;
  10. using Microsoft.IdentityModel.Tokens;
  11. using System;
  12. namespace BulkPrintingAPI
  13. {
  14. public class Startup
  15. {
  16. public Startup(IHostingEnvironment env)
  17. {
  18. var builder = new ConfigurationBuilder()
  19. .SetBasePath(env.ContentRootPath)
  20. .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
  21. .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true)
  22. .AddJsonFile("secrets.json", optional: true, reloadOnChange: true)
  23. .AddJsonFile($"secrets.{env.EnvironmentName}.json", optional: true, reloadOnChange: true)
  24. .AddEnvironmentVariables();
  25. Configuration = builder.Build();
  26. }
  27. public IConfigurationRoot Configuration { get; }
  28. public void ConfigureServices(IServiceCollection services)
  29. {
  30. services.AddMemoryCache();
  31. services.AddMvc(config =>
  32. {
  33. var policy = new AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build();
  34. config.Filters.Add(new AuthorizeFilter(policy));
  35. });
  36. services.AddSingleton(new TokenAuthenticationOptions(
  37. Configuration.GetSection("TokenAuthentication")));
  38. services.AddSingleton(new DataEncryptionOptions(
  39. Configuration.GetSection("DataEncryption")));
  40. services.AddSingleton(new MAX.ClientFactory(
  41. Configuration.GetSection("MAX")));
  42. services.AddDbContext<MAX.Models.MAXContext>(
  43. options => options.UseSqlServer(
  44. Configuration["Database:ConnectionString"],
  45. b => b.MigrationsAssembly("BulkPrintingAPI")));
  46. }
  47. public void Configure(IApplicationBuilder app, IHostingEnvironment env,
  48. ILoggerFactory loggerFactory, TokenAuthenticationOptions tokenAuthenticationOptions)
  49. {
  50. loggerFactory.AddConsole(Configuration.GetSection("Logging"));
  51. loggerFactory.AddDebug();
  52. var tokenValidationParameters = new TokenValidationParameters
  53. {
  54. ValidateIssuerSigningKey = true,
  55. IssuerSigningKey = tokenAuthenticationOptions.Key,
  56. TokenDecryptionKey = tokenAuthenticationOptions.Key,
  57. ValidateIssuer = true,
  58. ValidIssuer = tokenAuthenticationOptions.Issuer,
  59. ValidateAudience = true,
  60. ValidAudience = tokenAuthenticationOptions.Audience,
  61. ValidateLifetime = true,
  62. ClockSkew = TimeSpan.Zero
  63. };
  64. var bearerOptions = new JwtBearerOptions
  65. {
  66. AutomaticAuthenticate = true,
  67. AutomaticChallenge = true,
  68. SaveToken = true,
  69. TokenValidationParameters = tokenValidationParameters
  70. };
  71. app.UseJwtBearerAuthentication(bearerOptions);
  72. app.UseMvc();
  73. }
  74. }
  75. }