diff --git a/package.json b/package.json index 49d7262..820bf84 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "author": "Oscar Barajas ", "license": "MIT", "dependencies": { + "dotenv": "^8.2.0", "node-fetch": "^2.6.0", "prompt": "^1.0.0", "puppeteer": "^2.1.1" diff --git a/src/index.js b/src/index.js index b27566a..882cd09 100644 --- a/src/index.js +++ b/src/index.js @@ -1,17 +1,29 @@ -const prompt = require('prompt') +const prompt = require('prompt'); -const count = 1 +const getGitHubData = require('./utils/getDataFromGithub'); -const prompt_attributes = [{ - name: 'githubUser', -}] +const count = 1; -prompt.get(prompt_attributes, (err, result) => { +const promptAttributes = [{ + properties: { + name: { + description: 'Type your GitHub username', + message: 'Username must not be empty', + required: true, + }, + }, +}]; + +prompt.get(promptAttributes, (err, result) => { if (err) { - console.log(err); - return 1; + // console.log(err); + return count; } - console.log('Command-line received data:'); -}) + // console.log('Command-line received data:', result); + + const user = result.name; + // console.log('User:', user); + getGitHubData.getDataFromGithub(user); +}); -prompt.start() +prompt.start(); diff --git a/src/utils/getDataFromGithub.js b/src/utils/getDataFromGithub.js index 6333182..3105f3c 100644 --- a/src/utils/getDataFromGithub.js +++ b/src/utils/getDataFromGithub.js @@ -1,13 +1,40 @@ +// Import modules const puppeteer = require('puppeteer'); -const getDataFromGithub = async (githubUser) => { - console.log('Launch Puppeteer'); +const date = require('./getTime'); +const slack = require('./postToSlack'); +// Import dotenv data +require('dotenv').config(); + +getDataFromGithub = async (githubUser) => { + // console.log('Launch Puppeteer'); const browser = await puppeteer.launch(); const page = await browser.newPage(); + const githubLoginUrl = 'https://github.com/login'; + const githubUrl = 'https://github.com/'; - await page.goto(`${githubUrl}${githubUser}`); - await page.screenshot({ path: `src/images/${getTime()}-${githubUser}.png` }); + // Go to GitHub login form + await page.goto(`${githubLoginUrl}`, { waitUntil: 'networkidle0' }); + await page.type('#login_field', process.env.GITHUB_EMAIL); + await page.type('#password', process.env.GITHUB_PASSWORD); + // Click login button and wait for navigation + await Promise.all([ + page.click('[type=submit]'), + page.waitForNavigation({ waitUntil: 'networkidle0' }), + ]); + // Go to profile page + await page.goto(`${githubUrl}${githubUser}`); + await page.screenshot({ + path: `src/images/${date.getTime()}-${githubUser}.png`, + type: 'jpeg', + fullPage: true, + }); const githubCounter = await page.evaluate(() => document.getElementsByClassName('Counter')[0].innerText); - const githubUserPhoto await page.evaluate(() => document.getElementsByClassName('avatar-before-user-status')[0].src); + const githubUserPhoto = await page.evaluate(() => document.getElementsByClassName('avatar-before-user-status')[0].src); + slack.postToSlack(githubUser, githubUserPhoto, githubCounter); + await browser.close(); }; + +// Export function +module.exports.getDataFromGithub = getDataFromGithub; diff --git a/src/utils/getTime.js b/src/utils/getTime.js index e69de29..c804236 100644 --- a/src/utils/getTime.js +++ b/src/utils/getTime.js @@ -0,0 +1,7 @@ +getTime = function () { + const date = new Date(); + return date.getTime(); +}; + +module.exports.getTime = getTime; + diff --git a/src/utils/postToSlack.js b/src/utils/postToSlack.js index d18b5bd..922e532 100644 --- a/src/utils/postToSlack.js +++ b/src/utils/postToSlack.js @@ -1,4 +1,7 @@ const fetch = require('node-fetch'); +require('dotenv').config(); + +const webhookURL = process.env.HOOK + process.env.TOKEN; const postToSlack = async (user, photo, count) => { const data = JSON.stringify({ @@ -7,16 +10,17 @@ const postToSlack = async (user, photo, count) => { 'type': 'section', 'text': { 'type': 'mrkdwn', - 'text': `*Reto Cumplido* \n https://github.com/${user} \n Numero de repositorios: ${count.trimStart()}`, + 'text': `*Reto Cumplido 😁* \n https://github.com/${user} \n Numero de repositorios: ${count.trimStart()}`, }, 'accessory': { 'type': 'image', - 'image_url': photo, - 'alt_text': user, + 'image_url': `${photo}`, + 'alt_text': `${user}`, }, }, ], }); + await fetch(webhookURL, { method: 'POST', headers: { @@ -24,6 +28,10 @@ const postToSlack = async (user, photo, count) => { }, body: data, }).then((response) => { - console.log(response.size); + // console.log(response); + // console.log(response.size); }); }; + +// Export function +module.exports.postToSlack = postToSlack;