using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.FileProviders; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.HttpsPolicy; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using System; using System.Collections.Generic; using System.Globalization; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; //using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetCore.DataProtection; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http.Connections; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Localization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; //using Microsoft.IdentityModel.Tokens; //using EveryThing.Data; //using Microsoft.AspNetCore.Authentication.Negotiate; using Microsoft.AspNetCore.HttpOverrides; using ZpcBulletinBoard.Data; using ZpcBulletinBoard.Models; var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddRazorPages(); //TODO before publish var connectionString = builder.Configuration.GetConnectionString("DataConnection"); //var sqlHost = Environment.GetEnvironmentVariable("MYSQL_SERVER"); //var sqlUser = Environment.GetEnvironmentVariable("MYSQL_USER"); //var sqlPassword = Environment.GetEnvironmentVariable("MYSQL_PASSWORD"); //var sqlDatabase = Environment.GetEnvironmentVariable("MYSQL_DATABASE"); //var connectionString = $"server={sqlHost};user={sqlUser};password={sqlPassword};database={sqlDatabase};SSL Mode=None"; builder.Services.AddDbContext(options => options.UseMySql(connectionString, ServerVersion.AutoDetect(connectionString))); builder.Services.AddIdentity().AddEntityFrameworkStores().AddDefaultTokenProviders(); builder.Services.AddAntiforgery(o => o.HeaderName = "XSRF-TOKEN"); builder.Services.Configure(options => { // Password settings options.Password.RequireDigit = true; options.Password.RequireLowercase = true; options.Password.RequireNonAlphanumeric = true; options.Password.RequireUppercase = true; options.Password.RequiredLength = 8; options.Password.RequiredUniqueChars = 1; // Lockout settings options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(5); options.Lockout.MaxFailedAccessAttempts = 3; options.Lockout.AllowedForNewUsers = true; // User settings options.User.AllowedUserNameCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; options.User.RequireUniqueEmail = true; }); builder.Services.ConfigureApplicationCookie(options => { // Cookie options.Cookie.MaxAge = TimeSpan.FromHours(3); options.Cookie.HttpOnly = true; options.SlidingExpiration = true; options.Cookie.SecurePolicy = CookieSecurePolicy.None;//Samo unencripted na locas options.LoginPath = $"/User/Login"; options.LogoutPath = $"/User/Logout"; options.AccessDeniedPath = $"/"; options.ExpireTimeSpan = TimeSpan.FromMinutes(15);//Povecano na 15min }); builder.Services.Configure(options => { options.AutomaticAuthentication = false; }); builder.Services.AddDataProtection().SetApplicationName("ZpcBulletinBoard").PersistKeysToFileSystem(new DirectoryInfo(@"Keys/")); var app = builder.Build(); //app.UseStaticFiles(new StaticFileOptions //{ // FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "node_modules")), // RequestPath = new PathString("/vendor") //}); // Configure the HTTP request pipeline. if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } var defaultCulture = new CultureInfo("sl-SI"); var localizationOptions = new RequestLocalizationOptions { DefaultRequestCulture = new RequestCulture(defaultCulture), SupportedCultures = new List { defaultCulture }, SupportedUICultures = new List { defaultCulture } }; app.UseRequestLocalization(localizationOptions); app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.MapRazorPages(); app.Run();