Skip to content

Commit 07e22ba

Browse files
Add files via upload
1 parent a4551d3 commit 07e22ba

File tree

6 files changed

+3425
-0
lines changed

6 files changed

+3425
-0
lines changed

Website/server/.env

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
MONGODB_URI =mongodb+srv://Jazzy49:[email protected]/MiniProjectsGIt?retryWrites=true&w=majority

Website/server/app.js

Lines changed: 320 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,320 @@
1+
const mongoose = require("mongoose");
2+
const express = require("express");
3+
const axios = require("axios");
4+
const cors = require("cors");
5+
const bodyParser = require('body-parser');
6+
const { jsonresponse } = require("./jsonresponse");
7+
require('dotenv').config();
8+
9+
// Step 2: Extract Folder Names
10+
const app = express();
11+
app.use(cors());
12+
app.use(bodyParser.json());
13+
const folders = jsonresponse
14+
.filter(
15+
(folder) =>
16+
![".github", ".gitignore", "readme.md",".yml"].includes(
17+
folder.name.toLowerCase()
18+
)
19+
)
20+
21+
// Step 3: Connect to MongoDB
22+
mongoose.connect(
23+
process.env.MONGODB_URI,
24+
{
25+
useNewUrlParser: true,
26+
useUnifiedTopology: true,
27+
}
28+
);
29+
30+
// Step 4: Create a Schema
31+
const folderSchema = new mongoose.Schema(
32+
{
33+
name: String,
34+
description:String,
35+
files: [
36+
{
37+
filename: String,
38+
39+
size: Number,
40+
url: String,
41+
type: String,
42+
},
43+
],
44+
subfolders: [
45+
{
46+
name: String,
47+
files: [
48+
{
49+
filename: String,
50+
size: Number,
51+
url: String,
52+
type: String,
53+
},
54+
],
55+
},
56+
],
57+
},
58+
{ typeKey: "$type" }
59+
);
60+
61+
// Step 5: Create Model and Save Data
62+
const Folder = mongoose.model("Folder", folderSchema);
63+
64+
app.get("/api/folders", async (req, res) => {
65+
try {
66+
67+
68+
const insertedFolders = await Folder.insertMany(folders);
69+
70+
console.log(`${insertedFolders.length} folders saved successfully`);
71+
72+
res.status(201).json({ message: "Folders saved successfully",folders: insertedFolders });
73+
} catch (err) {
74+
console.error("Error saving folders:", err);
75+
res.status(500).json({ error: "Failed to save folders" });
76+
}
77+
});
78+
79+
app.get("/api/folder", async (req, res) => {
80+
try {
81+
const allFolders = await Folder.find({});
82+
83+
84+
res.status(200).json({ folders: allFolders });
85+
} catch (err) {
86+
console.error("Error fetching folders:", err);
87+
res.status(500).json({ error: "Failed to fetch folders" });
88+
}
89+
});
90+
91+
92+
93+
app.post('/api/addfolder', async (req, res) => {
94+
try {
95+
const { name, description } = req.body;
96+
console.log(req.body);
97+
// Create the new folder document in the MongoDB collection
98+
const folder = await Folder.create({ name, description });
99+
100+
console.log('Folder saved:', folder);
101+
102+
res.status(201).json({ message: 'Folder saved successfully' });
103+
} catch (error) {
104+
console.error('Error saving folder:', error);
105+
res.status(500).json({ error: 'Failed to save folder' });
106+
}
107+
});
108+
109+
110+
111+
112+
113+
114+
115+
116+
117+
118+
119+
120+
app.get("/api/update-files/:name", async (req, res) => {
121+
try {
122+
const response = await axios.get("http://localhost:3000/api/folder");
123+
const dirname = req.params.name;
124+
125+
// const folderNames = response.data.folders;
126+
// console.log("start"+response.data.folders);
127+
// for (const folderName of folderNames) {
128+
// await processFolder(folderName);
129+
// }
130+
await processFolder(dirname);
131+
res.status(200).json({ message: "Folders updated successfully." });
132+
} catch (err) {
133+
console.error("Failed to update folders:", err);
134+
res
135+
.status(500)
136+
.json({ error: "An error occurred while updating folders." });
137+
}
138+
});
139+
140+
async function processFolder(folderName) {
141+
const folder = await Folder.findOne({ name: folderName });
142+
143+
if (!folder) {
144+
console.log(`Folder not found: ${folderName}`);
145+
return;
146+
}
147+
148+
const folderUrl = `https://api.github.com/repos/avinashkranjan/Pentesting-and-Hacking-Scripts/contents/${folderName}`;
149+
150+
const response = await axios.get(folderUrl);
151+
152+
let items = response.data;
153+
154+
if (Array.isArray(items)) {
155+
console.log("items is an array");
156+
} else {
157+
items = [items];
158+
console.log("items is not an array");
159+
}
160+
161+
const filer = items.filter((item) => item.type === "file");
162+
163+
const fileObjects = filer.map((file) => ({
164+
filename: file.name,
165+
size: file.size,
166+
url: file.download_url,
167+
type: file.type,
168+
}));
169+
folder.files = fileObjects;
170+
171+
const out = await Folder.findOneAndUpdate(
172+
{ name: folder.name },
173+
{ $set: { files: fileObjects } },
174+
{ new: true, runValidators: true }
175+
);
176+
177+
console.log(`Folder updated: ${folderName}`);
178+
179+
for (const item of items) {
180+
if (item.type === "dir") {
181+
await processSubfolder(2, folder, item.name);
182+
}
183+
}
184+
}
185+
186+
async function processSubfolder(count, parentFolder, subfolderName) {
187+
var mycount = count;
188+
mycount = mycount - 1;
189+
console.log("parentFolder" + parentFolder.name);
190+
console.log("subFolderName" + subfolderName);
191+
if (mycount == 1) {
192+
console.log("why are you here");
193+
var subfolderUrl = `https://api.github.com/repos/avinashkranjan/Pentesting-and-Hacking-Scripts/contents/${parentFolder.name}/${subfolderName}`;
194+
} else {
195+
console.log("why are you here go there");
196+
var subfolderUrl = `https://api.github.com/repos/avinashkranjan/Pentesting-and-Hacking-Scripts/contents/DDoS-Ripper/${parentFolder.name}/${subfolderName}`;
197+
console.log(subfolderUrl);
198+
}
199+
200+
const response = await axios.get(subfolderUrl);
201+
const items = response.data;
202+
203+
const files = items.filter((item) => item.type === "file");
204+
205+
const fileObjects = files.map((file) => ({
206+
filename: file.name,
207+
size: file.size,
208+
url: `${subfolderUrl}/${file.name}`, // Append subfolder name to the URL
209+
type: file.type,
210+
}));
211+
212+
const subfolder = {
213+
name: subfolderName,
214+
files: fileObjects,
215+
subfolders: [],
216+
};
217+
218+
parentFolder.subfolders.push(subfolder);
219+
console.log(parentFolder.subfolders);
220+
const subfolderNameToFind = "DDoS-Ripper Pro";
221+
const foundSubfolderIndex = parentFolder.subfolders.findIndex(
222+
(subfolder) => subfolder.name === subfolderNameToFind
223+
);
224+
225+
if (count == 1) {
226+
await parentFolder.save();
227+
}
228+
229+
console.log(`Subfolder updated: ${subfolderName}`);
230+
if (subfolderName == "pytransform") {
231+
}
232+
console.log("Parent", parentFolder.name);
233+
for (const item of items) {
234+
console.log(item.name);
235+
if (item.type === "dir") {
236+
if (item.type === "dir") {
237+
console.log("special" + subfolder.name);
238+
await processSubfolder(3, subfolder, item.name);
239+
}
240+
console.log("Subfolder", subfolder.name);
241+
242+
await processSubfolder(2, subfolder, item.name);
243+
}
244+
}
245+
246+
// Introduce a delay of 1 second (1000 milliseconds) after each subfolder processing
247+
await delay(1000);
248+
}
249+
250+
async function delay(ms) {
251+
return new Promise((resolve) => setTimeout(resolve, ms));
252+
}
253+
254+
app.get("/api/getfiles/:name", async (req, res) => {
255+
try {
256+
const dirname = req.params.name;
257+
// Retrieve the folder document from the database
258+
const folder = await Folder.findOne({ name: dirname });
259+
260+
console.log(folder);
261+
// Extract the file and subfolder URLs from the folder document
262+
const files = folder.files.map((file) => file.url);
263+
const subfolders = folder.subfolders.map((subfolder) => ({
264+
name: subfolder.name,
265+
files: subfolder.files.map((file) => file.url),
266+
}));
267+
const name = folder.name;
268+
// Create a response object with the URLs
269+
const response = {
270+
name,
271+
files,
272+
subfolders,
273+
};
274+
275+
// Send the response as JSON
276+
res.json(response);
277+
} catch (error) {
278+
// Handle any error that occurs during the database query or processing
279+
console.error(error);
280+
res.status(500).json({ error: "Internal Server Error" });
281+
}
282+
});
283+
284+
async function delay(ms) {
285+
return new Promise((resolve) => setTimeout(resolve, ms));
286+
}
287+
288+
app.get("/api/getfiles/:name", async (req, res) => {
289+
try {
290+
const dirname = req.params.name;
291+
// Retrieve the folder document from the database
292+
const folder = await Folder.findOne({ name: dirname });
293+
294+
console.log(folder);
295+
// Extract the file and subfolder URLs from the folder document
296+
const files = folder.files.map((file) => file.url);
297+
const subfolders = folder.subfolders.map((subfolder) => ({
298+
name: subfolder.name,
299+
files: subfolder.files.map((file) => file.url),
300+
}));
301+
const name = folder.name;
302+
// Create a response object with the URLs
303+
const response = {
304+
name,
305+
files,
306+
subfolders,
307+
};
308+
309+
// Send the response as JSON
310+
res.json(response);
311+
} catch (error) {
312+
// Handle any error that occurs during the database query or processing
313+
console.error(error);
314+
res.status(500).json({ error: "Internal Server Error" });
315+
}
316+
});
317+
318+
app.listen(3000, () => {
319+
console.log("server is listening on port 3000....");
320+
});

0 commit comments

Comments
 (0)