UNPKG

6.68 kBJavaScriptView Raw
1'use strict';
2
3var
4 connect = require('connect'),
5 http = require('http'),
6 path = require('path'),
7 fs = require('fs'),
8 mkdir = require('../util/mkdir'),
9 methodOverride = require('method-override'),
10 logger = require('morgan'),
11 favicon = require('serve-favicon'),
12 compress = require('compression'),
13 bodyParser = require('body-parser'),
14 cookieParser = require('cookie-parser'),
15 cookieSession = require('cookie-session'),
16 express = require('express'),
17 serveStatic = require('serve-static'),
18 errorHandler = require('errorhandler'),
19 minimist = require('minimist'),
20
21 config = require('config-file'),
22
23 app = express();
24
25global.settings = {
26 deploy: {
27 local: {},
28 test: {},
29 fat: {},
30 uat: {},
31 prod: {}
32 }
33};
34
35var cwd = process.cwd();
36var rootPath = path.join(path.dirname(__filename), "../../../");
37var pomyConfig = path.join(rootPath, "pomy.json");
38
39if (fs.existsSync(pomyConfig)) {
40 global.settings = config(path.relative(cwd, pomyConfig));
41} else {
42 rootPath = path.join(path.dirname(__filename), "../");
43 pomyConfig = path.join(rootPath, "pomy.json");
44 global.settings = config(path.relative(cwd, pomyConfig));
45}
46
47global.settings.paths = {
48 cwd: cwd,
49 root: rootPath
50};
51
52var argvs = minimist(process.argv.slice(2));
53
54var name = global.settings.name;
55var target = argvs.target || global.settings.target || 'local';
56var debug = !!(argvs.debug || global.settings.debug);
57
58var dSite = global.settings.deploy[target];
59var ips = dSite.ips;
60var ip = argvs.ip || (ips.length > 0 ? ips[0] : null) || '127.0.0.1';
61var domain = argvs.domain || dSite.domain || ip || "localhost";
62var sitePort = argvs.sitePort || dSite.sitePort || 8421;
63
64var configs = require('../package.json');
65var version = configs.version;
66
67var author = configs.author;
68var keywords = configs.keywords;
69var googleWebmasterMeta = configs.googleWebmasterMeta;
70var title = configs.title;
71var description = configs.description;
72
73app.set('domain', ip)
74app.set('port', sitePort)
75
76app.set('views', [path.join(__dirname, './views'),
77 path.join(__dirname, './plugins/markdown/views'),
78 path.join(__dirname, './plugins/docs/views'),
79 path.join(__dirname, './plugins/changelog/views')
80])
81app.set('view engine', 'ejs')
82
83// May not need to use favicon if using nginx for serving
84// static assets. Just comment it out below.
85app.use(favicon(path.join(__dirname, './public/favicon.ico')))
86
87if (debug) {
88 app.use(logger('dev'))
89} else {
90 app.use(logger('short'))
91}
92
93app.use(compress())
94app.use(bodyParser.urlencoded({
95 extended: false
96}))
97app.use(bodyParser.json())
98app.use(methodOverride())
99app.use(cookieParser('your secret here'))
100app.use(cookieSession({
101 name: 'surface-session',
102 keys: ['open', 'source']
103}))
104
105// May not need to use serveStatic if using nginx for serving
106// static assets. Just comment it out below.
107app.use(serveStatic(path.join(__dirname, './public')))
108app.use(serveStatic(path.join(__dirname, './plugins/markdown/public')))
109app.use(serveStatic(path.join(__dirname, './plugins/docs/public')))
110app.use(serveStatic(path.join(__dirname, './plugins/changelog/public')))
111
112// Setup local variables to be available in the views.
113app.locals.title = title;
114
115app.locals.description = description;
116
117app.locals.googleWebmasterMeta = googleWebmasterMeta;
118
119app.locals.keywords = keywords;
120
121app.locals.author = author;
122
123app.locals.node_version = process.version.replace('v', '')
124app.locals.app_version = version
125app.locals.env = target
126
127// At startup time so sync is ok.
128app.locals.readme = fs.readFileSync(path.resolve(__dirname, './README.md'), 'utf-8')
129
130if (debug) {
131 app.use(errorHandler())
132}
133
134global.settings.target = target;
135global.settings.debug = debug;
136
137global.settings.deploy[target].ips[0] = ip;
138global.settings.deploy[target].sitePort = sitePort;
139mkdir(process.env.HOME, "var/" + domain + "/documents/" + name + "/" + target + "/api");
140mkdir(process.env.HOME, "var/" + domain + "/documents/" + name + "/" + target + "/docs");
141mkdir(process.env.HOME, "var/" + domain + "/documents/" + name + "/" + target + "/backlogs");
142mkdir(process.env.HOME, "var/" + domain + "/documents/" + name + "/" + target + "/site");
143mkdir(process.env.HOME, "var/" + domain + "/documents/" + name + "/" + target + "/sprints");
144mkdir(process.env.HOME, "var/" + domain + "/documents/" + name + "/" + target + "/test reports");
145mkdir(process.env.HOME, "var/" + domain + "/documents/" + name + "/" + target + "/ui");
146mkdir(process.env.HOME, "var/" + domain + "/documents/" + name + "/" + target + "/deployments");
147mkdir(process.env.HOME, "var/" + domain + "/documents/" + name + "/" + target + "/changelogs");
148mkdir(process.env.HOME, "var/" + domain + "/documents/" + name + "/" + target + "/other");
149
150var
151 routes = require('./routes'),
152 markdownRoutes = require('./plugins/markdown/routes'),
153 docsRoutes = require('./plugins/docs/routes'),
154 changelogRoutes = require('./plugins/changelog/routes'),
155
156 core = require('./plugins/markdown/plugins/core/server.js'),
157 dropbox = require('./plugins/markdown/plugins/dropbox/server.js'),
158 github = require('./plugins/markdown/plugins/github/server.js'),
159 googledrive = require('./plugins/markdown/plugins/googledrive/server.js'),
160 onedrive = require('./plugins/markdown/plugins/onedrive/server.js');
161
162app.get('/', routes.index)
163app.get('/not-implemented', routes.not_implemented)
164
165app.post('/deploy', routes.deploy)
166app.get('/deployments', routes.getDeployments)
167app.get('/authors', routes.getAuthors)
168
169app.get('/cl', changelogRoutes.index)
170app.get('/changelogs', changelogRoutes.getChangelogs)
171
172app.get('/markdown', markdownRoutes.index)
173app.get('/markdown/documents', markdownRoutes.getDocuments)
174app.get('/markdown/documents/:id', markdownRoutes.getDocument)
175app.post('/markdown/documents/:id', markdownRoutes.updateDocument)
176app.put('/markdown/documents', markdownRoutes.saveDocument)
177app.post('/markdown/documents/:id/del', markdownRoutes.delDocument)
178app.delete('/markdown/documents/:id', markdownRoutes.delDocument)
179app.put('/markdown/documents/:id/rename', markdownRoutes.renameDocument)
180
181app.get('/api', docsRoutes.index)
182
183app.use(core)
184app.use(dropbox)
185app.use(github)
186app.use(googledrive)
187app.use(onedrive)
188
189app.use(function(req, res, next) {
190 res.header('Access-Control-Allow-Origin', '*');
191 res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
192 res.header('Access-Control-Allow-Headers', 'X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept');
193 next();
194});
195
196http.createServer(app).listen(app.get('port'), function createServerCb() {
197 console.log('Express server listening on port ' + app.get('port'));
198 console.log('\nhttp://' + app.get('domain') + ':' + app.get('port') + '\n');
199})
\No newline at end of file