using Chatter.Logic.Actions; using Cuipod; using Microsoft.Extensions.CommandLineUtils; using Microsoft.Extensions.Logging; using System; using System.Security.Cryptography.X509Certificates; namespace Chatter { internal class Program { static int Main(string[] args) { CommandLineApplication commandLineApplication = new CommandLineApplication(); commandLineApplication.HelpOption("-h | --help"); CommandArgument certificateFile = commandLineApplication.Argument( "certificate", "Path to certificate (required)" ); CommandArgument privateRSAKeyFilePath = commandLineApplication.Argument( "key", "Path to private Pkcs8 RSA key (required)" ); commandLineApplication.OnExecute(() => { if (certificateFile.Value == null || privateRSAKeyFilePath.Value == null) { commandLineApplication.ShowHelp(); return 1; } X509Certificate2 cert = CertificateUtils.LoadCertificate(certificateFile.Value, privateRSAKeyFilePath.Value); return AppMain("static/", cert); }); try { return commandLineApplication.Execute(args); } catch (Exception e) { Console.WriteLine("Error: {0}", e.Message); return 1; } } private static int AppMain(string directoryToServe, X509Certificate2 certificate) { using ILoggerFactory loggerFactory = LoggerFactory.Create(builder => builder .AddSimpleConsole(options => { options.SingleLine = true; options.TimestampFormat = "hh:mm:ss "; }) .SetMinimumLevel(LogLevel.Debug) ); ILogger logger = loggerFactory.CreateLogger(); App app = new App( directoryToServe, certificate, logger ); // Serve files app.OnRequest("/", (request, response, logger) => { response.RenderFileContent("index.gmi"); }); app.OnRequest("/list", ListActionManager.GetListAction()); app.OnRequest("/post", ListActionManager.PostAction()); app.Run(); return 0; } } }