forked from hd-auth/auth.sigidli.com
119 lines
4.4 KiB
JavaScript
119 lines
4.4 KiB
JavaScript
module.exports = function () {
|
|
var server = {};
|
|
|
|
server.run = (db) => {
|
|
console.log("Starting Server")
|
|
return new Promise((resolve, reject) => {
|
|
const config = require('config');
|
|
const express = require('express');
|
|
const pug = require("pug");
|
|
const session = require("express-session");
|
|
const SequelizeSessionStore = require('connect-session-sequelize')(session.Store);
|
|
const bodyParser = require("body-parser");
|
|
const path = require("path");
|
|
|
|
const passport = require('passport');
|
|
const HDAuthStrategy = require('passport-hd-auth').Strategy;
|
|
|
|
const app = express();
|
|
|
|
app.set("view engine", "pug");
|
|
app.set("views", path.resolve("server/views"));
|
|
|
|
app.use('/static', express.static("server/static"));
|
|
|
|
// Session related stuff...
|
|
function extendDefaultFields(defaults, session) {
|
|
return {
|
|
data: defaults.data,
|
|
expires: session.cookie && session.cookie.expires ? session.cookie.expires : defaults.expires, // 157680000
|
|
userId: session.passport.user
|
|
};
|
|
}
|
|
|
|
var sessionStore = new SequelizeSessionStore({
|
|
db: db.sequelize,
|
|
table: 'session',
|
|
extendDefaultFields: extendDefaultFields
|
|
// TODO: Define expiry and clean up...
|
|
});
|
|
|
|
app.use(session({
|
|
store: sessionStore,
|
|
secret: config.get("server.secret"),
|
|
saveUninitialized: false,
|
|
cookie: config.get("server.cookie")
|
|
}));
|
|
sessionStore.sync();
|
|
|
|
app.use(bodyParser.urlencoded({ extended: true }));
|
|
app.use(bodyParser.json());
|
|
|
|
// Setup all passport strategies
|
|
const hdAuthUtil = new HDAuthStrategy({
|
|
serverExtendedPrivateKey: config.get('bip32.serverExtendedPrivateKey'),
|
|
serverExtendedPrivateKeyDerivationPath: config.get('bip32.serverExtendedPrivateKeyDerivationPath'),
|
|
serviceAuthenticatingExtendedPublicKey: config.get('bip32.serviceAuthenticatingExtendedPublicKey')
|
|
}, function(xpub, challengeRequestDerivationPath, challengeRequestMessage, challengeResponseSignature, done) {
|
|
db.User.findOne({
|
|
include: [
|
|
{
|
|
association: db.User.ExtendedPublicKeys,
|
|
required: true,
|
|
where: {
|
|
xpub: xpub
|
|
}
|
|
}
|
|
]
|
|
}).then(user => {
|
|
if(user) {
|
|
done(null, user, {verified: true})
|
|
} else {
|
|
done(null, false);
|
|
}
|
|
}).catch(error => {
|
|
done(error);
|
|
})
|
|
});
|
|
passport.use(hdAuthUtil); // TODO: implement new hdAuthUtil.Strategy()
|
|
|
|
passport.serializeUser(function(user, done) {
|
|
done(null, user.id);
|
|
});
|
|
|
|
passport.deserializeUser(function(id, done) {
|
|
// TODO: Add memberships and things like that...
|
|
return db.User.findByPk(id) // TODO: Limit attributes...
|
|
.then(user => {
|
|
return done(null, user);
|
|
}).catch(error => {
|
|
return done(error);
|
|
})
|
|
});
|
|
|
|
app.use(passport.initialize());
|
|
app.use(passport.session());
|
|
|
|
// TODO: Create a load router module... that has inheritence...
|
|
var router = require('./router/index.js')({
|
|
app: app,
|
|
express: express,
|
|
db: db,
|
|
passport: passport,
|
|
hdAuthUtil: hdAuthUtil
|
|
});
|
|
// REGISTER OUR ROUTES -------------------------------
|
|
// all of our routes will be prefixed with /api
|
|
app.use('/', router);
|
|
|
|
const port = process.env.PORT || config.get("server.port");
|
|
|
|
app.listen(port);
|
|
resolve(port);
|
|
});
|
|
}
|
|
|
|
// TODO: other features I might wanna do in the server...
|
|
|
|
return server;
|
|
}; |