123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- // SkibidiHub Administration CLI //
- require("dotenv").config();
- const supabase = require("@supabase/supabase-js");
- const fs = require("node:fs");
- const path = require("node:path");
- const utils = require("./utils.js");
- const client = supabase.createClient(
- process.env.SUPABASE_URL,
- process.env.SUPABASE_KEY
- );
- // Get process arguments
- const args = process.argv;
- args.shift();
- args.shift();
- async function main() {
- let ips;
- switch(args[0]) {
- case "help":
- console.log("Valid commands are:\n\ndeleteVideo [id]\nban [ip]\nunban [ip]\ncleanDatabase\ncleanDrive\nupdateSocialScore [user] [-300]\nverifyUser [user]\ndeVerifyUser [user]");
- break;
- case "ban":
- if(!args[1]) return console.log("you need to provide an ip address to ban!");
- ips = JSON.parse(fs.readFileSync("./ipbans.json"));
- ips.push(args[1]);
- fs.writeFileSync("./ipbans.json", JSON.stringify(ips), {encoding:'utf8', flag:'w'})
- console.log("Successfully banned ip.");
- break;
- case "unban":
- if(!args[1]) return console.log("you need to provide an ip address to unban!");
- ips = JSON.parse(fs.readFileSync("./ipbans.json"));
- if(!ips.includes(args[1])) return console.log("the ip address provided isnt banned.");
- ips.splice(ips.indexOf(args[1]), 1)
- fs.writeFileSync("./ipbans.json", JSON.stringify(ips), {encoding:'utf8', flag:'w'})
- console.log("Successfully unbanned ip.");
- break;
- case "deleteVideo":
- if(!args[1]) return console.log("you need to provide a video id to delete!");
- if(!utils.videoExists(args[1])) return console.log("the video you are trying to delete doesnt exist!");
-
- await deleteVideo(args[1]);
-
- break;
- case "cleanDatabase":
- client.from("videos").select("id").then(data => {
- data.data.forEach(async (video) => {
- if(!utils.videoExists(video.id)) {
- console.log(`Video with ID ${video.id} doesn't exist on drive. Erasing it on the database...`)
- await client.from("videos").delete().eq("id", video.id);
- }
- });
- })
- break;
- case "cleanDrive":
- if(args[1] != "confirm") {
- console.log("This should only be run on a BROKEN videos folder from a DEVELOPMENT environment.")
- console.log("If you run this, you WILL destroy some videos which you can NOT undo.");
- console.log("You must also run cleanDatabase before running this.");
- console.log("to confirm, run node cli.js cleanDrive confirm.");
- return;
- }
-
- const videos = fs.readdirSync(path.join(__dirname, "videos"));
- videos.forEach(async (id) => {
- const videoPath = path.join(__dirname, path.join("videos", id));
- if(!fs.existsSync(path.join(videoPath, "video.mp4"))) return await deleteVideo(id);
- if(!fs.existsSync(path.join(videoPath, "thumbnail.jpg"))) return await deleteVideo(id);
- })
- break;
- case "updateSocialScore":
- if(!args[1]) return console.log("Please Provide a user to update the social credit score of.");
- if(!args[2]) return console.log("Please provide a value to update the social credit score.");
- if(!utils.userExists(args[1])) return console.log("User doesn't exist!");
-
- const socialScoreData = await client
- .from("users")
- .select("social_score")
- .eq("name", args[1]);
-
- const socialScore = parseInt(socialScoreData["data"][0]["social_score"]) + parseInt(args[2]);
- await client.from("users").update({"social_score": socialScore}).eq("name", args[1]).then(data => {
- if(data.error) {
- return console.error(data);
- } else if(data.status != 204) {
- return console.error(data);
- }
- return console.log("Updated successfully.");
- });
- break;
- case "verifyUser":
- if(!args[1]) return console.log("Please provide a user to verify.");
- if(!utils.userExists(args[1])) return console.log("User doesn't exist!");
- await client.from("users").update({"verified": "TRUE"}).eq("name", args[1]).then(data => {
- if(data.error) {
- return console.error(data);
- } else if(data.status != 204) {
- return console.error(data);
- }
- return console.log("Verified successfully.");
- });
- break;
- case "deVerifyUser":
- if(!args[1]) return console.log("Please provide a user to verify.");
- if(!utils.userExists(args[1])) return console.log("User doesn't exist!");
- await client.from("users").update({"verified": "FALSE"}).eq("name", args[1]).then(data => {
- if(data.error) {
- return console.error(data);
- } else if(data.status != 204) {
- return console.error(data);
- }
- return console.log("Deverified successfully.");
- });
- break;
- case "sunset":
- if(!args[1]) return console.log("please provide a unix timestamp for when you want skibidihub to explode");
- const sunset = path.join(__dirname, "sunset.json")
- const json = JSON.parse(fs.readFileSync(sunset))
- json.sunset = true
- json.timestamp = args[1]
- const text = JSON.stringify(json)
- fs.writeFileSync(sunset, text);
- break;
- default:
- console.log("SkibidiHub Administration CLI\n\nPlease enter a valid command.")
- break;
- }
- }
- async function deleteVideo(id) {
- console.log(`Deleting video with the id ${id}...`);
- // Delete video on hard drive
- if(fs.existsSync(path.join(__dirname, path.join("videos", path.join(id, "video.mp4"))))) fs.unlinkSync(path.join(__dirname, path.join("videos", path.join(id, "video.mp4"))));
- if(fs.existsSync(path.join(__dirname, path.join("videos", path.join(id, "thumbnail.jpg"))))) fs.unlinkSync(path.join(__dirname, path.join("videos", path.join(id, "thumbnail.jpg"))));
- fs.rmSync(path.join(__dirname, path.join("videos", id)), { recursive: true, force: true });
- // Delete video in the database
- await client.from("videos").delete().eq("id", id);
- }
- main();
|