332 lines
7.7 KiB
JavaScript
332 lines
7.7 KiB
JavaScript
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
|