Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var express = require('express'),
- nforce = require('nforce'),
- nodemailer = require('nodemailer'),
- config = require('./config/config.' + process.env.NODE_ENV),
- tconfig = require('./config/topics'),
- exec = require('child_process').exec,
- http = require('http'),
- //pushToppicsController = require('./controller/pushtopics'),
- mongoConnect = require('./controller/mongodb-connect'),
- log = require('./controller/log');
- //process info
- log('NODE_ENV : ' + process.env.NODE_ENV);
- log('PID : ' + process.pid);
- //configure app
- var app = express();
- var transport = nodemailer.createTransport('SMTP', {
- host: config.email.host,
- auth: {
- user: config.email.username,
- pass: config.email.password,
- }
- });
- //salesforce initialisation
- var org = nforce.createConnection({
- clientId: config.salesforce.CLIENT_ID,
- clientSecret: config.salesforce.CLIENT_SECRET,
- redirectUri: config.salesforce.CALLBACK_URL + '/oauth/_callback',
- apiVersion: 'v32.0',
- mode: 'multi',
- environment: config.salesforce.ENVIRONMENT,
- autoRefresh: true
- });
- var globals = {
- config: config,
- mongoClient: false,
- affiliateDB: false,
- qscourseDB: false,
- qscourseLocalDB: false
- };
- //mongodb connection
- mongoConnect.init(globals, function() {
- //pushToppicsController.init(globals);
- org.authenticate({
- username: globals.config.salesforce.USERNAME,
- password: globals.config.salesforce.PASSWORD,
- securityToken: globals.config.salesforce.SECURITYTOKEN
- }, function(err, oauth) {
- if(err) {
- log('Salesforce authentication Error: ' + err.message);
- //throw err;
- } else {
- log(':: Connected to Salesforce ::');
- }
- org.oauth = oauth;
- var sapi_log_collection = globals.qscourseLocalDB.collection('sapi_log');
- //log connect event
- sapi_log_collection.insert({
- event: 'salesforce_connect',
- oauth: oauth,
- createdDate: new Date(),
- }, function(err, docs) {});
- //streams
- var streams = {};
- //new logic to call cli script
- for(topic in tconfig.pushtopics) {
- //create stream
- streams[topic] = org.stream({
- topic: topic,
- oauth: oauth
- });
- (function(ptopic){
- log(':: Attempting to subscribe: ' + ' :: ' + ptopic + ' :: ');
- streams[ptopic].on('connect', function(){
- log(':: Connected to pushtopic - ' + ptopic +' :: ');
- sapi_log_collection.insert({
- event: 'topic_connect',
- topic: ptopic,
- createdDate: new Date(),
- }, function(err, docs) {});
- });
- streams[ptopic].on('error', function(error){
- log(':: Error received from pushtopic :: ' + ptopic, error);
- sapi_log_collection.insert({
- event: 'topic_error',
- topic: ptopic,
- error: error,
- createdDate: new Date(),
- }, function(err, docs) {});
- });
- streams[ptopic].on('data', function(data){
- log('-===>', ptopic, '<===-');
- //save event details in database
- sapi_log_collection.insert({
- event: 'topic_data',
- topic: ptopic,
- type: data.event.type,
- createdDate: new Date(data.event.createdDate),
- sobject: data.sobject
- }, function(err, docs) {
- var apps = tconfig.pushtopics[ptopic];
- for(var i=0; i<apps.length; i++) {
- (function(app, doc) {
- var url = [
- 'http://',
- tconfig.apps[app].url[process.env.NODE_ENV],
- '/admin/',
- tconfig.apps[app].script, '/',
- doc._id
- ].join('');
- log(app, ':', url);
- var set = {}, key = 'response.' + app;
- set[key] = {
- url: url,
- date: new Date(),
- };
- //send get request
- http.get(url, function(res) {
- log("HTTP_STATUS_CODE: " + res.statusCode);
- set[key].statusCode = res.statusCode;
- var body = '';
- res.on('data', function (chunk) {
- body += chunk;
- });
- //get body
- res.on('end', function (chunk) {
- set[key].body = body;
- sapi_log_collection.update({
- _id: doc._id
- }, {
- $set: set
- }, function(err, result) {
- //error email on non 200 response
- if(res.statusCode != 200) {
- transport.sendMail({
- from: config.email.from,
- to: config.email.to,
- subject: app + ' : ' + process.env.NODE_ENV +' : ' + doc.topic + ' [' + res.statusCode + ']',
- text: url + "n" + body
- }, function(error, responseStatus) {
- if(error) {
- console.log('UNABLE TO SEND ERROR EMAIL.');
- } else {
- console.log('Email responseStatus:', responseStatus);
- }
- });
- }
- //log(app, ': error:', err, 'result:', result);
- });
- });
- }).on('error', function(error) {
- //incase of any error in request
- log("ERROR: " + error.message);
- set[key].error = error;
- sapi_log_collection.update({
- _id: doc._id
- }, {
- $set: set
- }, function(err, result){
- //log(app, ': error:', err, 'result:', result);
- });
- //send errors
- transport.sendMail({
- from: config.email.from,
- to: 'asmatullah@zeptosystems.com',
- subject: app + ' : ' + process.env.NODE_ENV +' : ' + doc.topic,
- text: url + "n" + error.message
- }, function(error, responseStatus) {
- if(error) {
- console.log('UNABLE TO SEND ERROR EMAIL.');
- } else {
- console.log('Email responseStatus:', responseStatus);
- }
- });
- });
- })(apps[i], docs[0]);
- }
- });
- });
- })(topic);
- }
- //old logic
- //TODO: move all the business logic from pushToppicsController to respective project Console modules
- /*for(topic in pushToppicsController.pushtopics) {
- //create stream
- streams[topic] = org.stream({
- topic: topic,
- oauth: oauth
- });
- (function(ptopic){
- streams[ptopic].on('connect', function(){
- log(':: Connected to pushtopic - ' + ptopic +' ::');
- });
- streams[ptopic].on('error', function(error){
- log(':: Error received from pushtopic :: ' + ptopic, error);
- });
- streams[ptopic].on('data', function(data){
- pushToppicsController[pushToppicsController.pushtopics[ptopic]](data);
- });
- })(topic);
- }*/
- });
- });
- //main page
- app.get('/', function(req, res) {
- log(':: HTTP REQUEST ::');
- var out = {
- authenticated: false
- };
- if(org.oauth) {
- out.authenticated = new Date(parseInt(org.oauth.issued_at));
- } else {
- log(':: org.oauth not athenticated ::');
- }
- res.json(out);
- });
- //fire up webserver
- app.listen(config.http.port, config.http.host);
- log('Server running at http://' + config.http.host + ':' + config.http.port + '/');
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement