| LoneAngelIbesu |
07-26-2009 01:18 AM |
Automated Uploading
So, I toyed around with Graal's personaluploads feature, after reading Dusty's post in the improvement forum. It's pretty straight-forward and I made sure to comment it thoroughly. For security, it checks file extensions and headers against a predefined whitelist. The script requires minimal configuration, but it's meant to be a learning experience, not a full-fledged, out-of-the-box program; in fact, it's pretty bare-bones. Needless to say, if your server is prone to immature kids uploading inappropriate graphics, I would not suggest using this. There is no moderation, whatsoever.
Comments, critiques, suggestions all welcome. ^^
PHP Code:
function onActionServerside() { // Get personaluploads directory and filename temp.dir = player.getPersonalUploadFolder(); temp.folder.loadfolder(temp.dir @ "*", 0); temp.file = temp.folder[0]; // Establish extension and header whitelists temp.extensions = {"gif", "png"}; temp.headers = {"GIF8", "PNG"}; // Establish folders // Edit these to fit your server's file structure temp.bodyfolder = "levels/graphics/player/bodies/"; temp.headfolder = "levels/graphics/player/heads/"; temp.hatfolder = "levels/graphics/player/hats/"; temp.shieldfolder = "levels/graphics/player/shields/"; temp.packfolder = "levels/graphics/player/packs/"; // Extract file extension and header temp.fileext = temp.file.tokenize(".")[1]; temp.rawfilehead.loadlines(temp.dir @ temp.file); temp.filehead = this.analyzeheader(temp.rawfilehead[0], temp.headers); // Check if file extention is in whitelist if(temp.fileext in temp.extensions) { // If true, check if file header is in whitelist if(temp.filehead != false) { // If true, move file to correct directory, based on file name // Check if file starts with correct prefix if(temp.file.starts("valp")) { // Replace with your server's prefix, or remove the check altogether // Check type of file, based on file name if(temp.file.pos("head") => 0) { movefile(temp.dir @ temp.file, temp.headfolder @ temp.file); } else if(temp.file.pos("body") => 0) { movefile(temp.dir @ temp.file, temp.bodyfolder @ temp.file); } else if(temp.file.pos("hat") => 0) { movefile(temp.dir @ temp.file, temp.hatfolder @ temp.file); } else if(temp.file.pos("shield") => 0) { movefile(temp.dir @ temp.file, temp.shieldfolder @ temp.file); } else if(temp.file.pos("pack") => 0) { movefile(temp.dir @ temp.file, temp.packfolder @ temp.file); } else { // If file is not named correctly, delete it. deletefile(temp.dir @ temp.file); } } else { // If file is not named correctly, delete it. deletefile(temp.dir @ temp.file); } } else { // If false, delete file: this file is not allowed deletefile(temp.dir @ temp.file); } } else { // If false, delete file: this file is not allowed deletefile(temp.dir @ temp.file); } } function analyzeheader(header, whitelist) { for(temp.i: temp.whitelist) { if(temp.header.pos(temp.i) => 0) { return temp.i; } } return false; } //#CLIENTSIDE function onCreated() { // Restriction feature. Add player account to array. temp.restricted = {}; if(player.account in temp.restricted) { this.destroy(); } } function onPlayerChats() { if(player.chat == "/upload") { requesttext("folder", "PERSONAL"); selectFileforUpload(); } } function onFilesUploaded() { triggerserver("gui", this.name); }
|