1
0
Fork 0
mirror of https://github.com/miawinter98/just-short-it.git synced 2024-11-13 21:19:53 +00:00
just-short-it/Program.cs

69 lines
2.5 KiB
C#
Raw Normal View History

2023-04-15 13:40:46 +00:00
using JustShortIt.Model;
using JustShortIt.Service;
using Microsoft.AspNetCore.Authentication.Cookies;
var builder = WebApplication.CreateBuilder(args);
builder.Configuration.AddEnvironmentVariables("JSI_");
builder.Services.AddRazorPages();
// Get Configurations
var redisConnection = builder.Configuration.GetSection("Redis").Get<RedisConnection>();
var user = builder.Configuration.GetSection("Account").Get<User>();
string? baseUrl = builder.Configuration.GetValue<string>("BaseUrl");
#if DEBUG
baseUrl = "http://localhost/";
user = new User("test", "test");
Console.Error.WriteLine("YOU ARE RUNNING A DEBUG BUILD WITH TEST CREDENTIALS, " +
"DO NOT UNDER ANY CIRCUMSTANCES RUN THIS IN PRODUCTION, YOU HAVE BEEN WARNED.");
#endif
2023-04-15 13:40:46 +00:00
// Check if everything is configured (right)
if (string.IsNullOrEmpty(baseUrl) || Uri.IsWellFormedUriString(baseUrl, UriKind.Absolute) is false)
throw new ApplicationException(
"Base-URL is not set to a correct URL, please provide JSI_BaseUrl with a valid url.");
2023-04-15 13:40:46 +00:00
if (user is null || string.IsNullOrEmpty(user.Username) || string.IsNullOrEmpty(user.Password))
throw new ApplicationException(
"Credentials not set, please provide JSI_Account__Username and JSI_Account__Password.");
// Set up Distributed Cache
if (string.IsNullOrEmpty(redisConnection?.ConnectionString) is false) {
builder.Services.AddStackExchangeRedisCache(options => {
options.Configuration = redisConnection.ConnectionString;
options.InstanceName = redisConnection.InstanceName;
});
Console.WriteLine("Running with Redis distributed Cache.");
} else {
builder.Services.AddDistributedMemoryCache();
Console.WriteLine("Running with in-memory distributed Cache.");
}
// Add Authentication
builder.Services.AddSingleton(_ => new AuthenticationService(user));
builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie(options => {
options.ExpireTimeSpan = TimeSpan.FromHours(24);
options.SlidingExpiration = true;
options.AccessDeniedPath = "/Login";
options.LoginPath = "/Login";
options.LogoutPath = "/Logout";
});
var app = builder.Build();
// Configure Cookies (used in Authentication)
app.UseCookiePolicy(new CookiePolicyOptions {
MinimumSameSitePolicy = SameSiteMode.Strict,
Secure = CookieSecurePolicy.Always
});
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment()) {
app.UseExceptionHandler("/Error");
}
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();