2024-08-28 20:04:59 +00:00
|
|
|
name: Automatically Moderate Github Comments
|
|
|
|
|
|
|
|
on:
|
|
|
|
issue_comment:
|
|
|
|
types: [created, edited]
|
|
|
|
|
|
|
|
permissions:
|
|
|
|
issues: write
|
|
|
|
|
|
|
|
jobs:
|
|
|
|
automoderator:
|
|
|
|
runs-on: ["ubuntu-latest"]
|
|
|
|
steps:
|
|
|
|
- name: Redact Suspicious Links
|
|
|
|
# This step contains code from "Comment-Filter", licensed under MIT by Martin Leduc
|
|
|
|
# Source: https://github.com/DecimalTurn/Comment-Filter/blob/v0.1.0/LICENSE
|
|
|
|
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
|
|
|
|
with:
|
|
|
|
script: |
|
|
|
|
const comment = context.payload.comment
|
|
|
|
const { owner, repo } = context.repo
|
|
|
|
|
|
|
|
console.log('Repository owner:', owner)
|
|
|
|
console.log('Repository name:', repo)
|
|
|
|
console.log('Comment body:', comment.body)
|
|
|
|
|
|
|
|
// Array of regex patterns and their replacements
|
|
|
|
const regexReplacements = [
|
|
|
|
// File Sharing
|
|
|
|
{
|
2024-09-19 10:06:18 +00:00
|
|
|
pattern: /(www\.)?(box|dropbox|mediafire|sugarsync|tresorit|hightail|opentext|sharefile|citrixsharefile|icloud|onedrive|1drv|mega)(\.com|\.co\.nz)\/[^\s\)]+/g,
|
2024-08-28 20:04:59 +00:00
|
|
|
replacement: '[REDACTED]'
|
|
|
|
},
|
|
|
|
// Google Drive
|
|
|
|
{
|
|
|
|
pattern: /drive\.google\.com\/[^\s\)]+/g,
|
|
|
|
replacement: '[REDACTED]'
|
|
|
|
},
|
|
|
|
// Link Shorteners
|
|
|
|
{
|
|
|
|
pattern: /(www\.)?(bit\.ly|t\.co|tinyurl\.com|goo\.gl|ow\.ly|buff\.ly|is\.gd|soo\.gd|t2mio|bl\.ink|clck\.ru|shorte\.st|cutt\.ly|v\.gd|qr\.ae|rb\.gy|rebrand\.ly|tr\.im|shorturl\.at|lnkd\.in)\/[^\s\)]+/g,
|
|
|
|
replacement: '[REDACTED]'
|
|
|
|
},
|
|
|
|
];
|
|
|
|
|
|
|
|
// Iterate through each regex and replace matches in the comment body
|
|
|
|
let updatedBody = comment.body;
|
|
|
|
regexReplacements.forEach(({ pattern, replacement }) => {
|
|
|
|
if (pattern.test(updatedBody)) {
|
|
|
|
console.log(`Pattern found: ${pattern}`);
|
|
|
|
updatedBody = updatedBody.replace(pattern, replacement);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
// If the comment body was updated, edit the comment
|
|
|
|
if (updatedBody !== comment.body) {
|
|
|
|
console.log('Updated comment body:', updatedBody);
|
|
|
|
|
|
|
|
// Append edition notice to the body
|
|
|
|
updatedBody = updatedBody + '\n\n' +
|
|
|
|
'**NOTICE**: This comment has been automatically edited by a bot ' +
|
|
|
|
'to redact some links in order to protect users from potentially malicious content. ' +
|
|
|
|
'Please, let us know if you believe this action may have been a mistake.'
|
|
|
|
|
|
|
|
// Edit the comment with the updated body
|
|
|
|
await github.rest.issues.updateComment({
|
|
|
|
owner: owner,
|
|
|
|
repo: repo,
|
|
|
|
comment_id: comment.id,
|
|
|
|
body: updatedBody
|
|
|
|
});
|
|
|
|
} else {
|
|
|
|
console.log('No suspicious links found.')
|
|
|
|
}
|