Extensible_Portfolio_Site/ExtensiblePortfolioSite/Program.cs

129 lines
3.8 KiB
C#

using ExtensiblePortfolioSite.SDK.Plugins;
namespace ExtensiblePortfolioSite
{
public class Program
{
private static void ParseArgs(String[] args, WebApplicationBuilder builder)
{
Boolean Error = false;
Boolean Help = false;
string ConfigPath = "eps_host_config.json";
for (int x = 0; x < args.Length; x++)
{
String arg = args[x];
if (arg[0] == '+')
{
int s = arg.IndexOf('=');
String value = arg[(s + 1)..];
switch(arg[0..s])
{
case "+config":
ConfigPath = value;
break;
default:
Console.Error.WriteLine($"Unknown Arg '{arg}'");
Error = true;
break;
}
}
else if(arg == "help")
Help = true;
}
if(Help)
{
Console.Error.WriteLine(
@"
[Help Message]
+log_nofile Disable Flle Logging
+log_output={filepath} Set Log File Output
+help Display Help Message
"
);
Environment.Exit(Error ? 0 : 2);
}
if(Error)
{
Console.Error.WriteLine("Exitting!");
Environment.Exit(2);
}
Config.SetConfigFile(ConfigPath);
LoggerProvider Logger;
builder.Logging.ClearProviders();
Config.ConfigObject Conf = Config.GetConfig();
if (!Conf.LoggingSection.FileLogging)
builder.Logging.AddProvider(Logger = new LoggerProvider(Conf.LoggingSection.ConsoleLogging));
else
builder.Logging.AddProvider(Logger = new LoggerProvider(Conf.LoggingSection.ConsoleLogging,
Conf.LoggingSection.FileLogPath!
.Replace("{date}", DateTime.Now.ToString("yyyy-MM-dd"))
.Replace("{time}", DateTime.Now.ToString("HH.mm.ss"))
));
// Log On Error
PluginManager.OnLogMessage += Logger.LogPluginManagerError;
}
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
// Load Config
Config.GetConfig();
// Parse input args
ParseArgs(args, builder);
// Load Plugins
PluginManager.LoadPlugins(Path.GetFullPath("Plugins/"));
//Initialize Plugins
PluginManager.InitializePlugins();
// TODO: [Resource] File Provider
// TODO: [Plugin] Web Static Files Provider
// TODO: [Plugin] Web Hook Provider
// TODO: [Plugin] API Endpoint Provider
// TODO: [Plugin] Reloading/Updating/Disabling
// Add services to the container.
builder.Services.AddRazorPages();
// Add Responce Cache
builder.Services.AddResponseCaching();
var app = builder.Build();
// 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();
}
app.UseHttpsRedirection(); // not required but, prefered
app.UseStaticFiles("/content");
app.UseRouting();
app.UseResponseCaching();
//app.UseAuthorization(); // not needed
app.MapRazorPages();
app.Run();
}
}
}