Querying the JIRA api with Meteor
For anyone trying to figure out how to connect to the JIRA api with Meteor JS: I was using the POST call with my JIRA credentials (as the POST data) and url=https://company.atlassian.net/rest/auth/latest/session to get the session cookie that I could use for authentication in the later API calls.
The login call above returns an array cookies (with session name and values, atlassian.xsrf.token, studio.crowd.tokenkey):
It turns out that the cookie #3 is the one causing the problem. To get the API calls working I parse through the returned cookie array and delete the one with expiration date in it and then I pass the entire array of cookies.
Example code:
Note: Thanks to Dan Dascalescu from The Quantified Self Forum for catching an input filter issue resulting in a javascript error in the code above!
The login call above returns an array cookies (with session name and values, atlassian.xsrf.token, studio.crowd.tokenkey):
- "atlassian.xsrf.token=BZD0-ZZ0R-LNEL-XXXX|fb1e90160161c98de5d2b5086xxxxxxxxxxxxxxxx|lout; Path=/"
- "JSESSIONID=0BB474286C3F6356013XXXXXXXXX; Path=/; HttpOnly"
- "studio.crowd.tokenkey=""; Domain=.company.atlassian.net; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly"
- "studio.crowd.tokenkey=jJv5rU3Fs60A8VaIgXXXXXX; Domain=.projectricochet.atlassian.net; Path=/; HttpOnly"
It turns out that the cookie #3 is the one causing the problem. To get the API calls working I parse through the returned cookie array and delete the one with expiration date in it and then I pass the entire array of cookies.
Example code:
var auth_url="https://company.atlassian.net/rest/auth/latest/session";
var result = Meteor.http.call("POST", auth_url, {
data: {
'username': ‘admin’,
'password': ‘admin’,
},
headers: {
"content-type": "application/json",
"Accept": "application/json"
},
});
var cookie_value = result['headers']['set-cookie'];
for(var c in cookie_value) {
if(cookie_value[c].indexOf("Expires") !== -1) {
cookie_value[c] = "";
}
}
if (result.statusCode == 200) {
var auth_url="https://company.atlassian.net/rest/api/latest/issue/ISSUE#";
result = Meteor.http.call("GET", auth_url, {
params: {
timeout: 30000
},
headers: {
"cookie": cookie_value,
"content-type": "application/json",
"Accept": "application/json"
},
});
var issue = JSON.parse(result.content);
console.log(issue);
}
Note: Thanks to Dan Dascalescu from The Quantified Self Forum for catching an input filter issue resulting in a javascript error in the code above!











