summaryrefslogtreecommitdiff
path: root/src/server/web
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/web')
-rw-r--r--src/server/web/docs.ts25
-rw-r--r--src/server/web/index.ts77
-rw-r--r--src/server/web/url-preview.ts8
3 files changed, 59 insertions, 51 deletions
diff --git a/src/server/web/docs.ts b/src/server/web/docs.ts
index 889532e17e..a546d1e88c 100644
--- a/src/server/web/docs.ts
+++ b/src/server/web/docs.ts
@@ -1,24 +1,21 @@
/**
- * Docs Server
+ * Docs
*/
import * as path from 'path';
-import * as express from 'express';
+import * as Router from 'koa-router';
+import * as send from 'koa-send';
const docs = path.resolve(`${__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, `${docs}/assets`);
+});
-/**
- * Routing
- */
-app.get(/^\/([a-z_\-\/]+?)$/, (req, res) =>
- res.sendFile(`${docs}/${req.params[0]}.html`));
+router.get(/^\/([a-z_\-\/]+?)$/, async ctx => {
+ await send(ctx, `${docs}/${ctx.params[0]}.html`);
+});
-module.exports = app;
+module.exports = router;
diff --git a/src/server/web/index.ts b/src/server/web/index.ts
index 5b1b6409b9..b28ad5592c 100644
--- a/src/server/web/index.ts
+++ b/src/server/web/index.ts
@@ -5,60 +5,71 @@
import * as path from 'path';
import ms = require('ms');
-// 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 * as Koa from 'koa';
+import * as Router from 'koa-router';
+import * as send from 'koa-send';
+import * as favicon from 'koa-favicon';
const client = path.resolve(`${__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');
+// Common request handler
+app.use((ctx, next) => {
+ // IFrameの中に入れられないようにする
+ ctx.set('X-Frame-Options', 'DENY');
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}/assets`,
+ 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', require('./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, `${client}/app/base.html`, {
+ maxage: ms('7 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 {