public override void RegisterArea(AreaRegistrationContext context)
 {
     SettingsRoutes.RegisterRoutes(context);
     ProfilesRoutes.RegisterRoutes(context);
     HomeRoutes.RegisterRoutes(context);
     SearchRoutes.RegisterRoutes(context);
     JobAdsRoutes.RegisterRoutes(context);
     FriendsRoutes.RegisterRoutes(context);
     ResourcesRoutes.RegisterRoutes(context);
 }
 public override void RegisterArea(AreaRegistrationContext context)
 {
     AccountsRoutes.RegisterRoutes(context);
     LinkedInRoutes.RegisterRoutes(context);
     CandidatesRoutes.RegisterRoutes(context);
     JobAdsRoutes.RegisterRoutes(context);
     EnquiriesRoutes.RegisterRoutes(context);
     ProductsRoutes.RegisterRoutes(context);
     SearchRoutes.RegisterRoutes(context);
     ResourcesRoutes.RegisterRoutes(context);
     HomeRoutes.RegisterRoutes(context);
     SettingsRoutes.RegisterRoutes(context);
 }
Exemple #3
0
        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("*");
        }