From 8f07b2952d5239150fa99c6d50c4feca4fbb6b38 Mon Sep 17 00:00:00 2001 From: kaxada Date: Wed, 5 Jul 2023 16:50:03 +0300 Subject: [PATCH] first version of bronze badging --- .github/workflows/deploy.yml | 4 ++ .husky/pre-commit | 2 +- index.js | 77 +++++++++++------------------------- src/badges/badges.js | 2 - src/badges/bronzeBadge.js | 16 +++++--- src/helpers/augurAPI.js | 6 +-- src/helpers/awardBadge.js | 8 ++-- src/helpers/mailer.js | 21 +++++----- src/scanner.js | 26 ++++++------ 9 files changed, 70 insertions(+), 92 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 2c8a413..2b8bf7c 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -60,6 +60,10 @@ jobs: docker stop $(echo $IMAGE_NAME) docker rm $(echo $IMAGE_NAME) docker run -d \ + -e CLIENT_ID=${{secrets.CLIENT_ID}} \ + -e CLIENT_SECRET=${{ secrets.CLIENT_SECRET }} \ + -e MAIL_PASSWORD=${{ secrets.MAIL_PASSWORD }} \ + -e AUGUR_API_KEY=${{ secrets.AUGUR_API_KEY }} \ -p ${{secrets.PORT}}:${{secrets.PORT}} \ --restart always \ --name $(echo $IMAGE_NAME) \ diff --git a/.husky/pre-commit b/.husky/pre-commit index 2a017d5..1bda9c1 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,4 +1,4 @@ #!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh" -# npm run format +npm run format diff --git a/index.js b/index.js index 100cd28..3f1aeab 100644 --- a/index.js +++ b/index.js @@ -2,16 +2,15 @@ const express = require("express"); const { Octokit } = require("@octokit/rest"); const axios = require("axios"); require("dotenv").config(); -const bodyParser = require('body-parser'); -const scanner = require('./src/scanner.js') +const bodyParser = require("body-parser"); +const scanner = require("./src/scanner.js"); const app = express(); -app.use(express.static('public')); +app.use(express.static("public")); app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.json()); - -app.get("/login", (req, res) => { +app.get("/api/login", (req, res) => { const scopes = ["user", "repo"]; const url = `https://github.com/login/oauth/authorize?client_id=${ process.env.CLIENT_ID @@ -20,10 +19,12 @@ app.get("/login", (req, res) => { res.redirect(url); }); -app.get("/callback", async (req, res) => { +app.get("/api/callback", async (req, res) => { try { const { code } = req.query; - const {data:{access_token}} = await axios.post( + const { + data: { access_token }, + } = await axios.post( "https://github.com/login/oauth/access_token", { client_id: process.env.CLIENT_ID, @@ -40,15 +41,15 @@ app.get("/callback", async (req, res) => { const octokit = new Octokit({ auth: `${access_token}` }); // authenticated user details - ({ + const { data: { login, name, email }, - } = await octokit.users.getAuthenticated()); + } = await octokit.users.getAuthenticated(); // Public repos they maintain, administer or own let repos = []; let page = 1; let response = await octokit.repos.listForAuthenticatedUser({ - visibility: 'public', + visibility: "public", per_page: 100, page, }); @@ -64,57 +65,27 @@ app.get("/callback", async (req, res) => { } // let repoList = repos.filter(repo=>repo.permissions.admin === true) - const repoList = repos.map(repo=>repo.full_name) - - // res.status(200).json({ - // name:name, - // username: login, - // email: email, - // repos: repoList - // }) + const repoList = repos.map((repo) => repo.full_name); - res.status(200).send(` - - - Repo List - - -

Welcome ${name}

-

Username: ${login}

-

Email: ${email}

-
- - -

Select Repositories:

