View Single Post
  #1  
Old 07-26-2009, 01:18 AM
LoneAngelIbesu LoneAngelIbesu is offline
master of infinite loops
LoneAngelIbesu's Avatar
Join Date: May 2007
Location: Toldeo, Ohio
Posts: 1,049
LoneAngelIbesu has a spectacular aura aboutLoneAngelIbesu has a spectacular aura about
Send a message via AIM to LoneAngelIbesu
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.filetemp.headfolder temp.file);
        }
        else if(
temp.file.pos("body") => 0) {
          
movefile(temp.dir temp.filetemp.bodyfolder temp.file);
        }
        else if(
temp.file.pos("hat") => 0) {
          
movefile(temp.dir temp.filetemp.hatfolder temp.file);
        }
        else if(
temp.file.pos("shield") => 0) {
          
movefile(temp.dir temp.filetemp.shieldfolder temp.file);
        }
        else if(
temp.file.pos("pack") => 0) {
          
movefile(temp.dir temp.filetemp.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(headerwhitelist) {
  for(
temp.itemp.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);

__________________
"We are all in the gutter, but some of us are looking at the stars."
— Oscar Wilde, Lady Windermere's Fan
Reply With Quote