1 | var express = require('express');
|
2 | var path = require('path');
|
3 | var favicon = require('serve-favicon');
|
4 | var logger = require('morgan');
|
5 | var cookieParser = require('cookie-parser');
|
6 | var bodyParser = require('body-parser');
|
7 | var MongoClient = require('mongodb').MongoClient;
|
8 | var handlebars = require('express-handlebars');
|
9 | var nconf = require('nconf');
|
10 | var session = require('express-session');
|
11 | var async = require('async');
|
12 |
|
13 |
|
14 | var routes = require('./routes/index');
|
15 |
|
16 | var app = express();
|
17 |
|
18 |
|
19 | var i18n = new (require('i18n-2'))({
|
20 | locales: ['en', 'de']
|
21 | });
|
22 |
|
23 |
|
24 | app.set('views', path.join(__dirname, 'views'));
|
25 | app.engine('hbs', handlebars({ extname: 'hbs', defaultLayout: 'layout.hbs' }));
|
26 | app.set('view engine', 'hbs');
|
27 |
|
28 |
|
29 | handlebars = handlebars.create({
|
30 | helpers: {
|
31 | __ : function(value) {
|
32 | return i18n.__(value);
|
33 | },
|
34 | toJSON : function(object) {
|
35 | return JSON.stringify(object);
|
36 | },
|
37 | niceBool : function(object) {
|
38 | if(object === undefined){
|
39 | return "No";
|
40 | }
|
41 | if(object === true){
|
42 | return "Yes";
|
43 | }else{
|
44 | return "No";
|
45 | }
|
46 | },
|
47 | app_context : function(){
|
48 | if(nconf.stores.app.get('app:context') != undefined){
|
49 | return "/" + nconf.stores.app.get('app:context');
|
50 | }else{
|
51 | return "";
|
52 | }
|
53 | },
|
54 | formatBytes : function(bytes) {
|
55 | if(bytes == 0) return '0 Byte';
|
56 | var k = 1000;
|
57 | var decimals = 2;
|
58 | var dm = decimals + 1 || 3;
|
59 | var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
|
60 | var i = Math.floor(Math.log(bytes) / Math.log(k));
|
61 | return (bytes / Math.pow(k, i)).toPrecision(dm) + ' ' + sizes[i];
|
62 | }
|
63 | }
|
64 | });
|
65 |
|
66 |
|
67 |
|
68 | var fs = require('fs');
|
69 | if (!fs.existsSync("config")){
|
70 | fs.mkdirSync("config");
|
71 | }
|
72 | if (!fs.existsSync("config/config.json")){
|
73 | fs.writeFileSync("config/config.json", "{}");
|
74 | }
|
75 | if (!fs.existsSync("config/app.json")){
|
76 | fs.writeFileSync("config/app.json", "{}");
|
77 | }
|
78 |
|
79 | var connection_config = path.join(__dirname, 'config', 'config.json');
|
80 | var app_config = path.join(__dirname, 'config', 'app.json');
|
81 |
|
82 |
|
83 | if (fs.existsSync(app_config, "utf8")) {
|
84 | if(fs.readFileSync(app_config, "utf8") == ""){
|
85 | fs.writeFileSync(app_config, "{}", 'utf8');
|
86 | }
|
87 | }
|
88 | if (fs.existsSync(connection_config, "utf8")) {
|
89 | if(fs.readFileSync(connection_config, "utf8") == ""){
|
90 | fs.writeFileSync(connection_config, "{}", 'utf8');
|
91 | }
|
92 | }
|
93 |
|
94 |
|
95 |
|
96 | nconf.add('connections', { type: 'file', file: connection_config });
|
97 | nconf.add('app', { type: 'file', file: app_config });
|
98 |
|
99 |
|
100 | var app_host = '0.0.0.0';
|
101 | var app_port = process.env.PORT || 1234;
|
102 |
|
103 |
|
104 | if(nconf.stores.app.get('app:host') != undefined){
|
105 | app_host = nconf.stores.app.get('app:host');
|
106 | }
|
107 | if(nconf.stores.app.get('app:port') != undefined){
|
108 | app_port = nconf.stores.app.get('app:port');
|
109 | }
|
110 | if(nconf.stores.app.get('app:locale') != undefined){
|
111 | i18n.setLocale(nconf.stores.app.get('app:locale'));
|
112 | }
|
113 |
|
114 |
|
115 | app_context = "";
|
116 | if(nconf.stores.app.get('app:context') != undefined){
|
117 | app_context = "/" + nconf.stores.app.get('app:context');
|
118 | }
|
119 |
|
120 | app.use(logger('dev'));
|
121 | app.use(bodyParser.json({limit: '16mb'}));
|
122 | app.use(bodyParser.urlencoded({extended: false }));
|
123 | app.use(cookieParser());
|
124 |
|
125 |
|
126 | app.use(session({
|
127 | secret: '858SGTUyX8w1L6JNm1m93Cvm8uX1QX2D',
|
128 | resave: true,
|
129 | saveUninitialized: true
|
130 | }))
|
131 |
|
132 |
|
133 | app.use(app_context + '/ace', express.static(path.join(__dirname, 'node_modules/ace-builds/src-min/')));
|
134 | app.use(app_context + '/font-awesome', express.static(path.join(__dirname, 'node_modules/font-awesome/')));
|
135 | app.use(app_context + '/jquery', express.static(path.join(__dirname, 'node_modules/jquery/dist/')));
|
136 | app.use(app_context + '/bootstrap', express.static(path.join(__dirname, 'node_modules/bootstrap/dist/')));
|
137 | app.use(app_context + '/css',express.static(path.join(__dirname, 'public/css')));
|
138 | app.use(app_context + '/fonts',express.static(path.join(__dirname, 'public/fonts')));
|
139 | app.use(app_context + '/js',express.static(path.join(__dirname, 'public/js')));
|
140 | app.use(app_context + '/favicon.ico',express.static(path.join(__dirname, 'public/favicon.ico')));
|
141 |
|
142 |
|
143 | app.use(function (req, res, next) {
|
144 | req.nconf = nconf.stores;
|
145 | req.handlebars = handlebars;
|
146 | req.i18n = i18n;
|
147 | req.app_context = app_context;
|
148 | next();
|
149 | });
|
150 |
|
151 |
|
152 | if(app_context != ""){
|
153 | app.use(app_context, routes);
|
154 | }else{
|
155 | app.use('/', routes);
|
156 | }
|
157 |
|
158 |
|
159 | app.use(function (req, res, next) {
|
160 | var err = new Error('Not Found');
|
161 | err.status = 404;
|
162 | next(err);
|
163 | });
|
164 |
|
165 |
|
166 |
|
167 |
|
168 |
|
169 | if (app.get('env') === 'development') {
|
170 | app.use(function (err, req, res, next) {
|
171 | res.status(err.status || 500);
|
172 | res.render('error', {
|
173 | message: err.message,
|
174 | error: err,
|
175 | helpers: handlebars.helpers
|
176 | });
|
177 | });
|
178 | }
|
179 |
|
180 |
|
181 |
|
182 | app.use(function (err, req, res, next) {
|
183 | res.status(err.status || 500);
|
184 | res.render('error', {
|
185 | message: err.message,
|
186 | error: {},
|
187 | helpers: handlebars.helpers
|
188 | });
|
189 | });
|
190 |
|
191 |
|
192 | var connection_list = nconf.stores.connections.get('connections');
|
193 | var connPool = require('./connections');
|
194 | app.locals.dbConnections = null;
|
195 |
|
196 | async.forEachOf(connection_list, function (value, key, callback) {
|
197 | var MongoURI = require('mongo-uri');
|
198 |
|
199 | try {
|
200 | uri = MongoURI.parse(value.connection_string);
|
201 | connPool.addConnection({connName: key, connString: value.connection_string}, app, function(err, data){
|
202 | if(err){
|
203 | delete connection_list[key];
|
204 | }
|
205 | callback();
|
206 | });
|
207 | } catch (err) {
|
208 | callback();
|
209 | }
|
210 | }, function (err) {
|
211 | if (err) console.error(err.message);
|
212 |
|
213 | app.listen(app_port, app_host, function () {
|
214 | console.log('adminMongo listening on host: http://' + app_host + ':' + app_port + app_context);
|
215 | });
|
216 | });
|
217 |
|
218 | module.exports = app;
|