diff options
| author | syuilo <syuilotan@yahoo.co.jp> | 2018-03-29 20:34:39 +0900 |
|---|---|---|
| committer | syuilo <syuilotan@yahoo.co.jp> | 2018-03-29 20:34:39 +0900 |
| commit | 7228e6d11178dfa715fc2ae4e834dec129248214 (patch) | |
| tree | 8a6224fa578501d67387da8129fd06932f7a818a /src/server/web/index.ts | |
| parent | 整理した (diff) | |
| download | misskey-7228e6d11178dfa715fc2ae4e834dec129248214.tar.gz misskey-7228e6d11178dfa715fc2ae4e834dec129248214.tar.bz2 misskey-7228e6d11178dfa715fc2ae4e834dec129248214.zip | |
:v:
Diffstat (limited to 'src/server/web/index.ts')
| -rw-r--r-- | src/server/web/index.ts | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/src/server/web/index.ts b/src/server/web/index.ts new file mode 100644 index 0000000000..2fc8f1b8ab --- /dev/null +++ b/src/server/web/index.ts @@ -0,0 +1,66 @@ +/** + * Web Client Server + */ + +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'; + +const client = `${__dirname}/../../client/`; + +// Create server +const app = express(); +app.disable('x-powered-by'); + +app.use('/docs', require('./docs/server')); + +app.use(bodyParser.urlencoded({ extended: true })); +app.use(bodyParser.json({ + type: ['application/json', 'text/plain'] +})); +app.use(compression()); + +app.use((req, res, next) => { + res.header('X-Frame-Options', 'DENY'); + next(); +}); + +//#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); +}); + +app.use('/recover', (req, res) => res.sendFile(`${client}/assets/recover.html`)); + +// ServiceWroker +app.get(/^\/sw\.(.+?)\.js$/, (req, res) => + res.sendFile(`${client}/assets/sw.${req.params[0]}.js`)); + +// Manifest +app.get('/manifest.json', (req, res) => + res.sendFile(`${client}/assets/manifest.json`)); + +//#endregion + +app.get(/\/api: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') + }); +}); + +module.exports = app; |