Files
hudozka/src/server.js
T
2018-11-28 18:37:16 +03:00

84 lines
2.2 KiB
JavaScript

import path from 'path'
import {Server} from 'http'
import Koa from 'koa'
import serve from 'koa-static'
import logger from 'koa-logger'
import convert from 'koa-convert'
import conditional from 'koa-conditional-get'
import etag from 'koa-etag'
import helmet from 'koa-helmet'
import cookie from 'koa-cookie'
import session from 'koa-session'
import bodyParser from 'koa-bodyparser'
import {queryObject} from './routes'
import handlebars from 'handlebars'
const {sessionConfig, view404} = require('./config')
const error = require('./middlewares/error')
const redirect = require('./middlewares/redirect')
const home = require('./routes/home')
const article = require('./routes/articles')
const albums = require('./routes/albums')
const gallery = require('./routes/gallery')
const teachers = require('./routes/teachers')
const documents = require('./routes/documents')
const document = require('./routes/document')
const schedule = require('./routes/schedule')
const pages = require('./routes/pages')
const sitemap = require('./routes/sitemap')
const edit = require('./routes/edit')
const dirPublic = path.join(__dirname, '../public')
handlebars.registerHelper('raw-helper', options => options.fn())
export default function (config) {
const $ = convert
const app = new Koa()
app.keys = ['1234']
app.proxy = true
app.use(bodyParser({
extendTypes: {
json: 'application/ejson'
}
}))
app.use(logger())
app.use(convert(session(sessionConfig, app)))
app.use(cookie())
app.use($(conditional()))
app.use($(etag()))
app.use(serve(dirPublic))
app.use(redirect(config.redirect))
app.use($(helmet()))
app.use(queryObject())
app.use(async (ctx, next) => {
if (ctx.session.isNew) {
ctx.session.startDate = new Date()
}
await next()
})
app.use(error.notFound(view404))
app.use(sitemap())
app.use(edit.getEdit())
app.use(home.getHome(config.articlesPerPage))
app.use(gallery.getGallery())
app.use(article.getArticles(config.articlesPerPage))
app.use(article.getArticle())
app.use(albums.getAlbum())
app.use(teachers.getCollective(config.collectiveOrder))
app.use(teachers.getTeacher())
app.use(documents.getDocuments())
app.use(document.getDocument())
app.use(schedule.getSchedule())
app.use(pages())
return Server(app.callback())
}