diff --git a/.vscode/launch.json b/.vscode/launch.json index d7d6a30..234ccb5 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -10,7 +10,7 @@ "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. - "program": "${workspaceRoot}/bin/Debug/netcoreapp2.1/pecklist.dll", + "program": "${workspaceRoot}/bin/Debug/net5.0/pecklist.dll", "args": [], "cwd": "${workspaceRoot}", "stopAtEntry": false, diff --git a/Program.cs b/Program.cs index 4cc7a5b..9057cd9 100644 --- a/Program.cs +++ b/Program.cs @@ -1,30 +1,47 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore; -using Microsoft.AspNetCore.Hosting; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.Logging; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Hosting; + namespace GZTW.Pecklist { + + public class Program { public static void Main(string[] args) { - BuildWebHost(args).Run(); + CreateHostBuilder(args).Build().Run(); } - public static IWebHost BuildWebHost(string[] args) => - WebHost.CreateDefaultBuilder(args) - .UseUrls("http://*:3000") + public static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .ConfigureWebHostDefaults(webBuilder => + { + webBuilder.UseStartup() + .UseUrls("http://*:3000") .CaptureStartupErrors(true) .UseSetting("detailedErrors", "true") .UseKestrel() - .UseContentRoot(System.IO.Directory.GetCurrentDirectory()) - .UseStartup() - .Build(); + .UseContentRoot(System.IO.Directory.GetCurrentDirectory()); + }); } + + + // public class Program + // { + // public static void Main(string[] args) + // { + // BuildWebHost(args).Run(); + // } + + // public static IWebHost BuildWebHost(string[] args) => + // WebHost.CreateDefaultBuilder(args) + // .UseUrls("http://*:3000") + // .CaptureStartupErrors(true) + // .UseSetting("detailedErrors", "true") + // .UseKestrel() + // .UseContentRoot(System.IO.Directory.GetCurrentDirectory()) + // .UseStartup() + // .Build(); + // } } diff --git a/Startup.cs b/Startup.cs index 03cb747..5e33f2e 100644 --- a/Startup.cs +++ b/Startup.cs @@ -1,121 +1,226 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; -using Microsoft.AspNetCore.HttpOverrides; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Logging; -using Microsoft.Extensions.Options; +using Microsoft.Extensions.Hosting; -using Microsoft.EntityFrameworkCore; using GZTW.Pecklist.Models; using GZTW.Pecklist.Util; +using Microsoft.EntityFrameworkCore; using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.IdentityModel.Tokens; -using Microsoft.AspNetCore.Authentication; + + namespace GZTW.Pecklist { public class Startup { - public Startup(IHostingEnvironment env) + public Startup(IConfiguration configuration) { - var builder = new ConfigurationBuilder() - .SetBasePath(env.ContentRootPath) - .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) - .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) - .AddEnvironmentVariables(); - Configuration = builder.Build(); + Configuration = configuration; } - public IConfigurationRoot Configuration { get; } + public IConfiguration Configuration { get; } // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { + services.AddControllers().AddNewtonsoftJson(); + services.AddDbContext(options => + { + options.UseSqlite(Configuration.GetConnectionString("thedb")).EnableSensitiveDataLogging(false); - services.AddDbContext(options => options.UseSqlite(Configuration.GetConnectionString("thedb"))); - - //Added this so that can access configuration from anywhere else - //See authcontroller for usage - services.AddSingleton(Configuration); - - services.AddMvc(); + }); - - //get the key from the appsettings.json file var secretKey = Configuration.GetSection("JWT").GetValue("secret"); var signingKey = new SymmetricSecurityKey(System.Text.Encoding.ASCII.GetBytes(secretKey)); services.AddAuthentication(options => - { - options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; - options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; - }).AddJwtBearer(options => - { - // options.AutomaticAuthenticate = true; - // options.AutomaticChallenge = true; - options.TokenValidationParameters = new TokenValidationParameters - { - // Token signature will be verified using a private key. - ValidateIssuerSigningKey = true, - RequireSignedTokens = true, - IssuerSigningKey = signingKey, - ValidateIssuer = true, - ValidIssuer = "GZTW_Pecklist", - ValidateAudience = false, - // ValidAudience = "https://yourapplication.example.com", + { + options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; + options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; + }).AddJwtBearer(options => + { + options.TokenValidationParameters = new TokenValidationParameters + { + // Token signature will be verified using a private key. + ValidateIssuerSigningKey = true, + RequireSignedTokens = true, + IssuerSigningKey = signingKey, + ValidateIssuer = true, + ValidIssuer = "GZTW_Pecklist", + ValidateAudience = false, + + //Note: these are all enabled in AyaNOva but were origionally disabled in rf + // // Token will only be valid if not expired yet, with 5 minutes clock skew. + // ValidateLifetime = true, + // RequireExpirationTime = true, + // ClockSkew = new TimeSpan(0, 5, 0), + }; + }); + + - // Token will only be valid if not expired yet, with 5 minutes clock skew. - // ValidateLifetime = true, - // RequireExpirationTime = true, - // ClockSkew = new TimeSpan(0, 5, 0), - }; - }); } - public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, PecklistContext dbContext) + // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. + public void Configure(IApplicationBuilder app, IWebHostEnvironment env, PecklistContext dbContext) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } - loggerFactory.AddConsole(Configuration.GetSection("Logging")); - loggerFactory.AddDebug(); - - - app.UseForwardedHeaders(new ForwardedHeadersOptions - { - ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto - }); - app.UseDefaultFiles(); app.UseStaticFiles(new StaticFileOptions { OnPrepareResponse = context => { - if (context.File.Name == "index.html" || context.File.Name == "sw.js" ) + if (context.File.Name == "default.htm") { - context.Context.Response.Headers.Add("Cache-Control", "no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0"); - // context.Context.Response.Headers.Add("Expires", "-1"); + context.Context.Response.Headers.Add("Cache-Control", "no-cache, no-store"); + context.Context.Response.Headers.Add("Expires", "-1"); } } }); - app.UseAuthentication(); - app.UseMvc(); - //Check schema - Schema.CheckAndUpdate(dbContext); + Schema.CheckAndUpdate(dbContext); + // app.UseHttpsRedirection(); + + app.UseRouting(); + + app.UseAuthorization(); + app.UseEndpoints(endpoints => + { + endpoints.MapControllers(); + + }); + + //server ready + System.Diagnostics.Debug.WriteLine("BOOT COMPLETED - OPEN"); } } } + +// using Microsoft.AspNetCore.Builder; +// using Microsoft.IdentityModel.Tokens; +// using Microsoft.AspNetCore.HttpOverrides; +// using Microsoft.Extensions.Configuration; +// using Microsoft.Extensions.DependencyInjection; +// using Microsoft.Extensions.Logging; +// using Microsoft.EntityFrameworkCore; +// using Microsoft.Extensions.Hosting; +// using Microsoft.AspNetCore.Authentication.JwtBearer; +// using GZTW.Pecklist.Models; +// using GZTW.Pecklist.Util; + + + +// namespace GZTW.Pecklist +// { +// public class Startup +// { +// public Startup(Microsoft.AspNetCore.Hosting.IWebHostEnvironment env) +// { +// var builder = new ConfigurationBuilder() +// .SetBasePath(env.ContentRootPath) +// .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) +// .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) +// .AddEnvironmentVariables(); +// Configuration = builder.Build(); +// } + +// public IConfigurationRoot Configuration { get; } + +// // This method gets called by the runtime. Use this method to add services to the container. +// public void ConfigureServices(IServiceCollection services) +// { + +// services.AddDbContext(options => options.UseSqlite(Configuration.GetConnectionString("thedb"))); + +// //Added this so that can access configuration from anywhere else +// //See authcontroller for usage +// services.AddSingleton(Configuration); + +// services.AddMvc(); + + + +// //get the key from the appsettings.json file +// var secretKey = Configuration.GetSection("JWT").GetValue("secret"); +// var signingKey = new SymmetricSecurityKey(System.Text.Encoding.ASCII.GetBytes(secretKey)); + +// services.AddAuthentication(options => +// { +// options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; +// options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; +// }).AddJwtBearer(options => +// { +// // options.AutomaticAuthenticate = true; +// // options.AutomaticChallenge = true; +// options.TokenValidationParameters = new TokenValidationParameters +// { +// // Token signature will be verified using a private key. +// ValidateIssuerSigningKey = true, +// RequireSignedTokens = true, +// IssuerSigningKey = signingKey, +// ValidateIssuer = true, +// ValidIssuer = "GZTW_Pecklist", +// ValidateAudience = false, +// // ValidAudience = "https://yourapplication.example.com", + +// // Token will only be valid if not expired yet, with 5 minutes clock skew. +// // ValidateLifetime = true, +// // RequireExpirationTime = true, +// // ClockSkew = new TimeSpan(0, 5, 0), +// }; +// }); + +// } + +// public void Configure(IApplicationBuilder app, IHostEnvironment env, PecklistContext dbContext) +// {//ILoggerFactory loggerFactory, +// if (env.IsDevelopment()) +// { +// app.UseDeveloperExceptionPage(); +// } +// var loggerFactory = LoggerFactory.Create(builder => builder.AddConsole()); +// // loggerFactory.AddConsole(Configuration.GetSection("Logging")); +// // loggerFactory.AddDebug(); + + +// app.UseForwardedHeaders(new ForwardedHeadersOptions +// { +// ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto +// }); + +// app.UseDefaultFiles(); +// app.UseStaticFiles(new StaticFileOptions +// { +// OnPrepareResponse = context => +// { +// if (context.File.Name == "index.html" || context.File.Name == "sw.js") +// { +// context.Context.Response.Headers.Add("Cache-Control", "no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0"); +// // context.Context.Response.Headers.Add("Expires", "-1"); +// } +// } +// }); + +// app.UseAuthentication(); +// //app.UseMvc(); + +// //Check schema +// Schema.CheckAndUpdate(dbContext); + + +// } +// } +// } diff --git a/db/pecklist.sqlite b/db/pecklist.sqlite index 4cd89a1..56f3ad4 100644 Binary files a/db/pecklist.sqlite and b/db/pecklist.sqlite differ diff --git a/pecklist.csproj b/pecklist.csproj index 827a517..ca19501 100644 --- a/pecklist.csproj +++ b/pecklist.csproj @@ -1,17 +1,20 @@ - netcoreapp2.1 + net5.0 - - - - - + + + + + + + +