Skip to content

Instantly share code, notes, and snippets.

@capnslipp
Forked from btipling/unfucktenxer.js
Last active August 29, 2015 14:09
Show Gist options
  • Save capnslipp/1c2d57637be31d101055 to your computer and use it in GitHub Desktop.
Save capnslipp/1c2d57637be31d101055 to your computer and use it in GitHub Desktop.
#!/usr/local/bin/node
var https = require('https');
var token, username;
var tenxer = 'tenxer';
var shitsFucked = 0;
var shitsUnfucked = 0;
var reposCount = 0;
process.argv.forEach(function (arg) {
var args = arg.split('=');
if (args[0] === '--token') {
token = args[1];
}
if (args[0] === '--username') {
username = args[1];
}
});
if (!token || !username) {
console.log("Need --username && --token");
process.exit(1);
}
console.log('Unfucking your shit with token:', token);
//Unfuck user
var user = {login: username};
request('GET', '/users/' + username + '/repos', null,
function (resp) {
unFuckRepo(user, resp);
});
//Get a list of your orgs.
request('GET', '/user/orgs', null, function (resp) {
var orgs = JSON.parse(resp)
orgs.forEach(function (org) {
console.log('Searching through org:', org.login);
//Get a list of each repo for org.
var path = '/orgs/' + org.login + '/repos';
console.log('\n\n\npath', path);
request('GET', path, null,
function (resp) {
unFuckRepo(org, resp);
});
});
});
function unFuckRepo(org, resp) {
if (!resp) {
return;
}
var repos = JSON.parse(resp);
console.log('repos?', repos instanceof Array);
if (!(repos instanceof Array)) {
console.log('return');
return
}
repos.forEach(function (repo) {
//Get a list of hooks for each repo.
console.log(org.login, '/', repo.name, ' count: ', ++reposCount);
request('GET', '/repos/' + org.login + '/' + repo.name + '/hooks',
null, function (hooks) {
JSON.parse(hooks).forEach(function (hook) {
if (hook.config && hook.config.url &&
//Delete that fucker if it's from tenexer.
hook.config.url.indexOf(tenxer) != -1) {
console.log('url', hook.config.url);
console.log('id', hook.id);
console.log('shitsFucked:', ++shitsFucked);
request('DELETE',
['/repos/', org.login, '/', repo.name, '/hooks/',
hook.id].join(''),
'', function (resp) {
console.log('unfuck resp', resp);
console.log('Shit unfucked:', ++shitsUnfucked);
});
}
});
});
});
};
function request(method, path, data, callback) {
var url = 'api.github.com';
var headers = {
'Authorization': 'token ' + token,
'Content-Type': 'application/json',
'User-Agent': 'unfucktenxer',
};
if (data != null) {
headers['Content-Type'] = 'application/json';
headers['Content-Length'] = Buffer.byteLength(data,'utf8');
}
var options = {
host: 'api.github.com',
path: path,
method: method
};
options.headers = headers;
var request = https.request(options, function (res) {
res.setEncoding('utf8');
var chunks = [];
res.on('data', function(chunk) {
chunks.push(chunk);
});
res.on('end', function () {
callback(chunks.join(''));
});
});
request.on('error', function (err) {
console.log('err', err);
});
data ? request.write(data) : request.write('');
request.end();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment