diff --git a/lib/RemoveOutsideCollaborators.js b/lib/RemoveOutsideCollaborators.js index 4f2e443..1845333 100644 --- a/lib/RemoveOutsideCollaborators.js +++ b/lib/RemoveOutsideCollaborators.js @@ -2,18 +2,19 @@ const yaml = require('js-yaml') const noOrgConfig = false class RemoveOutsideCollaborators { - static analyze (github, repo, payload, logger) { + + static analyze(github, repo, payload, logger) { const defaults = require('./defaults') const orgRepo = (process.env.ORG_WIDE_REPO_NAME) ? process.env.ORG_WIDE_REPO_NAME : defaults.ORG_WIDE_REPO_NAME const filename = (process.env.FILE_NAME) ? process.env.FILE_NAME : defaults.FILE_NAME return github.repos.getContent({ - owner: repo.owner, - repo: orgRepo, - path: filename - }).catch(() => ({ - noOrgConfig - })) + owner: repo.owner, + repo: orgRepo, + path: filename + }).catch(() => ({ + noOrgConfig + })) .then((orgConfig) => { if ('noOrgConfig' in orgConfig) { return new RemoveOutsideCollaborators(github, repo, payload, logger, '').update() @@ -24,7 +25,7 @@ class RemoveOutsideCollaborators { }) } - constructor (github, repo, payload, logger, config) { + constructor(github, repo, payload, logger, config) { this.github = github this.repo = repo this.payload = payload @@ -32,7 +33,13 @@ class RemoveOutsideCollaborators { this.config = yaml.safeLoad(config) } - update () { + update() { + if (this.isRepoAddedByOrgMember(this.payload)) return + + this.executeWorkflow() + } + + executeWorkflow() { var configParams = Object.assign({}, require('./defaults'), this.config || {}) if (this.isRemoveCollaboratorsDisabled(configParams.enableCollaboratorRemoval, configParams.monitorOnly)) return @@ -46,39 +53,56 @@ class RemoveOutsideCollaborators { return this.executeMonitorOnly(configParams) } - isRemoveCollaboratorsDisabled (enableCollaboratorRemoval, monitorOnly) { + async isRepoAddedByOrgMember() { + var isMember = false + const orgParams = { + org: this.payload.organization.login, + username: this.payload.member.login + } + const toOrgParams = Object.assign({}, orgParams || {}) + + this.github.orgs.checkMembership(toOrgParams).then(({ + data + }) => { + return isMember === 'pending' ? false : true + }).catch(() => { + this.executeWorkflow() + }) + } + + isRemoveCollaboratorsDisabled(enableCollaboratorRemoval, monitorOnly) { if (this.payload.action === 'added' && !enableCollaboratorRemoval && !monitorOnly) { return true } return false } - isExcludedCollaborator (excludeCollaborators) { + isExcludedCollaborator(excludeCollaborators) { if (excludeCollaborators.includes(this.payload.member.login)) { return true } return false } - executeRemoval (configParams) { + executeRemoval(configParams) { var issueBody = this.formIssueBody(`
Collaborator added: ${owner}
\n\n---` issueBody += (ccList) ? `\n\n