summaryrefslogtreecommitdiff
path: root/src/server/index.ts
diff options
context:
space:
mode:
authortamaina <tamaina@hotmail.co.jp>2018-04-13 23:00:41 +0900
committerGitHub <noreply@github.com>2018-04-13 23:00:41 +0900
commit4cc38ce02626816169fe206954fd8aea8690d927 (patch)
tree56c590091310f4e8d65cfad05114cebee8096cdf /src/server/index.ts
parent動画はimagemagickで変換できない (diff)
parentRefactor (diff)
downloadmisskey-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.ts82
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());
}
}