diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2018-04-13 14:30:10 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-04-13 14:30:10 +0900 |
| commit | cdf13d30f2ad47b07d9c366e9324ff6109c15be2 (patch) | |
| tree | c7facc364b259ce64c4fe78da5a0d8f723e51ada /src/server/web | |
| parent | Merge branch 'master' of https://github.com/syuilo/misskey (diff) | |
| parent | Fix bug (diff) | |
| download | misskey-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.ts | 35 | ||||
| -rw-r--r-- | src/server/web/index.ts | 84 | ||||
| -rw-r--r-- | src/server/web/url-preview.ts | 8 |
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 { |