return $code;
}
+function is_ssl() {
+ if ( isset($_SERVER['HTTPS']) ) {
+ if ( 'on' == strtolower($_SERVER['HTTPS']) )
+ return true;
+ if ( '1' == $_SERVER['HTTPS'] )
+ return true;
+ } elseif ( isset($_SERVER['SERVER_PORT']) && ( '443' == $_SERVER['SERVER_PORT'] ) ) {
+ return true;
+ }
+ return false;
+}
+
function
jirafeau_human_size ($octets)
{
jirafeau_clean_rm_file ($md5)
{
$p = s2p ("$md5");
- if (file_exists (VAR_FILES . $p . $md5))
- unlink (VAR_FILES . $p . $md5);
- if (file_exists (VAR_FILES . $p . $md5 . '_count'))
- unlink (VAR_FILES . $p . $md5 . '_count');
+ $f = VAR_FILES . $p . $md5;
+ if (file_exists ($f) && is_file ($f))
+ unlink ($f);
+ if (file_exists ($f . '_count') && is_file ($f . '_count'))
+ unlink ($f . '_count');
$parse = VAR_FILES . $p;
$scan = array();
while (file_exists ($parse)
* @param $time the time of validity of the file
* @param $ip uploader's ip
* @param $crypt boolean asking to crypt or not
+ * @param $link_name_length size of the link name
* @returns an array containing some information
* 'error' => information on possible errors
* 'link' => the link name of the uploaded file
* 'delete_link' => the link code to delete file
*/
function
-jirafeau_upload ($file, $one_time_download, $key, $time, $ip, $crypt)
+jirafeau_upload ($file, $one_time_download, $key, $time, $ip, $crypt, $link_name_length)
{
if (empty ($file['tmp_name']) || !is_uploaded_file ($file['tmp_name']))
{
fclose ($handle);
/* Create delete code. */
- $delete_link_code = jirafeau_gen_random (8);
+ $delete_link_code = jirafeau_gen_random (5);
/* md5 password or empty. */
$password = '';
$password = md5 ($key);
/* create link file */
- $link_tmp_name = VAR_LINKS . $md5 . rand (0, 10000) . ' .tmp';
+ $link_tmp_name = VAR_LINKS . $md5 . rand (0, 10000) . '.tmp';
$handle = fopen ($link_tmp_name, 'w');
fwrite ($handle,
$name . NL. $mime_type . NL. $size . NL. $password . NL. $time .
NL . $md5. NL . ($one_time_download ? 'O' : 'R') . NL . date ('U') .
NL . $ip . NL. $delete_link_code . NL . ($crypted ? 'C' : 'O'));
fclose ($handle);
- $md5_link = base_16_to_64 (md5_file ($link_tmp_name));
+ $md5_link = substr(base_16_to_64 (md5_file ($link_tmp_name)), 0, $link_name_length);
$l = s2p ("$md5_link");
if (!@mkdir (VAR_LINKS . $l, 0755, true) ||
!rename ($link_tmp_name, VAR_LINKS . $l . $md5_link))
}
}
-function check_errors ()
+function check_errors ($cfg)
{
if (file_exists (JIRAFEAU_ROOT . 'install.php')
- && !file_exists (JIRAFEAU_ROOT . 'lib/config.local.php'))
+ && !($cfg['installation_done'] === true))
{
header('Location: install.php');
exit;
if (!is_writable (VAR_BLOCK))
add_error (t('The block directory is not writable!'), VAR_BLOCK);
-
- /* Check if the install.php script is still in the directory. */
- if (file_exists (JIRAFEAU_ROOT . 'install.php'))
- add_error (t('Installer script still present'),
- t('Please make sure to delete the installer script ' .
- '"install.php" before continuing.'));
}
/**
$out['link_code'] = trim ($c[9]);
if (trim ($c[10]) == 'C')
$out['crypted'] = true;
+ else
+ $out['crypted'] = false;
return $out;
}
* @param $ref asynchronous upload reference
* @param $code client code for this operation
* @param $crypt boolean asking to crypt or not
+ * @param $link_name_length link name lenght
* @return a string containing the download reference followed by a delete code or the string "Error"
*/
function
-jirafeau_async_end ($ref, $code, $crypt)
+jirafeau_async_end ($ref, $code, $crypt, $link_name_length)
{
/* Get async infos. */
$a = jirafeau_get_async_ref ($ref);
$crypt_key = '';
if ($crypt == true && extension_loaded('mcrypt'))
{
- $cypt_key = jirafeau_encrypt_file ($p, $p);
+ $crypt_key = jirafeau_encrypt_file ($p, $p);
if (strlen($crypt_key) > 0)
$crypted = true;
}
$md5 = md5_file ($p);
$size = filesize($p);
$np = s2p ($md5);
- $delete_link_code = jirafeau_gen_random (8);
+ $delete_link_code = jirafeau_gen_random (5);
/* File already exist ? */
if (!file_exists (VAR_FILES . $np))
fclose ($handle);
/* Create link. */
- $link_tmp_name = VAR_LINKS . $md5 . rand (0, 10000) . ' .tmp';
+ $link_tmp_name = VAR_LINKS . $md5 . rand (0, 10000) . '.tmp';
$handle = fopen ($link_tmp_name, 'w');
fwrite ($handle,
$a['file_name'] . NL . $a['mime_type'] . NL . $size . NL .
$a['key'] . NL . $a['time'] . NL . $md5 . NL . $a['onetime'] . NL .
date ('U') . NL . $a['ip'] . NL . $delete_link_code . NL . ($crypted ? 'C' : 'O'));
fclose ($handle);
- $md5_link = base_16_to_64 (md5_file ($link_tmp_name));
+ $md5_link = substr(base_16_to_64 (md5_file ($link_tmp_name)), 0, $link_name_length);
$l = s2p ("$md5_link");
if (!@mkdir (VAR_LINKS . $l, 0755, true) ||
!rename ($link_tmp_name, VAR_LINKS . $l . $md5_link))
return $count;
}
+function
+jirafeau_crypt_create_iv($base, $size)
+{
+ $iv = '';
+ while (strlen ($iv) < $size)
+ $iv = $iv . $base;
+ $iv = substr($iv, 0, $size);
+ return $iv;
+}
+
/**
* Crypt file and returns decrypt key.
* @param $fp_src file path to the file to crypt.
/* Prepare module. */
$m = mcrypt_module_open('rijndael-256', '', 'ofb', '');
- $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($m), MCRYPT_DEV_URANDOM);
/* Generate key. */
- $ks = mcrypt_enc_get_key_size($m);
- $key = substr(md5(jirafeau_gen_random(12)), 0, $ks);
+ $crypt_key = jirafeau_gen_random (10);
+ $md5_key = md5($crypt_key);
+ $iv = jirafeau_crypt_create_iv ($md5_key, mcrypt_enc_get_iv_size($m));
/* Init module. */
- mcrypt_generic_init($m, $key, $iv);
+ mcrypt_generic_init($m, $md5_key, $iv);
/* Crypt file. */
$r = fopen ($fp_src, 'r');
$w = fopen ($fp_dst, 'c');
/* Cleanup. */
mcrypt_generic_deinit($m);
mcrypt_module_close($m);
- return $key . "." . base64_encode($iv);
+ return $crypt_key;
}
/**
if ($fs === false || $fs == 0 || !extension_loaded('mcrypt'))
return false;
- /* Extract key and iv. */
- $ex = explode (".", $k);
- $key = $ex[0];
- $iv = base64_decode($ex[1]);
/* Init module */
$m = mcrypt_module_open('rijndael-256', '', 'ofb', '');
- mcrypt_generic_init($m, $key, $iv);
+ /* Extract key and iv. */
+ $crypt_key = $k;
+ $md5_key = md5($crypt_key);
+ $iv = jirafeau_crypt_create_iv ($md5_key, mcrypt_enc_get_iv_size($m));
/* Decrypt file. */
$r = fopen ($fp_src, 'r');
$w = fopen ($fp_dst, 'c');
return true;
}
-?>
+/**
+ * Check if Jirafeau is password protected for visitors.
+ * @return true if Jirafeau is password protected, false otherwise.
+ */
+function jirafeau_has_upload_password ($cfg)
+{
+ return count ($cfg['upload_password']) > 0;
+}
+
+/**
+ * Challenge password for a visitor.
+ * @param $password password to be challenged
+ * @return true if password is valid, false otherwise.
+ */
+function jirafeau_challenge_upload_password ($cfg, $password)
+{
+ if (!jirafeau_has_upload_password($cfg))
+ return false;
+ forEach ($cfg['upload_password'] as $p)
+ if ($password == $p)
+ return true;
+ error_log("password not found $password");
+ return false;
+}
+