-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathaethyrnet.js
153 lines (124 loc) · 4.1 KB
/
aethyrnet.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
if(process.env.NODE_ENV != 'production')
process.env.NODE_ENV = 'development';
var util = require ('./src/util.js');
var clc = require('cli-color');
util.log('==== ' + clc.cyan('Beginning Aethyrnet server startup') + ' ====');
//Packaged Libraries
var url = require('url');
var async = require('async');
var express = require('express');
var MongoStore = require('connect-mongo')(express);
var mongoose = require('mongoose');
var passport = require('passport');
var gzip = require('connect-gzip');
var aethyrForum = require('aethyr-forum');
var conf = require('./src/conf.js');
var secrets = require('./src/secrets.js');
async.waterfall([
function(callback)
{
//Connect to the database.
//Wait for database connection before doing anything else.
require('./src/database.js')(callback);
},
function(database, callback)
{
//Run Passport config
conf.configurePassport();
conf.configureForum();
conf.configureMail();
//Set up middleware / static routing
util.log("Setting up Express server and static file routing..");
var server = express();
function staticRouting(dirname, age)
{
return gzip.staticGzip(__dirname + dirname, {
maxAge: age,
gzPath: __dirname + '/gzip/' + dirname,
});
};
//Cache images and JS libraries for up to a day.
server.use(express.favicon(__dirname + '/public/images/favicon.ico'));
server.use('/public/images', staticRouting('/public/images', 1 * 24 * 60 * 60 * 1000));
server.use('/public/js/lib', staticRouting('/public/js/lib', 1 * 24 * 60 * 60 * 1000));
//On other stuff, no caching currently.
server.use('/public', staticRouting('/public', 0));
//Enable automatic body parsing on requests.
server.use(express.bodyParser());
//Session settings.
server.use(express.cookieParser());
server.configure(function()
{
var cName = ( process.env.NODE_ENV == 'production' ? 'connect.sid' : 'connect.debug');
util.warn("Cookie Name: " + cName);
server.use(express.session({
name : cName,
key : cName,
secret : secrets.cookieSecret,
cookie :
{
//One year expiration
maxAge: 365 * 24 * 60 * 60 * 1000,
domain:'.aethyrnet.com'
},
store : new MongoStore({
mongoose_connection : database,
collection : 'sessions',
auto_reconnect : true
})
}));
});
//Automatic GZipping.
server.use(gzip.gzip());
//Start up Passport
server.use(passport.initialize());
server.use(passport.session());
server.use(/\/forum/,aethyrForum.middleware);
//-------------------------------------------------------
// Main API
//-------------------------------------------------------
//Set up server routing.
require('./src/routes.js')(server);
require('./src/dbSetup.js');
util.log("Setting up External Query Loop..");
//Load the main query manager.
var query_manager = require('./src/query_manager.js');
//query_manager.register(query_manager.query_lodestone);
query_manager.register(query_manager.query_ffxiv_blog);
query_manager.register(query_manager.query_reddit);
query_manager.register(query_manager.query_dev_tracker);
query_manager.register(query_manager.query_lcs);
query_manager.start();
return callback(null, server);
}],
//All startup proceedures done.
function(err, server)
{
if(err)
{
//Shut down startup with error notification.
util.log("Startup Errors: ")
if(Array.isArray(err))
for(var idx in err)
{
util.log(" ==== " + (idx+1) + " ==== ");
util.log(err);
}
else
util.log(err);
return;
}
util.log("Binding server to port..");
util.log('==== ' + clc.cyan('Aethyrnet server startup complete') + ' ====');
server.configure('production', function()
{
util.log('---- MODE: ' + clc.redBright('production') + ' ----');
server.listen(8000);
util.sendMail("[email protected]", "Aethyrnet Online", "The Aethyrnet.com server started successfully. \n - " + new Date());
});
server.configure('development', function()
{
util.log('NODE_ENV: ' + clc.cyan('development'));
server.listen(8080);
});
});