212 lines
8.0 KiB
JavaScript
212 lines
8.0 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 |