UNPKG

gitrecon

Version:

This CLI tool is designed to retrieve exposed email addresses from a GitHub user’s public activity and to identify a GitHub username associated with a given email address. It is intended strictly for educational use and ethical security research. Please u

94 lines (76 loc) 3.59 kB
// file operations const fs = require('fs'); const path = require('path'); const axios = require('axios'); const ColorUtils = require('./colors'); const { HEADER } = require('../config/constants'); // Function to download avatar - orijinal koddan const downloadAvatar = async (url, username, site) => { if (!url) return null; try { const response = await axios.get(url, { responseType: 'arraybuffer', headers: { 'User-Agent': HEADER['User-Agent'] } }); // Create output directory if it doesn't exist const outputDir = path.join(process.cwd(), 'gitrecon-results'); if (!fs.existsSync(outputDir)) { fs.mkdirSync(outputDir, { recursive: true }); } const avatarPath = path.join(outputDir, `${username}_${site}_avatar.jpg`); fs.writeFileSync(avatarPath, Buffer.from(response.data)); console.log(ColorUtils.green(`Avatar downloaded to: ${ColorUtils.yellow(avatarPath)}`)); return avatarPath; } catch (error) { console.error(ColorUtils.red(`Error downloading avatar: ${error.message}`)); return null; } }; // Add a utility function for real-time saving const saveRealTime = (data, username, site, outputDir) => { const baseFilename = `${username}_${site}_realtime`; if (!fs.existsSync(outputDir)) { fs.mkdirSync(outputDir, { recursive: true }); } const jsonFilePath = path.join(outputDir, `${baseFilename}.json`); // Add timestamp to the data data.last_updated = new Date().toISOString(); // Write the data to the file, overwriting any previous content fs.writeFileSync(jsonFilePath, JSON.stringify(data, null, 2)); console.log(ColorUtils.green(`Real-time data saved to: ${ColorUtils.yellow(jsonFilePath)}`)); return jsonFilePath; }; // Create output directory helper const createOutputDirectory = () => { const outputDir = path.join(process.cwd(), 'gitrecon-results'); if (!fs.existsSync(outputDir)) { fs.mkdirSync(outputDir, { recursive: true }); } return outputDir; }; class FileUtils { static downloadAvatar = downloadAvatar; static saveRealTime = saveRealTime; static createOutputDirectory = createOutputDirectory; // Save output to files - orijinal koddan static saveOutput(data, format, username, site) { const timestamp = new Date().toISOString().replace(/:/g, '-').replace(/\..+/, ''); const baseFilename = `${username}_${site}_${timestamp}`; // Create output directory if it doesn't exist const outputDir = this.createOutputDirectory(); // Save JSON output if (format === 'json' || format === 'all') { const jsonFilePath = path.join(outputDir, `${baseFilename}.json`); fs.writeFileSync(jsonFilePath, JSON.stringify(data, null, 2)); console.log(ColorUtils.green(`JSON report saved to: ${ColorUtils.yellow(jsonFilePath)}`)); } // Save HTML output if (format === 'html' || format === 'all') { const HtmlFormatter = require('../formatters/htmlFormatter'); const htmlFilePath = path.join(outputDir, `${baseFilename}.html`); fs.writeFileSync(htmlFilePath, HtmlFormatter.generate(data)); console.log(ColorUtils.green(`HTML report saved to: ${ColorUtils.yellow(htmlFilePath)}`)); } return { outputDir, baseFilename }; } } module.exports = FileUtils;