fixed mail service
This commit is contained in:
		
							
								
								
									
										44
									
								
								src/db.ts
									
									
									
									
									
								
							
							
						
						
									
										44
									
								
								src/db.ts
									
									
									
									
									
								
							@@ -7,7 +7,7 @@ import ChangelogModel from './models/changelog';
 | 
			
		||||
// database urls, prod db url is retrieved automatically
 | 
			
		||||
const TESTING_URL = 'mongodb://localhost/dfopdb_test';
 | 
			
		||||
const DEV_URL = 'mongodb://localhost/dfopdb';
 | 
			
		||||
const debugging = true;
 | 
			
		||||
const debugging = false;
 | 
			
		||||
 | 
			
		||||
if (process.env.NODE_ENV !== 'production' && debugging) {
 | 
			
		||||
  mongoose.set('debug', true);  // enable mongoose debug
 | 
			
		||||
@@ -19,7 +19,8 @@ export default class db {
 | 
			
		||||
    mode: null,
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  static connect (mode = '', done: Function = () => {}) {  // set mode to test for unit/integration tests, otherwise skip parameters. done is also only needed for testing
 | 
			
		||||
  // set mode to test for unit/integration tests, otherwise skip parameters. done is also only needed for testing
 | 
			
		||||
  static connect (mode = '', done: Function = () => {}) {
 | 
			
		||||
    if (this.state.db) return done();  // db is already connected
 | 
			
		||||
 | 
			
		||||
    // find right connection url
 | 
			
		||||
@@ -43,9 +44,14 @@ export default class db {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // connect to db
 | 
			
		||||
    mongoose.connect(connectionString, {useNewUrlParser: true, useUnifiedTopology: true, useCreateIndex: true, connectTimeoutMS: 10000}, err => {
 | 
			
		||||
    mongoose.connect(connectionString, {
 | 
			
		||||
      useNewUrlParser: true,
 | 
			
		||||
      useUnifiedTopology: true,
 | 
			
		||||
      useCreateIndex: true,
 | 
			
		||||
      connectTimeoutMS: 10000
 | 
			
		||||
    }, err => {
 | 
			
		||||
      if (err) done(err);
 | 
			
		||||
    });
 | 
			
		||||
    }).then(() => {});
 | 
			
		||||
    mongoose.connection.on('error', console.error.bind(console, 'connection error:'));
 | 
			
		||||
    mongoose.connection.on('connected', () => {  // evaluation connection behaviour on prod
 | 
			
		||||
      if (process.env.NODE_ENV !== 'test') {  // Do not interfere with testing
 | 
			
		||||
@@ -63,7 +69,7 @@ export default class db {
 | 
			
		||||
        mongoose.connection.close(() => {
 | 
			
		||||
          console.info('Mongoose default connection disconnected through app termination');
 | 
			
		||||
          process.exit(0);
 | 
			
		||||
        });
 | 
			
		||||
        }).then(() => {});
 | 
			
		||||
      }
 | 
			
		||||
    });
 | 
			
		||||
    mongoose.connection.once('open', () => {
 | 
			
		||||
@@ -79,14 +85,15 @@ export default class db {
 | 
			
		||||
      console.info(process.env.NODE_ENV === 'test' ? '' : `Disconnected from database`);
 | 
			
		||||
      this.state.db = 0;
 | 
			
		||||
      done();
 | 
			
		||||
    });
 | 
			
		||||
    }).then(() => {});
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  static getState () {
 | 
			
		||||
    return this.state;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  static drop (done: Function = () => {}) {  // drop all collections of connected db (only dev and test for safety reasons ;)
 | 
			
		||||
  // drop all collections of connected db (only dev and test for safety reasons)
 | 
			
		||||
  static drop (done: Function = () => {}) {
 | 
			
		||||
    if (!this.state.db || this.state.mode === 'prod') return done();  // no db connection or prod db
 | 
			
		||||
    this.state.db.db.listCollections().toArray((err, collections) => {  // get list of all collections
 | 
			
		||||
      if (collections.length === 0) {  // there are no collections to drop
 | 
			
		||||
@@ -106,7 +113,8 @@ export default class db {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  static loadJson (json, done: Function = () => {}) {  // insert given JSON data into db, uses core mongodb methods
 | 
			
		||||
    if (!this.state.db || !json.hasOwnProperty('collections') || json.collections.length === 0) {  // no db connection or nothing to load
 | 
			
		||||
    // no db connection or nothing to load
 | 
			
		||||
    if (!this.state.db || !json.hasOwnProperty('collections') || json.collections.length === 0) {
 | 
			
		||||
      return done();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -126,8 +134,8 @@ export default class db {
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // changelog entry
 | 
			
		||||
  static log(req, thisOrCollection, conditions = null, data = null) {  // expects (req, this (from query helper)) or (req, collection, conditions, data)
 | 
			
		||||
  // changelog entry, expects (req, this (from query helper)) or (req, collection, conditions, data)
 | 
			
		||||
  static log(req, thisOrCollection, conditions = null, data = null) {
 | 
			
		||||
    if (! (conditions || data)) {  // (req, this)
 | 
			
		||||
      data = thisOrCollection._update ? _.cloneDeep(thisOrCollection._update) : {};  // replace undefined with {}
 | 
			
		||||
      Object.keys(data).forEach(key => {
 | 
			
		||||
@@ -136,12 +144,24 @@ export default class db {
 | 
			
		||||
          delete data[key];
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
      new ChangelogModel({action: req.method + ' ' + req.url, collectionName: thisOrCollection._collection.collectionName, conditions: thisOrCollection._conditions, data: data, user_id: req.authDetails.id ? req.authDetails.id : null}).save(err => {
 | 
			
		||||
      new ChangelogModel({
 | 
			
		||||
        action: req.method + ' ' + req.url,
 | 
			
		||||
        collectionName: thisOrCollection._collection.collectionName,
 | 
			
		||||
        conditions: thisOrCollection._conditions,
 | 
			
		||||
        data: data,
 | 
			
		||||
        user_id: req.authDetails.id ? req.authDetails.id : null
 | 
			
		||||
      }).save(err => {
 | 
			
		||||
        if (err) console.error(err);
 | 
			
		||||
      });
 | 
			
		||||
    }
 | 
			
		||||
    else {  // (req, collection, conditions, data)
 | 
			
		||||
      new ChangelogModel({action: req.method + ' ' + req.url, collectionName: thisOrCollection, conditions: conditions, data: data, user_id: req.authDetails.id ? req.authDetails.id : null}).save(err => {
 | 
			
		||||
      new ChangelogModel({
 | 
			
		||||
        action: req.method + ' ' + req.url,
 | 
			
		||||
        collectionName: thisOrCollection,
 | 
			
		||||
        conditions: conditions,
 | 
			
		||||
        data: data,
 | 
			
		||||
        user_id: req.authDetails.id ? req.authDetails.id : null
 | 
			
		||||
      }).save(err => {
 | 
			
		||||
        if (err) console.error(err);
 | 
			
		||||
      });
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -10,7 +10,7 @@ export default class Mail{
 | 
			
		||||
  static mailPass: string;
 | 
			
		||||
 | 
			
		||||
  static init() {
 | 
			
		||||
    this.mailPass = Array(64).map(() => Math.floor(Math.random() * 10)).join('');
 | 
			
		||||
    this.mailPass = Array(64).fill(0).map(() => Math.floor(Math.random() * 10)).join('');
 | 
			
		||||
    this.uri = JSON.parse(process.env.VCAP_SERVICES).Mail[0].credentials.uri;
 | 
			
		||||
    this.auth.username = JSON.parse(process.env.VCAP_SERVICES).Mail[0].credentials.username;
 | 
			
		||||
    this.auth.password = JSON.parse(process.env.VCAP_SERVICES).Mail[0].credentials.password;
 | 
			
		||||
@@ -48,6 +48,7 @@ export default class Mail{
 | 
			
		||||
        auth: this.auth
 | 
			
		||||
      });
 | 
			
		||||
    }).then(() => {  // init done successfully
 | 
			
		||||
      console.info('Mail service established successfully');
 | 
			
		||||
      this.send('lukas.veit@bosch.com', 'Mail Service started', new Date().toString());
 | 
			
		||||
    }).catch(err => {  // anywhere an error occurred
 | 
			
		||||
      console.error(`Mail init error: ${err.request.method} ${err.request.path}: ${err.response.status}`,
 | 
			
		||||
 
 | 
			
		||||
@@ -6,6 +6,7 @@ import helmet from 'helmet';
 | 
			
		||||
import cors from 'cors';
 | 
			
		||||
import api from './api';
 | 
			
		||||
import db from './db';
 | 
			
		||||
import Mail from './helpers/mail';
 | 
			
		||||
 | 
			
		||||
// TODO: check header, also in UI
 | 
			
		||||
 | 
			
		||||
@@ -17,9 +18,11 @@ console.info(process.env.NODE_ENV === 'production' ?
 | 
			
		||||
// mongodb connection
 | 
			
		||||
db.connect();
 | 
			
		||||
 | 
			
		||||
// mail service
 | 
			
		||||
Mail.init();
 | 
			
		||||
 | 
			
		||||
// create Express app
 | 
			
		||||
const app = express();
 | 
			
		||||
app.disable('x-powered-by');
 | 
			
		||||
 | 
			
		||||
// get port from environment, defaults to 3000
 | 
			
		||||
const port = process.env.PORT || 3000;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user