server: load async, add config
Change-Id: I451498d80faf647df2fec0d89aaa5f4a6efcf21d
diff --git a/app.js b/app.js
index 246b962..0c92661 100644
--- a/app.js
+++ b/app.js
@@ -23,42 +23,16 @@
//const sessionStore = new RedisStore({ client: redis })
const sessionStore = new session.MemoryStore()
-const app = express()
-console.log(`Loading server for ${app.get('env')}`)
-const development = app.get('env') === 'development'
-
-if (development) {
- const webpack = require('webpack')
- const webpackConfig = require('./client/webpack.config.js')
- const compiler = webpack(webpackConfig)
- app.use(require('webpack-dev-middleware')(compiler, {
- publicPath: webpackConfig.output.publicPath
- }));
- app.use(require('webpack-hot-middleware')(compiler));
+const loadConfig = async (filePath) => {
+ try {
+ return JSON.parse(await fs.readFile(filePath))
+ } catch {
+ return {}
+ }
}
/*
- Configuation for Passeport Js
-*/
-app.disable('x-powered-by');
-
-app.use(session({
- store: sessionStore,
- resave: false,
- saveUninitialized: true,
- cookie: {
- secure: false,//process.env.ENVIRONMENT !== 'development' && process.env.ENVIRONMENT !== 'test',
- maxAge: 2419200000
- },
- secret: process.env.SECRET_KEY_BASE
-}));
-app.use(passport.initialize());
-app.use(passport.session());
-// app.use(app.router);
-//app.use(cors())
-
-/*
- Share sessions between Passport.js and Socket.io
+Share sessions between Passport.js and Socket.io
*/
function logSuccess() {
@@ -70,136 +44,178 @@
}
/*
-io.use(passportSocketIo.authorize({
- key: 'connect.sid',
- secret: process.env.SECRET_KEY_BASE,
- store: sessionStore,
- passport: passport,
- cookieParser: cookieParser,
- //success: logSuccess(),
- // fail: logFail(),
-}));
-*/
-/*
+tempAccounts holds users accounts while tempting to authenticate them on Jams.
+connectedUsers holds users accounts after they got authenticated by Jams.
- tempAccounts holds users accounts while tempting to authenticate them on Jams.
- connectedUsers holds users accounts after they got authenticated by Jams.
-
- Users should be removed from connectedUsers when receiving a disconnect
- web socket call
+Users should be removed from connectedUsers when receiving a disconnect
+web socket call
*/
const tempAccounts = {};
const connectedUsers = {};
-const jami = new JamiDaemon();
-const apiRouter = new JamiRestApi(jami).getRouter()
+const createServer = async (appConfig) => {
+ const app = express()
+ console.log(`Loading server for ${app.get('env')} with config:`)
+ console.log(appConfig)
+ const development = app.get('env') === 'development'
-passport.serializeUser((user, done) => {
- console.log(user)
- connectedUsers[user.accountId] = user;
- console.log("=============================SerializeUser called " + user.accountId)
- done(null, user.accountId);
-});
-
-const deserializeUser = (id, done) => {
- console.log("=============================DeserializeUser called on: " + id + " " + connectedUsers[id])
- done(null, connectedUsers[id]);
-};
-passport.deserializeUser(deserializeUser);
-
-//var tempAccountId = '';
-
-const jamsStrategy = new LocalStrategy(
- (username, password, done) => {
-
- const newUser = {};
- newUser.username = username;
- //newUser.socketid =
-
- const accountId = jami.addAccount({
- 'managerUri': 'https://jams.savoirfairelinux.com',
- 'managerUsername': username,
- 'archivePassword': password
- });
-
- const newProps = jami.getAccount(accountId).details;
- console.log(newProps);
- //Object.entries(newProps).forEach(v => console.log(v[0], v[1]))
- //tempAccountId = accountId;
- newUser.accountId = accountId;
- console.log("AccountId: " + accountId);
- connectedUsers[accountId] = newUser;
- tempAccounts[accountId] = { done, newUser };
-
- //return done(null, newUser);
-
- /*User.findOne({ username: username }, function (err, user) {
- if (err) { return done(err); }
- if (!user) {
- return done(null, false, { message: 'Incorrect username.' });
- }
- if (!user.validPassword(password)) {
- return done(null, false, { message: 'Incorrect password.' });
- }
- return done(null, user);
- });*/
+ if (development) {
+ const webpack = require('webpack')
+ const webpackConfig = require('./client/webpack.config.js')
+ const compiler = webpack(webpackConfig)
+ app.use(require('webpack-dev-middleware')(compiler, {
+ publicPath: webpackConfig.output.publicPath
+ }));
+ app.use(require('webpack-hot-middleware')(compiler));
}
-);
-jamsStrategy.name = "jams";
-const localStrategy = new LocalStrategy(
- (username, password, done) => {
- console.log("localStrategy: " + username + " " + password);
+ /*
+ Configuation for Passeport Js
+ */
+ app.disable('x-powered-by');
- const newUser = {};
- newUser.accountId = jami.getAccountList()[0].getId();
- console.log("Local AccountId: " + newUser.accountId);
- connectedUsers[newUser.accountId] = newUser;
- done(null, newUser);
- }
-);
+ app.use(session({
+ store: sessionStore,
+ resave: false,
+ saveUninitialized: true,
+ cookie: {
+ secure: false,//!development,
+ maxAge: 2419200000
+ },
+ secret: process.env.SECRET_KEY_BASE
+ }));
+ app.use(passport.initialize());
+ app.use(passport.session());
+ // app.use(app.router);
+ //app.use(cors())
-passport.use(jamsStrategy);
-passport.use(localStrategy);
+ const jami = new JamiDaemon();
+ const apiRouter = new JamiRestApi(jami).getRouter()
-const secured = (req, res, next) => {
- console.log(`isSecured ${req.user}`);
- if (req.user && req.user.accountId) {
- return next();
- }
- res.status(401).end()
-};
-const securedRedirect = (req, res, next) => {
- if (req.user && req.user.accountId) {
- return next();
- }
- req.session.returnTo = req.originalUrl;
- res.redirect('/login');
-};
+ /*
+ io.use(passportSocketIo.authorize({
+ key: 'connect.sid',
+ secret: process.env.SECRET_KEY_BASE,
+ store: sessionStore,
+ passport: passport,
+ cookieParser: cookieParser,
+ //success: logSuccess(),
+ // fail: logFail(),
+ }));
+ */
-app.post('/auth', passport.authenticate('jams'), (req, res) => {
- res.json({ loggedin: true })
-});
-app.post('/api/localLogin', passport.authenticate('local'), (req, res) => {
- res.json({ loggedin: true })
-});
+ passport.serializeUser((user, done) => {
+ console.log(user)
+ connectedUsers[user.accountId] = user;
+ console.log("=============================SerializeUser called " + user.accountId)
+ done(null, user.accountId);
+ });
-app.use('/api', secured, apiRouter);
+ const deserializeUser = (id, done) => {
+ console.log("=============================DeserializeUser called on: " + id + " " + connectedUsers[id])
+ done(null, connectedUsers[id]);
+ };
+ passport.deserializeUser(deserializeUser);
-app.use('/', indexRouter);
+ //var tempAccountId = '';
-/* GET React App */
+ const jamsStrategy = new LocalStrategy(
+ (username, password, done) => {
-app.use(express.static(path.join(__dirname, 'client', 'dist')))
+ const newUser = {};
+ newUser.username = username;
+ //newUser.socketid =
-app.use((req, res, next) => {
- res.sendFile(path.join(__dirname, 'client', 'dist', 'index.html'));
-});
+ const accountId = jami.addAccount({
+ 'managerUri': 'https://jams.savoirfairelinux.com',
+ 'managerUsername': username,
+ 'archivePassword': password
+ });
-const server = http.Server(app);
-server.listen(3000);
+ const newProps = jami.getAccount(accountId).details;
+ console.log(newProps);
+ //Object.entries(newProps).forEach(v => console.log(v[0], v[1]))
+ //tempAccountId = accountId;
+ newUser.accountId = accountId;
+ console.log("AccountId: " + accountId);
+ connectedUsers[accountId] = newUser;
+ tempAccounts[accountId] = { done, newUser };
+
+ //return done(null, newUser);
+
+ /*User.findOne({ username: username }, function (err, user) {
+ if (err) { return done(err); }
+ if (!user) {
+ return done(null, false, { message: 'Incorrect username.' });
+ }
+ if (!user.validPassword(password)) {
+ return done(null, false, { message: 'Incorrect password.' });
+ }
+ return done(null, user);
+ });*/
+ }
+ );
+ jamsStrategy.name = "jams";
+
+ const localStrategy = new LocalStrategy(
+ (username, password, done) => {
+ console.log("localStrategy: " + username + " " + password);
+
+ const newUser = {};
+ newUser.accountId = jami.getAccountList()[0].getId();
+ console.log("Local AccountId: " + newUser.accountId);
+ connectedUsers[newUser.accountId] = newUser;
+ done(null, newUser);
+ }
+ );
+
+ passport.use(jamsStrategy);
+ passport.use(localStrategy);
+
+ const secured = (req, res, next) => {
+ console.log(`isSecured ${req.user}`);
+ if (req.user && req.user.accountId) {
+ return next();
+ }
+ res.status(401).end()
+ };
+ const securedRedirect = (req, res, next) => {
+ if (req.user && req.user.accountId) {
+ return next();
+ }
+ req.session.returnTo = req.originalUrl;
+ res.redirect('/login');
+ };
+
+ app.post('/auth', passport.authenticate('jams'), (req, res) => {
+ res.json({ loggedin: true })
+ });
+ app.post('auth/localLogin', passport.authenticate('local'), (req, res) => {
+ res.json({ loggedin: true })
+ });
+
+ app.use('/api', secured, apiRouter);
+
+ app.use('/', indexRouter);
+
+ /* GET React App */
+
+ app.use(express.static(path.join(__dirname, 'client', 'dist')))
+
+ app.use((req, res, next) => {
+ res.sendFile(path.join(__dirname, 'client', 'dist', 'index.html'));
+ });
+
+ return http.Server(app);
+}
+
+loadConfig()
+ .then(createServer)
+ .then(server => {
+ server.listen(3000);
+ })
/*
io.on('connection', (socket) => {