/*
Description I am using OAuth to authenticate with Jira and get/post resources from my node application.
http://localhost:9001/jira is working fine and sending the access token via callback.
But http://localhost:9001/jira/project or http://localhost:9001/jira/user is giving error oauth_problem=token_rejected
*/
/*jshint esversion: 6 */
'use strict';
var express = require('express');
var session = require('express-session');
var OAuth = require('oauth').OAuth;
var fs = require('fs');
var app = express();
app.use(session({
secret: 'red',
saveUninitialized: true,
resave: true
}));
app.get('/', function (req, res) {
res.send("Hello World from Express_Oauth_Jira!");
});
const base_url = 'http://localhost:8080/'; //example https://test.atlassian.net
const callbackUrl = 'http://localhost:9001/jira/callback';
const consumerSecret = fs.readFileSync('jira.pem', 'utf8');
const consumerKey = 'mykey';
//
// Entry route
//
app.get('/jira', function (req, res) {
var oa = new OAuth(base_url + "/plugins/servlet/oauth/request-token", //request token
base_url + "/plugins/servlet/oauth/access-token", //access token
consumerKey, //consumer key
consumerSecret, //"YOUR_PEM_FILE_CONTENT", //consumer secret, eg. fs.readFileSync('jira.pem', 'utf8')
'1.0', //OAuth version
callbackUrl, //callback url
"RSA-SHA1");
oa.getOAuthRequestToken(function (error, oauthToken, oauthTokenSecret) {
if (error) {
console.log('Error:', error);
res.send('Error getting OAuth access token');
} else {
req.session.oa = oa;
req.session.oauth_token = oauthToken;
req.session.oauth_token_secret = oauthTokenSecret;
return res.redirect(base_url + "/plugins/servlet/oauth/authorize?oauth_token=" + oauthToken);
}
});
});
//
// Callback route
//
app.get('/jira/callback', function (req, res) {
console.log('/jira/callback : req.query', req.query);
var oa = new OAuth(req.session.oa._requestUrl,
req.session.oa._accessUrl,
req.session.oa._consumerKey,
consumerSecret, //"YOUR_PEM_FILE_CONTENT", //consumer secret, eg. fs.readFileSync('jira.pem', 'utf8')
req.session.oa._version,
req.session.oa._authorize_callback,
req.session.oa._signatureMethod);
// console.log(oa);
oa.getOAuthAccessToken(
req.session.oauth_token,
req.session.oauth_token_secret,
req.query.oauth_verifier,
function (error, oauth_access_token, oauth_access_token_secret, results2) {
if (error) {
console.log('Error:', error);
res.send('Error verifying OAuth access token');
} else {
// store the access token in the session
req.session.oauth_access_token = oauth_access_token;
req.session.oauth_access_token_secret = oauth_access_token_secret;
res.send({
message: "successfully authenticated.",
access_token: oauth_access_token,
secret: oauth_access_token_secret
});
}
});
});
//
//
//
app.get('/jira/project', function (req, res) {
console.log('/jira/project');
var consumer = new OAuth(
base_url + "/plugins/servlet/oauth/request-token",
base_url + "/plugins/servlet/oauth/access-token",
consumerKey,
consumerSecret, //"YOUR_PEM_FILE_CONTENT", //consumer secret, eg. fs.readFileSync('jira.pem', 'utf8')
'1.0',
callbackUrl,
"RSA-SHA1"
);
console.log(req.session.oauth_token, ', ', req.session.oauth_token_secret);
function callback(error, data, resp) {
//console.log(data);
//data = JSON.parse(data);
console.log("data= ", data, "\nerror= ", error);
return res.send(data);
}
consumer.get(base_url + "/rest/api/2/project",
req.session.oauth_token, //authtoken
req.session.oauth_token_secret, //oauth secret
callback);
});
//
//
//
app.get('/jira/user', function (req, res) {
console.log('/jira/user');
var consumer = new OAuth(
base_url + "/plugins/servlet/oauth/request-token",
base_url + "/plugins/servlet/oauth/access-token",
consumerKey,
consumerSecret, //"YOUR_PEM_FILE_CONTENT", //consumer secret, eg. fs.readFileSync('jira.pem', 'utf8')
'1.0',
callbackUrl,
"RSA-SHA1"
);
function callback(error, data, resp) {
//console.log(data);
//data = JSON.parse(data);
console.log("data,", data, "error,", error);
return res.send(data);
}
consumer.get(base_url + "/rest/api/2/user",
req.session.oauth_token, //authtoken
req.session.oauth_token_secret, //oauth secret
callback);
});
app.listen(9001, function () {
console.log('Example app listening on port 9001!');
});