]> git.p6c8.net - jirafeau.git/commitdiff
Convert links to base 64 string for shorter links
authorJerome Jutteau <mojo@couak.net>
Wed, 9 Jan 2013 20:36:42 +0000 (21:36 +0100)
committerJerome Jutteau <mojo@couak.net>
Wed, 9 Jan 2013 20:36:42 +0000 (21:36 +0100)
file.php
lib/functions.php

index 18bb459d6a04e5fddc35a6c8866a2ed8c15e66c9..ebb5cff8c13644d9d7d6d87505c4a906e34490ee 100644 (file)
--- a/file.php
+++ b/file.php
@@ -32,7 +32,7 @@ if (!isset ($_GET['h']) || empty ($_GET['h']))
 
 $link_name = $_GET['h'];
 
 
 $link_name = $_GET['h'];
 
-if (!preg_match ('/[0-9a-f]{32}$/', $link_name))
+if (!preg_match ('/[0-9a-fA-Z-_]*$/', $link_name))
 {
     require (JIRAFEAU_ROOT.'lib/template/header.php');
     echo '<div class="error"><p>' . t('Sorry, the requested file is not found') . '</p></div>';
 {
     require (JIRAFEAU_ROOT.'lib/template/header.php');
     echo '<div class="error"><p>' . t('Sorry, the requested file is not found') . '</p></div>';
index 97733d598d199f2c04eb10f91543427e59cecc5c..f1d81f49a7da3bd32a395ad938392bf92848bd92 100644 (file)
@@ -31,6 +31,31 @@ s2p ($s)
     return $p;
 }
 
     return $p;
 }
 
+/**
+ * Convert base 16 to base 64
+ * @returns A string based on 64 characters (0-9, a-z, A-Z, "-" and "_")
+ */
+function
+base_16_to_64 ($num)
+{
+    $o = '';
+    $m = implode ('', array_merge (range (0,9),
+                                   range ('a', 'z'),
+                                   range ('A', 'Z'),
+                                   ['-', '_']));
+    $i = 0;
+    $size = strlen ($num);
+    $b='';
+    for ($i = 0; $i < $size; $i++)
+        $b .= base_convert ($num{$i}, 16, 2);
+    $size = strlen ($b);
+    for ($i = $size - 6; $i >= 0; $i -= 6)
+        $o = $m{bindec (substr ($b, $i, 6))} . $o;
+    if ($i < 0 && $i > -6)
+        $o = $m{bindec (substr ($b, 0, $i + 6))} . $o;
+    return $o;
+}
+
 function
 jirafeau_human_size ($octets)
 {
 function
 jirafeau_human_size ($octets)
 {
@@ -315,7 +340,7 @@ jirafeau_upload ($file, $one_time_download, $key, $time, $ip)
             NL . $md5. NL . ($one_time_download ? 'O' : 'R') . NL.date ('U') .
             NL. $ip . NL. $delete_link_code . NL);
     fclose ($handle);
             NL . $md5. NL . ($one_time_download ? 'O' : 'R') . NL.date ('U') .
             NL. $ip . NL. $delete_link_code . NL);
     fclose ($handle);
-    $md5_link = md5_file ($link_tmp_name);
+    $md5_link = base_16_to_64 (md5_file ($link_tmp_name));
     $l = s2p ("$md5_link");
     if (!@mkdir (VAR_LINKS . $l, 0755, true) ||
         !rename ($link_tmp_name,  VAR_LINKS . $l . $md5_link))
     $l = s2p ("$md5_link");
     if (!@mkdir (VAR_LINKS . $l, 0755, true) ||
         !rename ($link_tmp_name,  VAR_LINKS . $l . $md5_link))

patrick-canterino.de