UNPKG

3.04 kBJavaScriptView Raw
1/**
2 * Created on 2017/5/15.
3 * @fileoverview 请填写简要的文件说明.
4 * @author joc (Chen Wen)
5 */
6'use strict';
7
8var fs = require('fs');
9var path = require('path');
10var URL = require('url');
11var defaults = require('../constants').defaults;
12
13var MIME_TYPE = {
14 'html': 'text/html',
15 'js': 'text/javascript'
16};
17
18var resolvePath = function (file) {
19 return path.resolve(__dirname, file);
20};
21
22var assets = {
23 'end_of_popup_response.html': fs.readFileSync(resolvePath('./end_of_popup_response.html')).toString(),
24 'end_of_popup_response.js': fs.readFileSync(resolvePath('./end_of_popup_response.js')).toString(),
25 'end_of_redirect_response.html': fs.readFileSync(resolvePath('./end_of_redirect_response.html')).toString(),
26 'end_of_redirect_response.js': fs.readFileSync(resolvePath('./end_of_redirect_response.js')).toString()
27};
28
29var escape = function (s) {
30 if (s) {
31 return s.replace(/&/g, '&').
32 replace(/</g, '&lt;').
33 replace(/>/g, '&gt;').
34 replace(/\'/g, '&quot;').
35 replace(/\'/g, '&#x27;').
36 replace(/\//g, '&#x2F;');
37 }
38 return s;
39};
40
41var escapeConfigs = function (configs) {
42 Object.keys(configs).forEach(function (field) {
43 var s = configs[field];
44 if (typeof s === 'string') {
45 configs[field] = escape(s);
46 }
47 });
48 return configs;
49};
50
51var rootUrlPrefix;
52
53module.exports = {
54 assets: assets,
55 replaceRootUrlPrefix: function (prefix) {
56 rootUrlPrefix = prefix || '';
57 rootUrlPrefix += defaults.assetsUri;
58 Object.keys(assets).filter(function (name) {
59 return /\.html$/.test(name);
60 }).forEach(function (name) {
61 assets[name] = assets[name].replace(/##ROOT_URL_PATH_PREFIX##/, rootUrlPrefix);
62 });
63 return rootUrlPrefix;
64 },
65 getTemplate: function (loginStyle, configs) {
66 var html = loginStyle === 'popup' ? 'end_of_popup_response' : 'end_of_redirect_response';
67 return assets[html + '.html']
68 .replace(/##CONFIG##/, JSON.stringify(escapeConfigs(configs)));
69 },
70 middleware: function () {
71 var assetsPathname = URL.parse(rootUrlPrefix).pathname;
72 return function (req, res, next) {
73 var urlObj = URL.parse(req.url);
74 if (!new RegExp(`^${assetsPathname}\/\\w+\.js$`).test(urlObj.pathname) ||
75 req.method.toUpperCase() !== 'GET') {
76 return next();
77 }
78
79 var filename = /(\w+\.\w+)$/.exec(req.url)[1];
80
81 var ext = path.extname(filename);
82 ext = ext ? ext.slice(1) : 'unknown';
83
84 var assetsText = assets[filename];
85
86 if (!assetsText) {
87 assetsText = '<h1>500</h1>服务器内部错误!';
88 } else {
89 res.writeHead(200, {'content-type': MIME_TYPE[ext] || 'text/plain'});
90 }
91
92 res.end(assetsText);
93 };
94 }
95};