diff options
| author | tamaina <tamaina@hotmail.co.jp> | 2018-04-13 23:00:41 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-04-13 23:00:41 +0900 |
| commit | 4cc38ce02626816169fe206954fd8aea8690d927 (patch) | |
| tree | 56c590091310f4e8d65cfad05114cebee8096cdf /src/server/index.ts | |
| parent | 動画はimagemagickで変換できない (diff) | |
| parent | Refactor (diff) | |
| download | misskey-4cc38ce02626816169fe206954fd8aea8690d927.tar.gz misskey-4cc38ce02626816169fe206954fd8aea8690d927.tar.bz2 misskey-4cc38ce02626816169fe206954fd8aea8690d927.zip | |
Merge pull request #4 from syuilo/master
追従
Diffstat (limited to 'src/server/index.ts')
| -rw-r--r-- | src/server/index.ts | 82 |
1 files changed, 31 insertions, 51 deletions
diff --git a/src/server/index.ts b/src/server/index.ts index abb8992da5..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 Accesses from 'accesses'; +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; -// Log -if (config.accesses && config.accesses.enable) { - const accesses = new Accesses({ - appName: 'Misskey', - port: config.accesses.port - }); +app.use(compress({ + flush: zlib.constants.Z_SYNC_FLUSH +})); - app.use(accesses.express); +// HSTS +// 6months (15552000sec) +if (config.url.startsWith('https')) { + app.use(async (ctx, next) => { + ctx.set('strict-transport-security', 'max-age=15552000; preload'); + await next(); + }); } -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(mount('/api', require('./api'))); +app.use(mount('/files', require('./file'))); -app.use((req, res, next) => { - log(req); - next(); -}); +// Init router +const router = new Router(); -// Drop request when without 'Host' header -app.use((req, res, next) => { - if (!req.headers['host']) { - res.sendStatus(400); - } else { - next(); - } -}); +// Routing +router.use(activityPub.routes()); +router.use(webFinger.routes()); -// 互換性のため -app.post('/meta', (req, res) => { - res.header('Access-Control-Allow-Origin', '*'); - res.json({ - version: 'nighthike' - }); -}); +// Register router +app.use(router.routes()); -/** - * Register modules - */ -app.use('/api', require('./api')); -app.use('/files', require('./file')); -app.use(activityPub); -app.use(webFinger); -app.use(require('./web')); +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()); } } |