UNPKG

vpn.email

Version:
110 lines (109 loc) 4.11 kB
"use strict"; const express = require("express"); const https = require("https"); const path = require("path"); const favicon = require("serve-favicon"); const bodyParser = require("body-parser"); const cookieParser = require("cookie-parser"); const socketio = require("socket.io"); const osenv = require("osenv"); const pem = require("pem"); const Async = require("async"); const compression = require("compression"); const fs = require("fs"); const socketRoute = require("./views/api/sockRoute"); //import Procession from './process'; exports.serverStart = () => { const app = express(); const port = process.env.PORT || 3000; const setupFolderName = '/Vpn.Email'; const localPath = path.parse(osenv.home() + setupFolderName); const keyFile = path.parse(osenv.home() + setupFolderName + '/key.pem'); const cretFile = path.parse(osenv.home() + setupFolderName + '/cret.pem'); const CertDays = 365 * 10; const createCertificate = (CallBack) => { Async.waterfall([ next => pem.createCertificate({ days: CertDays, selfSigned: true }, next), (key, next) => { Async.parallel([ _next => fs.writeFile(path.format(keyFile), key.serviceKey, { encoding: 'utf8' }, next), _next => fs.writeFile(path.format(cretFile), key.certificate, { encoding: 'utf8' }, next) ], next); } ], err => { if (err) return CallBack(err); CallBack(); }); }; const checkServerKeyFile = (CallBack) => { Async.parallel([ next => fs.access(path.format(keyFile), next), next => fs.access(path.format(cretFile), next) ], err => { if (err) { return createCertificate(CallBack); } CallBack(); }); }; const checkLocal_SetupPath = (CallBack) => { let localPathString = path.format(localPath); fs.access(localPathString, err => { if (err) { return fs.mkdir(localPathString, err1 => { if (err1) return CallBack(err1); return CallBack(); }); } return CallBack(); }); }; Async.series([ next => checkLocal_SetupPath(next), next => checkServerKeyFile(next) ], err => { if (err) { console.log("Vpn.email file system init error! vpn.email can't continue.", err); return process.exit(1); } // view engine setup const option = { key: fs.readFileSync(path.format(keyFile), 'utf8'), cert: fs.readFileSync(path.format(cretFile), 'utf8') }; app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'pug'); app.use(favicon(__dirname + '/public/favicon.ico')); app.use(bodyParser.json()); app.use(compression()); //use compression app.use(bodyParser.urlencoded({ extended: false })); app.use(cookieParser()); app.use(require('stylus').middleware(path.join(__dirname, 'public'))); app.use(express.static(path.join(__dirname, 'public'))); app.get('/', (req, res) => { res.render('home', { title: 'home' }); }); const server = https.createServer(option, app); const io = socketio(server); socketRoute.sockRoute(io); require('./views/home/Route')(app); require('./views/firstRun/Route')(app); require('./views/config/Route')({ 'io': io, 'app': app }); require('./views/api/Route')({ 'app': app, 'io': io }); app.use((req, res, next) => { var err = new Error('Not Found'); err.message = '404'; next(err); }); server.listen(port, () => { console.log('Server start at: ' + port); }); app.set('online', true); module.exports = app; //const procession = new Procession ( app ) }); };