const express = require("express") const router = express.Router() var path = require("path") const { requireAuth } = require("./../middleware/authmiddleware") var multer = require("multer") const bodyParser = require("body-parser") router.use(bodyParser.json()) const User = require("./../model/games.js") const ActualUser = require("./../model/user.js") const catalog = require("./../model/item.js") const games = require("./../model/games.js") const rcc = require("./../model/rcc.js") var numbtest = /^\d+\.?\d*$/ const rcctalk = require("./../rcctalk") require("dotenv").config() const RCCDIR = process.env.RCC_Content var thisistheplaceid = "1" var storage = multer.diskStorage({ destination: function (req, file, cb) { // Uploads is the Upload_folder_name if (file.mimetype == "image/png") { cb(null, "./assets/gameassets") } else { cb(null, "./assets/ugc") } }, filename: async function (req, file, cb) { if (path.extname(file.originalname) === ".rbxl") { const placeid = await User.countDocuments() cb( null, file.fieldname + "-" + placeid + path.extname(file.originalname), ) } else if (file.mimetype == "image/png") { const placeid = await User.countDocuments() cb( null, file.fieldname + "-" + placeid + path.extname(file.originalname), ) } else if (file.mimetype == "application/octet-stream") { const itemid = await catalog.countDocuments() cb( null, file.fieldname + "-" + itemid + path.extname(file.originalname), ) } }, }) const upload = multer({ storage: storage, fileFilter: function (req, file, callback) { var ext = path.extname(file.originalname) if (ext !== ".png" && ext !== ".png" && ext !== ".rbxl") { return callback("Only pngs and rbxl are allowed") } callback(null, true) }, }) const itemupload = multer({ storage: storage, fileFilter: function (req, file, callback) { var ext = path.extname(file.originalname) if (req.userdocument.admin === "false") { return callback("LEAVE") } if (ext !== ".png" && ext !== ".png" && ext !== ".rbxm") { return callback("Only pngs and rbxm are allowed") } callback(null, true) }, }) router.post( "/uploaditem", requireAuth, itemupload.single("itemfile"), async (req, res) => { if ( req.userdocument.admin == false && req.userdocument?.ugcpermission == false ) { return res.redirect("/") } const xss = require("xss") //console.log(req.body) const { itemname, description, price, Type } = req.body if (numbtest.test(price) == false) { return res.json({ status: "error", error: "Price can only be a number!", }) } try { const itemid = await catalog.countDocuments() const response = await catalog.create({ Name: xss(itemname), Description: xss(description), Price: price, Type: Type, Creator: req.userdocument.userid, ItemId: itemid, approved: true, }) } catch (error) { throw error } return res.json({ status: "success", message: "Action completed." }) }, ) router.post("/moderateuser", requireAuth, async (req, res) => { if (req.userdocument.admin == false) { return res.redirect("/") } let { userid, reason, unbantime, Type } = req.body if (numbtest.test(userid) == false) { return res.json({ status: "error", error: "Userid can only be a number!", }) } const lookupuser = await ActualUser.findOne({ userid: userid }).lean() if (!lookupuser) { return res.json({ status: "error", error: "User not found" }) } if (Type === "Permanent Ban") { unbantime = "2100-01-01" } if (Type === "Warning") { unbantime = "2000-01-01" } //console.log(req.body) //console.log(unbantime) // if all above checks have passed lets set their moderation status and also log this entry for later lookup var datetime = new Date() ActualUser.updateOne( { userid: userid }, { $set: { moderation: JSON.stringify({ status: Type, Reason: reason, ExpiresIn: unbantime, BannedBy: req.userdocument.username, }), }, $push: { moderationhistory: { status: Type, Reason: reason, BannedBy: req.userdocument.username, Date: datetime.toISOString().slice(0, 10), }, }, }, function (err, doc) { //console.log(err) }, ) return res.json({ status: "success", message: "Action completed." }) }) router.post("/moderateuserlookup", requireAuth, async (req, res) => { if (req.userdocument.admin == false) { return res.redirect("/") } const { userid, username } = req.body const whitelist = [ "username", "coins", "userid", "admin", "moderation", "colors", "inventory", "joindate", "lastclaimofcurrency", "membership", "friendrequests", "friends", "badges", "status", "timesincelastrequest", "avatartype", "discordid", "moderationhistory", ] if (numbtest.test(userid) == false && !username) { return res.json({ status: "error", error: "Userid can only be a number!", }) } let lookupuser if (userid != "") { lookupuser = await ActualUser.findOne({ userid: userid }) .lean() .select(whitelist) } else if (username) { lookupuser = await ActualUser.findOne({ username: username }) .lean() .select(whitelist) } if (!lookupuser) { return res.json({ status: "error", error: "User not found reenter" }) } return res.json({ status: "success", data: lookupuser }) }) router.post("/queue", requireAuth, async (req, res) => { if (req.userdocument.admin == false) { return res.redirect("/") } const resultsPerPage = 30 let page = req.body.page ?? 0 if (page != 0) { page -= 1 } let { sort } = req.body let response let responsecount if (sort != "All") { response = await catalog .find({ Type: sort, approved: false, Type: { $ne: "Image" }, denied: { $exists: false }, }) .limit(resultsPerPage) .skip(0 + parseFloat(page) * resultsPerPage) .lean() .select(["-_id"]) responsecount = await catalog.countDocuments({ Type: sort, approved: false, Type: { $ne: "Image" }, denied: { $exists: false }, }) } if (sort === "All") { response = await catalog .find({ approved: false, Type: { $ne: "Image" }, denied: { $exists: false }, }) .limit(resultsPerPage) .skip(0 + parseFloat(page) * resultsPerPage) .lean() .select(["-_id"]) responsecount = await catalog.countDocuments({ approved: false, Type: { $ne: "Image" }, denied: { $exists: false }, }) } return res.json({ data: response, pages: Math.ceil(Math.max(responsecount / resultsPerPage, 1)), count: responsecount, }) }) router.post("/config", requireAuth, async (req, res) => { if (req.userdocument.admin == false) { return res.redirect("/") } return res.json({ data: { GamesEnabled: req.config.GamesEnabled, KeysEnabled: req.config.KeysEnabled, MaintenanceEnabled: req.config.MaintenanceEnabled, RegistrationEnabled: req.config.RegistrationEnabled, bannermessage: req.config.bannermessage, }, }) }) router.post("/config/update", requireAuth, async (req, res) => { if (req.userdocument.admin == false) { return res.redirect("/") } if ( req.body.setting != "RegistrationEnabled" && req.body.setting != "MaintenanceEnabled" && req.body.setting != "GamesEnabled" && req.body.setting != "KeysEnabled" ) { return res.json({ data: { status: "error", error: "Malformed input!" }, }) } req.config[req.body.setting] = req.body.update await req.configRepository.save(req.config) return res.json({ data: { GamesEnabled: req.config.GamesEnabled, KeysEnabled: req.config.KeysEnabled, MaintenanceEnabled: req.config.MaintenanceEnabled, RegistrationEnabled: req.config.RegistrationEnabled, bannermessage: req.config.bannermessage, }, }) }) module.exports = router