X-Git-Url: https://git.p6c8.net/jirafeau_mojo42.git/blobdiff_plain/17e768a21c3d6877746fca24440600a9fea4da89..3b097eba6400cac6e9f5d6b230a33f2783b38e5b:/file.php diff --git a/file.php b/file.php index 0a1554c..2edaf44 100644 --- a/file.php +++ b/file.php @@ -30,9 +30,14 @@ if (!isset ($_GET['h']) || empty ($_GET['h'])) exit; } +/* Operations may take a long time. + * Be sure PHP's safe mode is off. + */ +set_time_limit(0); + $link_name = $_GET['h']; -if (!preg_match ('/[0-9a-zA-Z_-]{22}$/', $link_name)) +if (!preg_match ('/[0-9a-zA-Z_-]+$/', $link_name)) { require (JIRAFEAU_ROOT.'lib/template/header.php'); echo '

' . t('Sorry, the requested file is not found') . '

'; @@ -54,6 +59,10 @@ $delete_code = ''; if (isset ($_GET['d']) && !empty ($_GET['d'])) $delete_code = $_GET['d']; +$crypt_key = ''; +if (isset ($_GET['k']) && !empty ($_GET['k'])) + $crypt_key = $_GET['k']; + $button_download = false; if (isset ($_GET['bd']) && !empty ($_GET['bd'])) $button_download = true; @@ -95,15 +104,26 @@ if ($link['time'] != JIRAFEAU_INFINITY && time () > $link['time']) exit; } +if (empty ($crypt_key) && $link['crypted']) +{ + require (JIRAFEAU_ROOT.'lib/template/header.php'); + echo '

' . t('Sorry, the requested file is not found') . + '

'; + require (JIRAFEAU_ROOT.'lib/template/footer.php'); + exit; +} + $password_challenged = false; if (!empty ($link['key'])) { if (!isset ($_POST['key'])) { require (JIRAFEAU_ROOT.'lib/template/header.php'); - echo '
' . - '
'; ?> + echo '
' . + ''; ?> ' . '' . t('Password protection') . @@ -116,14 +136,23 @@ if (!empty ($link['key'])) '' . ''; ?>'; + document.getElementById('submit_download').submit ();"/>'; + document.getElementById('submit_preview').submit ();"/>
'; require (JIRAFEAU_ROOT.'lib/template/footer.php'); @@ -131,7 +160,9 @@ if (!empty ($link['key'])) } else { - if ($link['key'] != md5 ($_POST['key'])) + if ($link['key'] == md5 ($_POST['key'])) + $password_challenged = true; + else { header ("Access denied"); require (JIRAFEAU_ROOT.'lib/template/header.php'); @@ -140,17 +171,17 @@ if (!empty ($link['key'])) require (JIRAFEAU_ROOT.'lib/template/footer.php'); exit; } - else - $password_challenged = true; } } if ($cfg['download_page'] && !$password_challenged && !$button_download && !$button_preview) { require (JIRAFEAU_ROOT.'lib/template/header.php'); - echo '
' . - '
'; ?> + echo '
' . + ''; ?> ' . $link['file_name'] . '' . ''; echo '
' . @@ -159,14 +190,24 @@ if ($cfg['download_page'] && !$password_challenged && !$button_download && !$but '
' . t('By using our services, you accept of our'). ' ' . t('Term Of Service') . ''; ?>'; + document.getElementById('submit_download').submit ();"/>'; + document.getElementById('submit_preview').submit ();"/>
'; @@ -174,14 +215,48 @@ if ($cfg['download_page'] && !$password_challenged && !$button_download && !$but exit; } +header ('HTTP/1.0 200 OK'); header ('Content-Length: ' . $link['file_size']); -header ('Content-Type: ' . $link['mime_type']); if (!jirafeau_is_viewable ($link['mime_type']) || !$cfg['preview'] || $button_download) -{ header ('Content-Disposition: attachment; filename="' . $link['file_name'] . '"'); +else + header ('Content-Type: ' . $link['mime_type']); + +/* Read encrypted file. */ +if ($link['crypted']) +{ + /* Init module */ + $m = mcrypt_module_open('rijndael-256', '', 'ofb', ''); + /* Extract key and iv. */ + $md5_key = md5 ($crypt_key); + $iv = jirafeau_crypt_create_iv ($md5_key, mcrypt_enc_get_iv_size($m)); + /* Init module. */ + mcrypt_generic_init ($m, $md5_key, $iv); + /* Decrypt file. */ + $r = fopen (VAR_FILES . $p . $link['md5'], 'r'); + while (!feof ($r)) + { + $dec = mdecrypt_generic($m, fread ($r, 1024)); + print $dec; + ob_flush(); + } + fclose ($r); + /* Cleanup. */ + mcrypt_generic_deinit($m); + mcrypt_module_close($m); +} +/* Read file. */ +else +{ + $r = fopen (VAR_FILES . $p . $link['md5'], 'r'); + while (!feof ($r)) + { + print fread ($r, 1024); + ob_flush(); + } + fclose ($r); } -readfile (VAR_FILES . $p . $link['md5']); if ($link['onetime'] == 'O') jirafeau_delete_link ($link_name);