Passed
Push — master ( c447f9...b27637 )
by Anil Kumar
52s
created

app.js (4 issues)

1
require('dotenv').config();
2
var https = require('https');
3
var express = require('express');
4
var session = require('express-session');
5
var request = require('request');
6
var app = express();
7
var config = require('./config.json');
8
var path = require('path');
9
var crypto = require('crypto');
10
var QuickBooks = require('node-quickbooks');
11
var queryString = require('query-string');
12
var fs = require('fs');
13
var json2csv = require('json2csv');
14
var Tokens = require('csrf');
15
var csrf = new Tokens();
16
var atob = require('atob');
17
18
// Configure View and Handlebars
19
app.use(express.static(path.join(__dirname, '')))
20
app.set('views', path.join(__dirname, 'views'))
21
var exphbs = require('express-handlebars');
22
var hbs = exphbs.create({});
23
app.engine('handlebars', hbs.engine);
24
app.set('view engine', 'handlebars');
25
app.use(session({secret: 'secret', resave: 'false', saveUninitialized: 'false'}))
26
27
/*
28
Create body parsers for application/json and application/x-www-form-urlencoded
29
 */
30
var bodyParser = require('body-parser')
31
app.use(bodyParser.json())
32
var urlencodedParser = bodyParser.urlencoded({ extended: false })
33
34
/*
35
App Variables
36
 */
37
var oauth2_token_json=null,
38
    openIDConnect_token_json=null,
39
    realmId = '',
40
    accessToken = '',
41
    payload = '';
42
var fields = ['realmId', 'name', 'id', 'operation', 'lastUpdated'];
43
var newLine= "\r\n";
44
45
46
app.use(express.static('views'));
47
48
app.get('/', function(req, res) {
49
50
    // Render home page with params
51
    res.render('index', {
52
        redirect_uri: config.redirectUri,
53
        oauth2_token_json: oauth2_token_json,
54
        webhook_uri: config.webhookUri,
55
        webhook_payload: payload,
56
        openIDConnect_token_json: openIDConnect_token_json
57
    });
58
});
59
60
app.get('/authUri', function(req,res) {
61
62
    console.log("The passed config object is :"+ (req.query.openIDConnect));
0 ignored issues
show
console.log looks like debug code. Are you sure you do not want to remove it?
Loading history...
63
64
65
    /*
66
    Generate csrf Anti Forgery
67
     */
68
    req.session.secret = csrf.secretSync();
69
    var state = csrf.create(req.session.secret);
70
71
    /*
72
    Generate the AuthUrl
73
     */
74
    var scope;
75
    if(req.query.openIDConnect === 'true') {
76
        console.log(true);
77
        scope = config.scopes.sign_in_with_intuit[0]+' '+config.scopes.sign_in_with_intuit[1]+' '+config.scopes.sign_in_with_intuit[2]+' '+config.scopes.sign_in_with_intuit[3]+' '+config.scopes.sign_in_with_intuit[4];
78
    }
79
    else {
80
        console.log(false);
81
        scope = config.scopes.connect_to_quickbooks[0]+' '+config.scopes.connect_to_quickbooks[1];
82
    }
83
84
    var redirecturl = config.authorization_endpoint + '?' + queryString.stringify({
85
86
        'client_id': config.clientId,
87
        'redirect_uri': config.redirectUri,  //Make sure this path matches entry in application dashboard
88
        'scope': scope,
89
        'response_type': 'code',
90
        'state': state
91
92
    });
93
94
    console.log("The redirectURI is :"+redirecturl);
95
    res.send(redirecturl);
96
97
});
98
99
app.get('/callback', function(req, res) {
100
101
    var parsedUri = queryString.parse(req.originalUrl);
102
103
    console.log("The parsedURI is :"+ JSON.stringify(parsedUri));
0 ignored issues
show
console.log looks like debug code. Are you sure you do not want to remove it?
Loading history...
104
    realmId = parsedUri.realmId;
105
106
    var auth = (new Buffer(config.clientId + ':' + config.clientSecret).toString('base64'));
107
    var postBody = {
108
        url: config.token_endpoint,
109
        headers: {
110
            Accept: 'application/json',
111
            'Content-Type': 'application/x-www-form-urlencoded',
112
            Authorization: 'Basic ' + auth,
113
        },
114
        form: {
115
            grant_type: 'authorization_code',
116
            code: req.query.code,
117
            redirect_uri: config.redirectUri
118
        }
119
    };
120
121
    request.post(postBody, function (err, res, data) {
122
        accessToken = JSON.parse(res.body);
123
        if(realmId) {
124
            oauth2_token_json = JSON.stringify(accessToken, null,2);
125
            openIDConnect_token_json = null;
126
        }
127
        else {
128
            openIDConnect_token_json = JSON.stringify(accessToken, null,2);
129
            oauth2_token_json = null;
130
131
            // Decode ID Token
132
            var token_parts = accessToken.id_token.split('.')
133
            var idTokenHeader = JSON.parse(atob(token_parts[0]));
0 ignored issues
show
The variable idTokenHeader seems to be never used. Consider removing it.
Loading history...
134
            var idTokenPayload = JSON.parse(atob(token_parts[1]));
135
136
            console.log("The realmID is :"+ JSON.stringify(idTokenPayload, 2, null));
0 ignored issues
show
console.log looks like debug code. Are you sure you do not want to remove it?
Loading history...
137
138
            // realmId = idTokenPayload.realmid;
139
        }
140
    });
141
    res.send('');
142
143
});
144
145
app.get('/getCompanyInfo', function(req,res){
146
147
    // var token = JSON.parse(token_json);
148
149
    // save the access token somewhere on behalf of the logged in user
150
    var qbo = new QuickBooks(config.clientId,
151
        config.clientSecret,
152
        accessToken.access_token, /* oAuth access token */
153
        false, /* no token secret for oAuth 2.0 */
154
        realmId,
155
        true, /* use a sandbox account */
156
        true, /* turn debugging on */
157
        4, /* minor version */
158
        '2.0', /* oauth version */
159
        accessToken.refresh_token /* refresh token */);
160
161
    qbo.getCompanyInfo(realmId, function(err, companyInfo) {
162
        if (err) {
163
            console.log(err);
164
            res.send(err);
165
        }
166
        else {
167
            console.log("The response is :" + JSON.stringify(companyInfo,null,2));
168
            res.send(companyInfo);
169
        }
170
171
    });
172
});
173
174
175
// Start server on HTTP (will use ngrok for HTTPS forwarding)
176
app.listen(3000, function () {
177
    console.log('Example app listening on port 3000!')
178
})
179