diff options
-rw-r--r-- | system/application/controllers/file.php | 5 | ||||
-rw-r--r-- | system/application/models/file_mod.php | 20 |
2 files changed, 24 insertions, 1 deletions
diff --git a/system/application/controllers/file.php b/system/application/controllers/file.php index 0ed66b511..a8ab406f7 100644 --- a/system/application/controllers/file.php +++ b/system/application/controllers/file.php @@ -35,14 +35,17 @@ class File extends Controller { // Try to guess what the user would like to do. // File uploads should be checked first because they are usually big and // take quite some time to upload. + $id = $this->uri->segment(1); if(isset($_FILES['file'])) { $this->do_upload(); } elseif ($this->input->post('content')) { $this->do_paste(); - } elseif ($this->file_mod->id_exists($this->uri->segment(1))) { + } elseif ($this->file_mod->id_exists($id)) { $this->file_mod->download(); } elseif ($this->var->cli_client) { die("No upload or unknown ID requested.\n"); + } elseif ($id != "file") { + $this->file_mod->non_existant(); } else { $this->upload_form(); } diff --git a/system/application/models/file_mod.php b/system/application/models/file_mod.php index 2d3fc8ccf..0c52bb012 100644 --- a/system/application/models/file_mod.php +++ b/system/application/models/file_mod.php @@ -138,6 +138,15 @@ class File_mod extends Model { } } + function non_existant() + { + $data["title"] = "Not Found"; + $this->output->set_status_header(404); + $this->load->view('file/header', $data); + $this->load->view('file/non_existant', $data); + $this->load->view('file/footer', $data); + } + // download a given ID // TODO: make smaller function download() @@ -150,6 +159,17 @@ class File_mod extends Model { $file = $this->file($filedata['hash']); if ($this->id_exists($id) && file_exists($file)) { + $oldest_time = (time()-$this->config->item('upload_max_age')); + if (filesize($file) > $this->config->item("small_upload_size") && $filedata["date"] < $oldest_time) { + if (filemtime($file) < $oldest_time) { + unlink($file); + $this->db->query('DELETE FROM files WHERE hash = ?', array($filedata['hash'])); + } else { + $this->db->query('DELETE FROM files WHERE id = ? LIMIT 1', array($id)); + } + $this->non_existant(); + return; + } // MODIFIED SINCE SUPPORT -- START // helps to keep traffic low when reloading an image $filedate = filectime($file); |