Source: plugins/inbound/api/app.js

'use strict';
var Database = require('../../../models/database');

var SwaggerExpress = require('swagger-express-mw');
var app = require('express')();
module.exports = app; // for testing

var config = {
  appRoot: __dirname,  // required config
  configDir: __dirname + '/config'
};

/**
 * Log Function for inter process communication
 */
function LogAtMain(msg) {
  process.send('{"logmessage" : "' + msg + '"}');
}


/**
 * Start API Logger
 */

// create a rolling file logger based on date/time that fires process events
const opts = {
  logDirectory: config.appRoot + "../../../../logs/api", // NOTE: folder must exist and be writable...
  fileNamePattern: 'ALARMiator-API-<DATE>.log',
  dateFormat: 'YYYY.MM.DD'
};
var logmanager = require('simple-node-logger');
global.logger = logmanager.createRollingFileLogger(opts);
global.logger.setLevel('all');
global.logger.info('API | Started API');


/**
 * connect to database
 */
global.appRoot = __dirname + '/../../../';
var coreDb = new Database();
coreDb.openCoreDatabase((successDatabase) => {
  if (successDatabase) {
    global.coreDb = coreDb.db;
    LogAtMain('database started')
    global.logger.info('database started');
  } else {
    LogAtMain('Could not connect to database');
    global.logger.error('Could not connect to database');
  }
});



/**
 * Start Swagger API Service
 */

SwaggerExpress.create(config, function (err, swaggerExpress) {
  if (err) { throw err; }

  // install middleware
  swaggerExpress.register(app);

  var port = process.env.PORT || 5010;
  app.listen(port);

  console.log('PLUGIN | RESTAPI | Rest API running on Port 5010');
  LogAtMain('CORE | Rest API running on Port 5010');
  // Starting HTTPS
  // check if certificate-files exist
  const fs = require('fs');
  if (
    (fs.existsSync('../../certificates/key.pem')) &&
    (fs.existsSync('../../certificates/cert.pem'))) {
    // Only start SSL Server if pem files are existing

    var sslport = 5443;
    var https = require('https');
    var options = {
      key: fs.readFileSync('../../certificates/key.pem'),
      cert: fs.readFileSync('../../certificates/cert.pem'),
      passphrase: 'ALARMiator'
    };
    https.createServer(options, app).listen(sslport, function () {
      console.log('PLUGIN | RESTAPI | SSL Server started # %s!', sslport);
      LogAtMain('SSL Server started # %s!', sslport);
    });
  } else {
    console.log('PLUGIN | RESTAPI | SSL Server NOT started cause if missing certificate files');
    LogAtMain('SSL Server NOT started cause of missing certificate files ');
  }

});