diff options
Diffstat (limited to 'src/server/index.ts')
| -rw-r--r-- | src/server/index.ts | 80 |
1 files changed, 30 insertions, 50 deletions
diff --git a/src/server/index.ts b/src/server/index.ts index 962d3b5f4f..db41a1dcb5 100644 --- a/src/server/index.ts +++ b/src/server/index.ts @@ -4,68 +4,48 @@ import * as fs from 'fs'; import * as http from 'http'; -import * as https from 'https'; -import * as express from 'express'; -import * as morgan from 'morgan'; +import * as http2 from 'http2'; +import * as zlib from 'zlib'; +import * as Koa from 'koa'; +import * as Router from 'koa-router'; +import * as mount from 'koa-mount'; +import * as compress from 'koa-compress'; import activityPub from './activitypub'; import webFinger from './webfinger'; -import log from './log-request'; import config from '../config'; -/** - * Init app - */ -const app = express(); -app.disable('x-powered-by'); -app.set('trust proxy', 'loopback'); +// Init app +const app = new Koa(); +app.proxy = true; -app.use(morgan(process.env.NODE_ENV == 'production' ? 'combined' : 'dev', { - // create a write stream (in append mode) - stream: config.accesslog ? fs.createWriteStream(config.accesslog) : null +app.use(compress({ + flush: zlib.constants.Z_SYNC_FLUSH })); -app.use((req, res, next) => { - log(req); - next(); -}); - -/** - * HSTS - * 6month(15552000sec) - */ +// HSTS +// 6months (15552000sec) if (config.url.startsWith('https')) { - app.use((req, res, next) => { - res.header('strict-transport-security', 'max-age=15552000; preload'); - next(); + app.use(async (ctx, next) => { + ctx.set('strict-transport-security', 'max-age=15552000; preload'); + await next(); }); } -// Drop request when without 'Host' header -app.use((req, res, next) => { - if (!req.headers['host']) { - res.sendStatus(400); - } else { - next(); - } -}); +app.use(mount('/api', require('./api'))); +app.use(mount('/files', require('./file'))); -// 互換性のため -app.post('/meta', (req, res) => { - res.header('Access-Control-Allow-Origin', '*'); - res.json({ - version: 'nighthike' - }); -}); +// Init router +const router = new Router(); -/** - * Register modules - */ -app.use('/api', require('./api')); -app.use('/files', require('./file')); -app.use(activityPub); -app.use(webFinger); -app.use(require('./web')); +// Routing +router.use(activityPub.routes()); +router.use(webFinger.routes()); + +// Register router +app.use(router.routes()); + +app.use(mount(require('./web'))); function createServer() { if (config.https) { @@ -73,9 +53,9 @@ function createServer() { Object.keys(config.https).forEach(k => { certs[k] = fs.readFileSync(config.https[k]); }); - return https.createServer(certs, app); + return http2.createSecureServer(certs, app.callback()); } else { - return http.createServer(app); + return http.createServer(app.callback()); } } |