summaryrefslogtreecommitdiff
path: root/src/server/web
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2018-04-13 14:30:10 +0900
committerGitHub <noreply@github.com>2018-04-13 14:30:10 +0900
commitcdf13d30f2ad47b07d9c366e9324ff6109c15be2 (patch)
treec7facc364b259ce64c4fe78da5a0d8f723e51ada /src/server/web
parentMerge branch 'master' of https://github.com/syuilo/misskey (diff)
parentFix bug (diff)
downloadmisskey-cdf13d30f2ad47b07d9c366e9324ff6109c15be2.tar.gz
misskey-cdf13d30f2ad47b07d9c366e9324ff6109c15be2.tar.bz2
misskey-cdf13d30f2ad47b07d9c366e9324ff6109c15be2.zip
Merge pull request #1460 from syuilo/koa
Koa
Diffstat (limited to 'src/server/web')
-rw-r--r--src/server/web/docs.ts35
-rw-r--r--src/server/web/index.ts84
-rw-r--r--src/server/web/url-preview.ts8
3 files changed, 71 insertions, 56 deletions
diff --git a/src/server/web/docs.ts b/src/server/web/docs.ts
index 889532e17e..e65cc87b12 100644
--- a/src/server/web/docs.ts
+++ b/src/server/web/docs.ts
@@ -1,24 +1,27 @@
/**
- * Docs Server
+ * Docs
*/
-import * as path from 'path';
-import * as express from 'express';
+import ms = require('ms');
+import * as Router from 'koa-router';
+import * as send from 'koa-send';
-const docs = path.resolve(`${__dirname}/../../client/docs/`);
+const docs = `${__dirname}/../../client/docs/`;
-/**
- * Init app
- */
-const app = express();
-app.disable('x-powered-by');
+const router = new Router();
-app.use('/assets', express.static(`${docs}/assets`));
+router.get('/assets/*', async ctx => {
+ await send(ctx, ctx.params[0], {
+ root: docs + '/assets/',
+ maxage: ms('7 days'),
+ immutable: true
+ });
+});
-/**
- * Routing
- */
-app.get(/^\/([a-z_\-\/]+?)$/, (req, res) =>
- res.sendFile(`${docs}/${req.params[0]}.html`));
+router.get('*', async ctx => {
+ await send(ctx, `${ctx.params[0]}.html`, {
+ root: docs
+ });
+});
-module.exports = app;
+export default router;
diff --git a/src/server/web/index.ts b/src/server/web/index.ts
index 5b1b6409b9..376aadda73 100644
--- a/src/server/web/index.ts
+++ b/src/server/web/index.ts
@@ -2,63 +2,75 @@
* Web Client Server
*/
-import * as path from 'path';
import ms = require('ms');
+import * as Koa from 'koa';
+import * as Router from 'koa-router';
+import * as send from 'koa-send';
+import * as favicon from 'koa-favicon';
-// express modules
-import * as express from 'express';
-import * as bodyParser from 'body-parser';
-import * as favicon from 'serve-favicon';
-import * as compression from 'compression';
+import docs from './docs';
-const client = path.resolve(`${__dirname}/../../client/`);
+const client = `${__dirname}/../../client/`;
-// Create server
-const app = express();
-app.disable('x-powered-by');
+// Init app
+const app = new Koa();
-app.use('/docs', require('./docs'));
-
-app.use(bodyParser.urlencoded({ extended: true }));
-app.use(bodyParser.json({
- type: ['application/json', 'text/plain']
-}));
-app.use(compression());
+// Serve favicon
+app.use(favicon(`${client}/assets/favicon.ico`));
-app.use((req, res, next) => {
- res.header('X-Frame-Options', 'DENY');
- next();
+// Common request handler
+app.use(async (ctx, next) => {
+ // IFrameの中に入れられないようにする
+ ctx.set('X-Frame-Options', 'DENY');
+ await next();
});
+// Init router
+const router = new Router();
+
//#region static assets
-app.use(favicon(`${client}/assets/favicon.ico`));
-app.get('/apple-touch-icon.png', (req, res) => res.sendFile(`${client}/assets/apple-touch-icon.png`));
-app.use('/assets', express.static(`${client}/assets`, {
- maxAge: ms('7 days')
-}));
-app.use('/assets/*.js', (req, res) => res.sendFile(`${client}/assets/404.js`));
-app.use('/assets', (req, res) => {
- res.sendStatus(404);
+router.get('/assets/*', async ctx => {
+ await send(ctx, ctx.path, {
+ root: client,
+ maxage: ms('7 days'),
+ immutable: true
+ });
+});
+
+// Apple touch icon
+router.get('/apple-touch-icon.png', async ctx => {
+ await send(ctx, `${client}/assets/apple-touch-icon.png`);
});
// ServiceWroker
-app.get(/^\/sw\.(.+?)\.js$/, (req, res) =>
- res.sendFile(`${client}/assets/sw.${req.params[0]}.js`));
+router.get(/^\/sw\.(.+?)\.js$/, async ctx => {
+ await send(ctx, `${client}/assets/sw.${ctx.params[0]}.js`);
+});
// Manifest
-app.get('/manifest.json', (req, res) =>
- res.sendFile(`${client}/assets/manifest.json`));
+router.get('/manifest.json', async ctx => {
+ await send(ctx, `${client}/assets/manifest.json`);
+});
//#endregion
-app.get(/\/api:url/, require('./url-preview'));
+// Docs
+router.use('/docs', docs.routes());
+
+// URL preview endpoint
+router.get('url', require('./url-preview'));
// Render base html for all requests
-app.get('*', (req, res) => {
- res.sendFile(path.resolve(`${client}/app/base.html`), {
- maxAge: ms('7 days')
+router.get('*', async ctx => {
+ await send(ctx, `app/base.html`, {
+ root: client,
+ maxage: ms('3 days'),
+ immutable: true
});
});
+// Register router
+app.use(router.routes());
+
module.exports = app;
diff --git a/src/server/web/url-preview.ts b/src/server/web/url-preview.ts
index 0c5fd8a78e..4b3f44a5da 100644
--- a/src/server/web/url-preview.ts
+++ b/src/server/web/url-preview.ts
@@ -1,11 +1,11 @@
-import * as express from 'express';
+import * as Koa from 'koa';
import summaly from 'summaly';
-module.exports = async (req: express.Request, res: express.Response) => {
- const summary = await summaly(req.query.url);
+module.exports = async (ctx: Koa.Context) => {
+ const summary = await summaly(ctx.query.url);
summary.icon = wrap(summary.icon);
summary.thumbnail = wrap(summary.thumbnail);
- res.send(summary);
+ ctx.body = summary;
};
function wrap(url: string): string {