- ${repoList - .map( - (repo) => ` -
- - -
- ` - ) - .join('')} -
- -
- - - `); + res.status(200).json({ + name, + username: login, + email, + repos: repoList, + }); } catch (error) { console.error("Error:", error.message); res.status(500).send("Internal Server Error"); } }); -app.post('/repos-to-badge', async (req, res) => { - const selectedRepos = await req.body.repos || []; - const name = req.body.name || ''; - const email = req.body.email || ''; +app.post("/api/repos-to-badge", async (req, res) => { + const selectedRepos = (await req.body.repos) || []; + const name = req.body.name || ""; + const email = req.body.email || ""; // Process the selected repos as needed - const results = await scanner(name, email, selectedRepos) - res.status(200).json({results}); + const results = await scanner(name, email, selectedRepos); + res.status(200).json({ results }); }); app.listen(4040, () => { diff --git a/src/badges/badges.js b/src/badges/badges.js index 14b1804..66ba889 100644 --- a/src/badges/badges.js +++ b/src/badges/badges.js @@ -1,5 +1,3 @@ -const { Octokit } = require("@octokit/rest"); -const { scanne, awardBadge } = require("../helpers"); const bronzeBadge = require("./bronzeBadge"); const badges = async (req, res, login, name, email, octokit) => { diff --git a/src/badges/bronzeBadge.js b/src/badges/bronzeBadge.js index b358c22..e0da88c 100644 --- a/src/badges/bronzeBadge.js +++ b/src/badges/bronzeBadge.js @@ -1,6 +1,6 @@ -const augurAPI = require('../helpers/augurAPI') +// const augurAPI = require("../helpers/augurAPI"); -const bronzeBadge = async (id,url,content) => { +const bronzeBadge = async (id, url, content) => { const results = []; // Check for specific titles const titlesToCheck = [ @@ -22,15 +22,19 @@ const bronzeBadge = async (id,url,content) => { } if (hasAllTitles) { - const augur=augurAPI(id,{level:"bronze"},url) + /** + * augur configs here + */ + + // const augur=augurAPI(id,{level:"bronze"},url) + // console.log(augur) // return results - console.log(augur) - return(results) + return results; } else { results.push( "some fields are missing. Please refer to this link for more information" ); - return results + return results; } }; diff --git a/src/helpers/augurAPI.js b/src/helpers/augurAPI.js index 74bf28b..72697b6 100644 --- a/src/helpers/augurAPI.js +++ b/src/helpers/augurAPI.js @@ -1,10 +1,10 @@ -const axios = require('axios'); +const axios = require("axios"); require("dotenv").config(); const augurAPI = async (id, level, url) => { try { const response = await axios.post( - 'https://projectbadge.chaoss.io/api/unstable/dei/repo', + "https://projectbadge.chaoss.io/api/unstable/dei/repo", { id, level, url }, { headers: { @@ -15,7 +15,7 @@ const augurAPI = async (id, level, url) => { return response; } catch (error) { - console.error('Error:', error.message); + console.error("Error:", error.message); throw error; } }; diff --git a/src/helpers/awardBadge.js b/src/helpers/awardBadge.js index cf7c8e7..c27ee54 100644 --- a/src/helpers/awardBadge.js +++ b/src/helpers/awardBadge.js @@ -1,13 +1,13 @@ -const fs = require("fs"); -const path = require("path"); -const badgePath = path.join(__dirname, "../../assets/badge.svg"); +// const fs = require("fs"); +// const path = require("path"); +// const badgePath = path.join(__dirname, "../../assets/badge.svg"); const badgeLink = "https://raw.githubusercontent.com/AllInOpenSource/ProjectBadging/main/src/assets/images/badges/badge.svg"; const awardBadge = async (octokit, owner, repoName) => { try { // Read the SVG file content - const svgContent = fs.readFileSync(badgePath, "utf8"); + // const svgContent = fs.readFileSync(badgePath, "utf8"); // Read the existing README file content const { data: existingFile } = await octokit.rest.repos.getContent({ diff --git a/src/helpers/mailer.js b/src/helpers/mailer.js index dbb8183..fc6e292 100644 --- a/src/helpers/mailer.js +++ b/src/helpers/mailer.js @@ -1,22 +1,21 @@ const nodemailer = require("nodemailer"); require("dotenv").config(); -const mailer = (email, results)=>{ - -// Create a transporter using your email service provider's SMTP settings -const transporter = nodemailer.createTransport({ - service: "Gmail", - auth: { - user: "ekaxada@gmail.com", - pass: process.env.MAIL_PASSWORD, - }, -}); +const mailer = (email, results) => { + // Create a transporter using your email service provider's SMTP settings + const transporter = nodemailer.createTransport({ + service: "Gmail", + auth: { + user: "ekaxada@gmail.com", + pass: process.env.MAIL_PASSWORD, + }, + }); // Define the email options const mailOptions = { from: "ekaxada@gmail.com", to: email, - subject: "DEI report", + subject: "DEI Badging report", text: results.join("\n"), }; diff --git a/src/scanner.js b/src/scanner.js index 2b3d651..367d13b 100644 --- a/src/scanner.js +++ b/src/scanner.js @@ -1,6 +1,6 @@ const { Octokit } = require("@octokit/rest"); -const mailer = require('./helpers/mailer.js') -const bronzeBadge = require('./badges/bronzeBadge.js') +const mailer = require("./helpers/mailer.js"); +const bronzeBadge = require("./badges/bronzeBadge.js"); const scanner = async (name, email, selectedRepos) => { const octokit = new Octokit(); @@ -13,27 +13,29 @@ const scanner = async (name, email, selectedRepos) => { repo: repo.split("/")[1], }); - const id = repoResponse.data.id - const url = repoResponse.data.html_url + const id = repoResponse.data.id; + const url = repoResponse.data.html_url; const contentResponse = await octokit.repos.getContent({ owner: repo.split("/")[0], repo: repo.split("/")[1], path: "DEI.md", }); - const content = Buffer.from(contentResponse.data.content, 'base64').toString(); - const bronzeResults = await bronzeBadge(id,url,content) - results.push("✅", repo, bronzeResults) + const content = Buffer.from( + contentResponse.data.content, + "base64" + ).toString(); + const bronzeResults = await bronzeBadge(id, url, content); + results.push("✅", repo, bronzeResults); } catch (error) { - console.error(error) + console.error(error); // results.push("❌", repo, "does not have DEI.md file"); } } } catch (error) { - console.error('Error:', error.message); + console.error("Error:", error.message); } - mailer(email, results) + mailer(email, results); return results; -} +}; module.exports = scanner; -