Created
July 15, 2017 08:19
-
-
Save deanohyeah/f3827bd68e9beee49cc248c3a7538b08 to your computer and use it in GitHub Desktop.
A js executable script to close all crucible reviews for user.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env node | |
/* eslint-disable import/no-commonjs */ | |
const request = require('request') | |
const Promise = require('bluebird') | |
const FISHEYE_BASE_URL = 'FILL_IN_URL' | |
const userName = (process.argv[2]).toString() | |
const password = (process.argv[3]).toString() | |
let token | |
function checkArguments() { | |
return Promise.try(() => { | |
if (process.argv.length < 3) { | |
process.stdout.write(`Usage: ${process.argv[1]}: user_name password \n`) | |
process.exit() | |
} | |
}) | |
} | |
function getToken() { | |
const options = { | |
url: `${FISHEYE_BASE_URL}/rest-service-fecru/auth/login`, | |
method: 'POST', | |
form: { | |
userName, | |
password, | |
}, | |
} | |
return makeRequest(options).then(response => { | |
token = response.token | |
}) | |
} | |
function getOpenReviews() { | |
const options = { | |
url: `${FISHEYE_BASE_URL}/rest-service/reviews-v1/filter`, | |
qs: { | |
author: userName, | |
states: 'Review', | |
FEAUTH: token, | |
}, | |
method: 'GET', | |
headers: { | |
'Content-Type': 'application/json', | |
'Accept': 'application/json', | |
}, | |
} | |
return makeRequest(options).then(response => { | |
return response.reviewData.map(review => review.permaId.id) | |
}) | |
} | |
function closeAllReviews(reviewIds) { | |
const getOptions = function getOptions(id) { | |
return { | |
url: `${FISHEYE_BASE_URL}/rest-service/reviews-v1/${id}/transition`, | |
qs: { | |
action: 'action:closeReview', | |
FEAUTH: token, | |
}, | |
method: 'POST', | |
headers: { | |
'Content-Type': 'application/json', | |
'Accept': 'application/json', | |
}, | |
} | |
} | |
const promises = reviewIds.map((id, i) => { | |
return makeRequest(getOptions(id)) | |
}) | |
return Promise.all(promises) | |
.then(promises => console.log(`Successfully closed ${promises.length} reviews`)) | |
.catch(e => console.log(e)) | |
} | |
// wrap request in promise | |
function makeRequest(options) { | |
return new Promise((resolve, reject) => { | |
request(options, (err, response) => { | |
if (err) { | |
reject(err) | |
} else if (response.statusCode > 400) { | |
reject(new Error(`Received status ${response.statusMessage} (${response.statusCode})\n\n${response.body}`)) | |
} else { | |
try { | |
resolve(JSON.parse(response.body)) | |
} catch (e) { | |
resolve() | |
} | |
} | |
}) | |
}) | |
} | |
checkArguments() | |
.then(getToken) | |
.then(getOpenReviews) | |
.then(closeAllReviews) | |
.catch((error) => { | |
process.stdout.write(error.stack) | |
process.exit() | |
}) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment