mirror of
https://github.com/super-linter/super-linter.git
synced 2024-11-29 17:41:00 -05:00
215 lines
5 KiB
JavaScript
215 lines
5 KiB
JavaScript
var http = require('http')
|
|
var createHandler = require('github-webhook-handler')
|
|
var handler = createHandler({ path: '/webhook', secret: (process.env.SECRET) })
|
|
|
|
var userArray = ['user1']
|
|
|
|
var teamDescription = 'Team of Robots'
|
|
var teamPrivacy = 'closed' // closed (visible) / secret (hidden) are options here
|
|
|
|
var teamName = process.env.GHES_TEAM_NAME
|
|
var teamAccess = 'pull' // pull,push,admin options here
|
|
var teamId = ''
|
|
|
|
var orgRepos = []
|
|
|
|
// var creator = ""
|
|
|
|
http.createServer(function (req, res) {
|
|
handler(req, res, function (err) {
|
|
console.log(err)
|
|
res.statusCode = 404
|
|
res.end('no such location')
|
|
})
|
|
}).listen(3000)
|
|
|
|
handler.on('error', function (err) {
|
|
console.error('Error:', err.message)
|
|
})
|
|
|
|
handler.on('repository', function (event) {
|
|
if (event.payload.action === 'created') {
|
|
const repo = event.payload.repository.full_name
|
|
console.log(repo)
|
|
const org = event.payload.repository.owner.login
|
|
getTeamID(org)
|
|
setTimeout(checkTeamIDVariable, 1000)
|
|
}
|
|
})
|
|
|
|
handler.on('team', function (event) {
|
|
// TODO user events such as being removed from team or org
|
|
if (event.payload.action === 'deleted') {
|
|
// const name = event.payload.team.name
|
|
const org = event.payload.organization.login
|
|
getRepositories(org)
|
|
setTimeout(checkReposVariable, 5000)
|
|
} else if (event.payload.action === 'removed_from_repository') {
|
|
const org = event.payload.organization.login
|
|
getTeamID(org)
|
|
// const repo = event.payload.repository.full_name
|
|
setTimeout(checkTeamIDVariable, 1000)
|
|
}
|
|
})
|
|
|
|
function getTeamID (org) {
|
|
const https = require('https')
|
|
|
|
const options = {
|
|
hostname: (process.env.GHE_HOST),
|
|
port: 443,
|
|
path: '/api/v3/orgs/' + org + '/teams',
|
|
method: 'GET',
|
|
headers: {
|
|
Authorization: 'token ' + (process.env.GHE_TOKEN),
|
|
'Content-Type': 'application/json'
|
|
}
|
|
}
|
|
let body = []
|
|
const req = https.request(options, (res) => {
|
|
res.on('data', (chunk) => {
|
|
body.push(chunk)
|
|
}).on('end', () => {
|
|
body = JSON.parse(Buffer.concat(body))
|
|
body.forEach(item => {
|
|
if (item.name === teamName) {
|
|
teamId = item.id
|
|
}
|
|
})
|
|
})
|
|
})
|
|
|
|
req.on('error', (error) => {
|
|
console.error(error)
|
|
})
|
|
|
|
req.end()
|
|
}
|
|
|
|
function checkTeamIDVariable (repo) {
|
|
if (typeof teamId !== 'undefined') {
|
|
addTeamToRepo(repo, teamId)
|
|
}
|
|
}
|
|
|
|
function checkReposVariable (org) {
|
|
if (typeof orgRepos !== 'undefined') {
|
|
// for(var repo of orgRepos) {
|
|
// addTeamToRepo(repo, teamId)
|
|
// }
|
|
reCreateTeam(org)
|
|
}
|
|
}
|
|
|
|
function addTeamToRepo (repo, teamId) {
|
|
const https = require('https')
|
|
const data = JSON.stringify({
|
|
permission: teamAccess
|
|
})
|
|
|
|
const options = {
|
|
hostname: (process.env.GHE_HOST),
|
|
port: 443,
|
|
path: '/api/v3/teams/' + teamId + '/repos/' + repo,
|
|
method: 'PUT',
|
|
headers: {
|
|
Authorization: 'token ' + (process.env.GHE_TOKEN),
|
|
'Content-Type': 'application/json',
|
|
'Content-Length': data.length
|
|
}
|
|
}
|
|
let body = []
|
|
const req = https.request(options, (res) => {
|
|
res.on('data', (chunk) => {
|
|
body.push(chunk)
|
|
}).on('end', () => {
|
|
body = Buffer.concat(body).toString()
|
|
console.log(res.statusCode)
|
|
console.log('added team to ' + repo)
|
|
})
|
|
})
|
|
|
|
req.on('error', (error) => {
|
|
console.error(error)
|
|
})
|
|
|
|
req.write(data)
|
|
req.end()
|
|
}
|
|
|
|
function reCreateTeam (org) {
|
|
const https = require('https')
|
|
const data = JSON.stringify({
|
|
name: teamName,
|
|
description: teamDescription,
|
|
privacy: teamPrivacy,
|
|
maintainers: userArray,
|
|
repo_names: orgRepos
|
|
})
|
|
|
|
const options = {
|
|
hostname: (process.env.GHE_HOST),
|
|
port: 443,
|
|
path: '/api/v3/orgs/' + org + '/teams',
|
|
method: 'POST',
|
|
headers: {
|
|
Authorization: 'token ' + (process.env.GHE_TOKEN),
|
|
'Content-Type': 'application/json',
|
|
'Content-Length': data.length
|
|
}
|
|
}
|
|
// const body = []
|
|
const req = https.request(options, (res) => {
|
|
if (res.statusCode !== 201) {
|
|
console.log('Status code: ' + res.statusCode)
|
|
console.log('Added ' + teamName + ' to ' + org + ' Failed')
|
|
res.on('data', function (chunk) {
|
|
console.log('BODY: ' + chunk)
|
|
})
|
|
} else {
|
|
console.log('Added ' + teamName + ' to ' + org)
|
|
}
|
|
})
|
|
|
|
req.on('error', (error) => {
|
|
console.error(error)
|
|
})
|
|
|
|
req.write(data)
|
|
req.end()
|
|
}
|
|
|
|
function getRepositories (org) {
|
|
orgRepos = []
|
|
|
|
const https = require('https')
|
|
|
|
const options = {
|
|
hostname: (process.env.GHE_HOST),
|
|
port: 443,
|
|
path: '/api/v3/orgs/' + org + '/repos',
|
|
method: 'GET',
|
|
headers: {
|
|
Authorization: 'token ' + (process.env.GHE_TOKEN),
|
|
'Content-Type': 'application/json'
|
|
}
|
|
}
|
|
let body = []
|
|
const req = https.request(options, (res) => {
|
|
res.on('data', (chunk) => {
|
|
body.push(chunk)
|
|
}).on('end', () => {
|
|
body = JSON.parse(Buffer.concat(body))
|
|
body.forEach(item => {
|
|
orgRepos.push(item.full_name)
|
|
console.log(item.full_name)
|
|
})
|
|
})
|
|
})
|
|
|
|
req.on('error', (error) => {
|
|
console.error(error)
|
|
})
|
|
|
|
req.end()
|
|
}
|