import {redirect, Route, SessionAuthMiddleware, api} from '@extollo/lib' import {Home} from '../controllers/Home.controller' import {PageView} from '../middlewares/PageView.middleware' import {Snippets} from '../controllers/Snippets.controller' import {GoLinks} from '../controllers/GoLinks.controller' import {Feed} from '../controllers/Feed.controller' import {LoadSnippet} from '../middlewares/parameters/LoadSnippet.middleware' import {LoadFeedPosts} from '../middlewares/parameters/LoadFeedPosts.middleware' import {ValidContactForm} from '../middlewares/parameters/ValidContactForm.middleware' import {RateLimit} from '../middlewares/RateLimit.middleware' import {SiteTheme} from '../middlewares/SiteTheme.middleware' import {Blog} from '../controllers/Blog.controller' Route.endpoint('options', '**') .handledBy(() => api.one({})) Route .group('/', () => { Route.get('/') .pre(SiteTheme) .parameterMiddleware(LoadFeedPosts) .calls(Home, home => home.welcome) .alias('home') Route.get('/blog') .pre(SiteTheme) .calls(Blog, blog => blog.index) .alias('blog') Route.get('/blog/archive') .pre(SiteTheme) .calls(Blog, blog => blog.archive) .alias('blog:archive') Route.get('/blog/tags') .pre(SiteTheme) .calls(Blog, blog => blog.tags) .alias('blog:tags') Route.get('/blog/feeds') .pre(SiteTheme) .calls(Blog, blog => blog.feeds) .alias('blog:feeds') Route.get('/blog/rss2.xml') .calls(Blog, blog => blog.rss) .alias('blog:rss') Route.get('/blog/atom.xml') .calls(Blog, blog => blog.atom) .alias('blog:atom') Route.get('/blog/json.json') .calls(Blog, blog => blog.json) .alias('blog:json') Route.get('/blog/tag/:tag') .pre(SiteTheme) .calls(Blog, blog => blog.tag) Route.get('/blog/*/*/*/:slug') .pre(SiteTheme) .calls(Blog, blog => blog.post) Route.post('/contact') .pre(RateLimit) .pre(SiteTheme) .parameterMiddleware(ValidContactForm) .calls(Home, home => home.contact) .alias('contact') Route.post('/api/contact') .pre(RateLimit) .parameterMiddleware(ValidContactForm) .calls(Home, home => home.contactApi) .alias('contact-api') Route.get('/humans.txt') .calls(Home, home => home.humans) Route.get('/technical') .pre(SiteTheme) .calls(Home, home => home.technical) Route.get('/analytics/opt-out') .pre(SiteTheme) .calls(Home, home => home.optOutPrompt) .alias('opt-out-prompt') Route.post('/analytics/opt-out') .pre(SiteTheme) .calls(Home, home => home.optOut) .alias('opt-out') Route.get('/snippet/:slug') .pre(SiteTheme) .parameterMiddleware(LoadSnippet) .calls(Snippets, snippets => snippets.viewSnippet) Route.any('/go/:short') .calls(GoLinks, go => go.launch) Route.get('/favicon.ico') .pre(SiteTheme) .calls(Home, home => home.favicon) Route.group('feed', () => { Route.get('/') .pre(SiteTheme) .parameterMiddleware(LoadFeedPosts, {all: true}) .calls(Feed, feed => feed.feed) .alias('feed') Route.get('/rss.xml') .parameterMiddleware(LoadFeedPosts, {all: true}) .calls(Feed, feed => feed.rss) .alias('feed.rss') Route.get('/atom.xml') .parameterMiddleware(LoadFeedPosts, {all: true}) .calls(Feed, feed => feed.atom) .alias('feed.atom') Route.get('/json.json') .parameterMiddleware(LoadFeedPosts, {all: true}) .calls(Feed, feed => feed.json) .alias('feed.json') }) }) .pre(SessionAuthMiddleware) .pre(PageView)