]> git.p6c8.net - jirafeau_project.git/blobdiff - lib/functions.php
Fixes #7 Jirafeau can now limit file size
[jirafeau_project.git] / lib / functions.php
index 459587d01bacc3a11e40dc319e48c68378a39187..b98486f80fd4ed59888b1f086e2b78079d59f08f 100644 (file)
@@ -2,7 +2,7 @@
 /*
  *  Jirafeau, your web file repository
  *  Copyright (C) 2008  Julien "axolotl" BERNARD <axolotl@magieeternelle.org>
 /*
  *  Jirafeau, your web file repository
  *  Copyright (C) 2008  Julien "axolotl" BERNARD <axolotl@magieeternelle.org>
- *  Copyright (C) 2012  Jerome Jutteau <j.jutteau@gmail.com>
+ *  Copyright (C) 2015  Jerome Jutteau <j.jutteau@gmail.com>
  *
  *  This program is free software: you can redistribute it and/or modify
  *  it under the terms of the GNU Affero General Public License as
  *
  *  This program is free software: you can redistribute it and/or modify
  *  it under the terms of the GNU Affero General Public License as
@@ -345,7 +345,9 @@ jirafeau_upload ($file, $one_time_download, $key, $time, $ip, $crypt, $link_name
     /* Crypt file if option is enabled. */
     $crypted = false;
     $crypt_key = '';
     /* Crypt file if option is enabled. */
     $crypted = false;
     $crypt_key = '';
-    if ($crypt == true && extension_loaded('mcrypt'))
+    if ($crypt == true && !(extension_loaded('mcrypt') == true))
+        error_log ("PHP extension mcrypt not loaded, won't encrypt in Jirafeau");
+    if ($crypt == true && extension_loaded('mcrypt') == true)
     {
         $crypt_key = jirafeau_encrypt_file ($file['tmp_name'], $file['tmp_name']);
         if (strlen($crypt_key) > 0)
     {
         $crypt_key = jirafeau_encrypt_file ($file['tmp_name'], $file['tmp_name']);
         if (strlen($crypt_key) > 0)
@@ -451,7 +453,7 @@ jirafeau_is_viewable ($mime)
     if (!empty ($mime))
     {
         /* Actually, verify if mime-type is an image or a text. */
     if (!empty ($mime))
     {
         /* Actually, verify if mime-type is an image or a text. */
-        $viewable = array ('image', 'text');
+        $viewable = array ('image', 'text', 'video', 'audio');
         $decomposed = explode ('/', $mime);
         return in_array ($decomposed[0], $viewable);
     }
         $decomposed = explode ('/', $mime);
         return in_array ($decomposed[0], $viewable);
     }
@@ -839,10 +841,11 @@ jirafeau_async_init ($filename, $type, $one_time, $key, $time, $ip)
   * @param $ref asynchronous upload reference
   * @param $file piece of data
   * @param $code client code for this operation
   * @param $ref asynchronous upload reference
   * @param $file piece of data
   * @param $code client code for this operation
+  * @param $max_file_size maximum allowed file size
   * @return  a string containing a next code to use or the string "Error"
   */
 function
   * @return  a string containing a next code to use or the string "Error"
   */
 function
-jirafeau_async_push ($ref, $data, $code)
+jirafeau_async_push ($ref, $data, $code, $max_file_size)
 {
     /* Get async infos. */
     $a = jirafeau_get_async_ref ($ref);
 {
     /* Get async infos. */
     $a = jirafeau_get_async_ref ($ref);
@@ -856,9 +859,21 @@ jirafeau_async_push ($ref, $data, $code)
     
     $p = s2p ($ref);
 
     
     $p = s2p ($ref);
 
+    /* File path. */
+    $r_path = $data['tmp_name'];
+    $w_path = VAR_ASYNC . $p . $ref . '_data';
+
+    /* Check that file size is not above upload limit. */
+    if ($max_file_size > 0 &&
+        filesize ($r_path) + filesize ($w_path) > $max_file_size * 1024 * 1024)
+    {
+        jirafeau_async_delete ($ref);
+        return "Error";
+    }
+
     /* Concatenate data. */
     /* Concatenate data. */
-    $r = fopen ($data['tmp_name'], 'r');
-    $w = fopen (VAR_ASYNC . $p . $ref . '_data', 'a');
+    $r = fopen ($r_path, 'r');
+    $w = fopen ($w_path, 'a');
     while (!feof ($r))
     {
         if (fwrite ($w, fread ($r, 1024)) === false)
     while (!feof ($r))
     {
         if (fwrite ($w, fread ($r, 1024)) === false)
@@ -871,7 +886,7 @@ jirafeau_async_push ($ref, $data, $code)
     }
     fclose ($r);
     fclose ($w);
     }
     fclose ($r);
     fclose ($w);
-    unlink ($data['tmp_name']);
+    unlink ($r_path);
     
     /* Update async file. */
     $code = jirafeau_gen_random (4);
     
     /* Update async file. */
     $code = jirafeau_gen_random (4);
@@ -908,7 +923,7 @@ jirafeau_async_end ($ref, $code, $crypt, $link_name_length)
 
     $crypted = false;
     $crypt_key = '';
 
     $crypted = false;
     $crypt_key = '';
-    if ($crypt == true && extension_loaded('mcrypt'))
+    if ($crypt == true && extension_loaded('mcrypt') == true)
     {
         $crypt_key = jirafeau_encrypt_file ($p, $p);
         if (strlen($crypt_key) > 0)
     {
         $crypt_key = jirafeau_encrypt_file ($p, $p);
         if (strlen($crypt_key) > 0)
@@ -977,7 +992,7 @@ function
 jirafeau_encrypt_file ($fp_src, $fp_dst)
 {
     $fs = filesize ($fp_src);
 jirafeau_encrypt_file ($fp_src, $fp_dst)
 {
     $fs = filesize ($fp_src);
-    if ($fs === false || $fs == 0 || !extension_loaded('mcrypt'))
+    if ($fs === false || $fs == 0 || !(extension_loaded('mcrypt') == true))
         return '';
 
     /* Prepare module. */
         return '';
 
     /* Prepare module. */
@@ -1016,7 +1031,7 @@ function
 jirafeau_decrypt_file ($fp_src, $fp_dst, $k)
 {
     $fs = filesize ($fp_src);
 jirafeau_decrypt_file ($fp_src, $fp_dst, $k)
 {
     $fs = filesize ($fp_src);
-    if ($fs === false || $fs == 0 || !extension_loaded('mcrypt'))
+    if ($fs === false || $fs == 0 || !(extension_loaded('mcrypt') == true))
         return false;
 
     /* Init module */
         return false;
 
     /* Init module */
@@ -1063,7 +1078,6 @@ function jirafeau_challenge_upload_password ($cfg, $password)
     forEach ($cfg['upload_password'] as $p)
         if ($password == $p)
             return true;
     forEach ($cfg['upload_password'] as $p)
         if ($password == $p)
             return true;
-    error_log("password not found $password");
     return false;
 }
 
     return false;
 }
 

patrick-canterino.de