public static ITagGenerator GetGeneratorForRoute(string routeName) { var parts = routeName.Split('.'); var controller = parts[0]; var action = parts[1]; switch (controller) { case "article": { return(ArticleRoutes.GetAdTagGenerator(action)); } case "buyingguides": { return(BuyingGuidesRoutes.GetAdTagGenerator(action)); } case "finance": { return(FinanceRoutes.GetAdTagGenerator(action)); } case "calculator": { return(CalculatorRoutes.GetAdTagGenerator(action)); } case "carsforsale": { return(CarsForSaleRoutes.GetAdTagGenerator(action)); } case "carvalue": { return(CarValueRoutes.GetAdTagGenerator(action)); } case "research": { return(ResearchRoutes.GetAdTagGenerator(action)); } case "comparecars": { return(CompareCarsRoutes.GetAdTagGenerator(action)); } case "site": { return(SiteRoutes.GetAdTagGenerator(action)); } case "sponsored": { return(SponsoredRoutes.GetAdTagGenerator(action)); } case "httperror": { return(HttpErrorRoutes.GetAdTagGenerator(action)); } } return(null); }
static async Task Main(string[] args) { var config = Configuration.Load(ConfigPath); var settings = Settings.Load(SettingsPath); var server = new RedHttpServer(config.Port, config.PublicDirectory); server.RespondWithExceptionDetails = DEV; var tracking = new Tracking(config); server.ConfigureApplication = app => { app.UseForwardedHeaders(new ForwardedHeadersOptions { ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto }); }; Updater.CleanupTemporaryFiles(); // Setup database and tables Directory.CreateDirectory(Path.GetDirectoryName(config.AnalyticsDatabaseFilePath)); var db = new SQLiteAsyncConnection(config.DatabaseFilePath); await Task.WhenAll(db.CreateTableAsync <Session>(), db.CreateTableAsync <User>(), db.CreateTableAsync <Article>(), db.CreateTableAsync <ArticleHtml>(), db.CreateTableAsync <ArticleMarkdown>()); // Cookie session authentication server.Use(new CookieSessions <Session>(TimeSpan.FromDays(14)) { Secure = !DEV, Store = new SQLiteSessionStore(db) }); // Create directories for later use Directory.CreateDirectory(Path.Combine(config.PublicDirectory, "static")); Directory.CreateDirectory(config.TempDirectory); // Check if first start and create admin user StartUpCheck(db); // Initialize partial templates var partials = new[] { "header", "footer", "navigation", "meta", "style" }; FileHandling.RegisterPartialRenderer(partials, config, settings); // Public routes server.Get("/", PublicRoutes.SendFrontpage(settings, tracking, db, config)); server.Get("/article/:slug", PublicRoutes.FindFromSlug(settings, tracking, db, config)); server.Get("/admin/*", PublicRoutes.SendAdminPWA(config)); // Admin routes server.Get("/api/verify", Auth, AuthenticationRoutes.Verify()); server.Post("/api/login", AuthenticationRoutes.Login(db)); server.Post("/api/logout", Auth, AuthenticationRoutes.Logout()); server.Post("/api/changepassword", Auth, AuthenticationRoutes.ChangePassword(db)); server.Get("/api/articles", Auth, ArticleRoutes.FetchList(db)); server.Get("/api/article/:id", Auth, ArticleRoutes.FetchOne(db)); server.Get("/api/article/:id/markdown", Auth, ArticleRoutes.FetchOneMarkdown(db)); server.Put("/api/article", Auth, ArticleRoutes.Upsert(db, settings, config)); server.Put("/api/article/meta", Auth, ArticleRoutes.UpdateMeta(db)); server.Delete("/api/article", Auth, ArticleRoutes.Remove(db)); server.Get("/api/settings", Auth, SettingsRoutes.Fetch(settings)); server.Get("/api/settings/timezones", Auth, SettingsRoutes.FetchTimeZones()); server.Post("/api/settings", Auth, SettingsRoutes.Update(settings)); server.Get("/api/visits/latest-month", Auth, AnalyticsRoutes.FetchLatest30Days(tracking)); server.Get("/api/files", Auth, StaticFileRoutes.FetchList(config)); server.Post("/api/file", Auth, StaticFileRoutes.Upload(config)); server.Delete("/api/file", Auth, StaticFileRoutes.Remove(config)); server.Get("/api/themes", Auth, ThemeRoutes.FetchList(config)); server.Post("/api/theme", Auth, ThemeRoutes.Upload(config)); server.Delete("/api/theme", Auth, ThemeRoutes.Remove(config)); server.Get("/api/update", Auth, UpdatingRoutes.FetchAvailability()); server.Post("/api/update", Auth, UpdatingRoutes.InitiateUpdate(config)); Console.WriteLine($"\nStarting BansheeBlog v. {Version}..."); await server.RunAsync("*"); }