90 lines
3.4 KiB
JavaScript
90 lines
3.4 KiB
JavaScript
#!/usr/bin/env node
|
|
|
|
var express = require('express');
|
|
var app = express();
|
|
var port = process.env.PORT || 8088;
|
|
var passport = require('passport');
|
|
var flash = require('connect-flash');
|
|
var path = require('path');
|
|
var ejsPath = path.join(__dirname, 'public');
|
|
var rootPath = path.join(__dirname, 'public');
|
|
var favicon = require('serve-favicon');
|
|
|
|
var morgan = require('morgan');
|
|
var cookieParser = require('cookie-parser');
|
|
var bodyParser = require('body-parser');
|
|
var session = require('express-session');
|
|
var FileStore = require('session-file-store')(session);
|
|
|
|
var moment = require('moment');
|
|
var nodeMailer = require('nodemailer');
|
|
//var configDB = require('./config/database.js');
|
|
var config = require('./config');
|
|
var models = require("./models");
|
|
|
|
//models.sequelize.sync().then(function () {
|
|
//SMTP Transport setup.
|
|
var smtpTransport = nodeMailer.createTransport({host: config.smtpHost, port: config.smtpPort, secure: true, ignoreTLS: false, requiresAuth: true, auth: {user: config.smtpUser, pass: config.smtpPassword}});
|
|
|
|
//Setup our passport configuration passing the user model.
|
|
require('./app/passport')(passport, models.User); // pass passport for configuration
|
|
|
|
//Serve the fav icon before any logging.
|
|
app.use(favicon(__dirname + '/public/images/Chicken.ico'));
|
|
|
|
//Setup NodeJS express.
|
|
app.use(morgan('dev')); // log every request to the console
|
|
app.use(cookieParser()); // read cookies (needed for auth)
|
|
app.use(bodyParser.urlencoded({extended: true}));
|
|
app.use(bodyParser.json());
|
|
|
|
//Setup Stylus to manage our awesome styles.
|
|
app.use(require('stylus').middleware(path.join(__dirname, 'public')));
|
|
|
|
//Setup EJS for view templating.
|
|
//app.engine('.ejs', require('ejs').__express);
|
|
//app.engine('.ejs', require('ejs').renderFile);
|
|
app.set('view engine', 'ejs'); //html
|
|
app.set('views', ejsPath);
|
|
|
|
//Static routes
|
|
// Can add: maxAge: 1d, redirect: false, and setHeaders: ...
|
|
app.use(express.static(rootPath, {dotfiles: 'deny', index: false, extensions: ['htm', 'html', 'gif', 'png', 'jpg', 'jpeg', 'map', 'css', 'js', 'ico', 'xml','txt','zip','pdf'], etag: false}));
|
|
|
|
//Passport
|
|
app.use(session({
|
|
store: new FileStore({ttl: 12 * 60 * 60, encrypt: false}), //https://www.npmjs.com/package/session-file-store
|
|
cookieName: 'session',
|
|
secret: 'countingprogrammersinsteadofsheepleadstobettersleep',
|
|
activeDuration: 12 * 60 * 60 * 1000,
|
|
duration: 12 * 60 * 60 * 1000,
|
|
httpOnly: true,
|
|
secure: false,
|
|
ephemeral: false
|
|
}));
|
|
app.use(flash()); // use connect-flash for flash messages stored in session
|
|
app.use(passport.initialize());
|
|
app.use(passport.session()); // persistent login sessions
|
|
|
|
//Routes
|
|
require('./app/routes.js')(app, rootPath, passport, smtpTransport, models.sequelize); // load our routes and pass in our app and fully configured passport
|
|
|
|
//Setup initial database data.
|
|
require('./app/initialData.js')(models.sequelize);
|
|
|
|
//Ensure we have an endsWith method in String.
|
|
String.prototype.endsWith = function(suffix) {
|
|
return this.indexOf(suffix, this.length - suffix.length) !== -1;
|
|
};
|
|
|
|
//Launch
|
|
app.listen(port);
|
|
console.log('The magic happens on port ' + port);
|
|
console.log("Root Path: " + rootPath);
|
|
console.log("Time now is: " + moment(new Date()).format("MMM Do YYYY, h:mm:ss a"));
|
|
//}).error(function(err) {
|
|
// console.log("Couldn't create or initialize the database:" + err);
|
|
//})
|
|
|
|
|