From 7228e6d11178dfa715fc2ae4e834dec129248214 Mon Sep 17 00:00:00 2001 From: syuilo Date: Thu, 29 Mar 2018 20:34:39 +0900 Subject: :v: --- src/server/web/index.ts | 66 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 src/server/web/index.ts (limited to 'src/server/web/index.ts') 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; -- cgit v1.2.3-freya