GNU AFFERO GENERAL PUBLIC LICENSE
Version 3, 19 November 2007
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
+ along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
├── async : chunks of uploaded files
├── files : all files that has been successfully uploaded
└── links : all links pointing to files with meta-informations
-
# Introduction
-Welcome to the official Jirafeau project, an [Open-Source software](http://en.wikipedia.org/wiki/Open-source_software).
+Welcome to the official Jirafeau project, an [Open-Source software](https://en.wikipedia.org/wiki/Open-source_software).
Jirafeau is a web site permitting to upload a file in a simple way and give an unique link to it.
As it's original project, Jirafeau is made in the [KISS](http://en.wikipedia.org/wiki/KISS_principle) way (Keep It Simple, Stupid).
-Jirafeau project won't evolve to a file manager and will focus to keep a very few dependencies
+Jirafeau project won't evolve to a file manager and will focus to keep a very few dependencies.
# Screenshots
- [Upload 4](http://i.imgur.com/P2oS1MY.jpg)
# Installation
-- [Download](https://gitlab.com/mojo42/Jirafeau/repository/archive.zip) the last version of Jirafeau from Gitlab
+- [Download](https://gitlab.com/mojo42/Jirafeau/repository/archive.zip) the last version of Jirafeau from GitLab
- Upload files on your web server
- Don't forget to set owner of uploaded files if you need to
- Get your web browser and go to you install location (e.g. ```http://your-web-site.org/jirafeau/```) and follow instructions
You should also remove un-necessessary write access once the installation is done (ex: configuration file).
-An other obvious basic security is to let access users to the site by https.
+An other obvious basic security is to let access users to the site by HTTPS.
# Few notes about server side encryption
Of-course ! Translations are easy to make and no technical knowledge is required.
-Simply go to [Jirafeau's Weblate](https://hosted.weblate.org/projects/jirafeau/master/)
+Simply go to [Jirafeau's Weblate](https://hosted.weblate.org/projects/jirafeau/master/).
If you want to add a new language in the list, feel free to contact us or leave a comment in ticket #9.
-I would like to thanks to anonymous contributors on weblate :)
+We would like to thanks to anonymous contributors on weblate. :)
### How do I upgrade my Jirafeau ?
- It should probably come from your ```lib/config.local.php``` (configuration syntax may have changed). Just compare it with ```lib/config.original.php```
- Check owner/permissions of your files.
-Anyway you should off-course make a backup of your current installation before doing anything :)
+Anyway you should off-course make a backup of your current installation before doing anything. :)
### How can I limit upload access ?
There are two ways to limit upload access (but not download):
- you can set one or more passwords in order to access the upload interface, or/and
-- you can configure a list of authorized IP ([CIDR notation](http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing#CIDR_notation)) which are allowed to access to the upload page
+- you can configure a list of authorized IP ([CIDR notation](https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing#CIDR_notation)) which are allowed to access to the upload page
Check documentation of ```upload_password``` and ```upload_ip``` parameters in [lib/config.original.php](https://gitlab.com/mojo42/Jirafeau/blob/master/lib/config.original.php).
If you have some strange behavior with IE, you may configure [compatibility mode](http://feedback.dominknow.com/knowledgebase/articles/159097-internet-explorer-ie8-ie9-ie10-and-ie11-compat).
-Anyway I would recommand you to use another browser :)
+Anyway I would recommand you to use another web browser. :)
### I found a bug, what should I do ?
-Feel free to open a bug in the [gitlab's issues](https://gitlab.com/mojo42/Jirafeau/issues)
+Feel free to open a bug in the [GitLab's issues](https://gitlab.com/mojo42/Jirafeau/issues).
### How to set maximum file size ?
If your browser supports HTML5 file API, you can send files as big as you want.
For browsers who does not support HTML5 file API, the limitation come from PHP configuration.
-You have to set [post_max_size](http://php.net/manual/en/ini.core.php#ini.post-max-size) and [upload_max_filesize](http://php.net/manual/en/ini.core.php#ini.upload-max-filesize) in your php configuration.
+You have to set [post_max_size](https://php.net/manual/en/ini.core.php#ini.post-max-size) and [upload_max_filesize](https://php.net/manual/en/ini.core.php#ini.upload-max-filesize) in your php configuration.
If you don't want to allow unlimited upload size, you can still setup a maximal file size in Jirafeau's setting (see ```maximal_upload_size``` in your configuration)
### How can I edit an option ?
-Documentation of all default options are located in [lib/config.original.php](https://gitlab.com/mojo42/Jirafeau/blob/master/lib/config.original.php)
-If you want to change an option, just edit your ```lib/config.local.php```
+Documentation of all default options are located in [lib/config.original.php](https://gitlab.com/mojo42/Jirafeau/blob/master/lib/config.original.php).
+If you want to change an option, just edit your ```lib/config.local.php```.
### How can I access the admin interface ?
-Just go to ```/admin.php```
+Just go to ```/admin.php```.
### How can I use the scripting interface ?
### What can we expect in the future ?
-Check [issues](https://gitlab.com/mojo42/Jirafeau/issues) to check open bugs and incoming new stuff :)
+Check [issues](https://gitlab.com/mojo42/Jirafeau/issues) to check open bugs and incoming new stuff. :)
### What is the Jirafeau's license ?
-Jirafeau is licensed under [AGPLv3](https://gitlab.com/mojo42/Jirafeau/blob/master/COPYING)
+Jirafeau is licensed under [AGPLv3](https://gitlab.com/mojo42/Jirafeau/blob/master/COPYING).
### How do I modify the TOS (terms of use) ?
### How to contact someone from Jirafeau ?
-Feel free to create an issue if you found a bug, else you can send an email at j.jutteau A.T gmail .DOT. com
\ No newline at end of file
+Feel free to create an issue if you found a bug, else you can send an email at j.jutteau A.T gmail .DOT. com
require (JIRAFEAU_ROOT . 'lib/settings.php');
require (JIRAFEAU_ROOT . 'lib/functions.php');
require (JIRAFEAU_ROOT . 'lib/lang.php');
-require (JIRAFEAU_ROOT . 'lib/template/header.php');
check_errors ($cfg);
if (has_error ())
exit;
}
+require (JIRAFEAU_ROOT . 'lib/template/header.php');
+
/* Check if user is allowed to upload. */
if (!jirafeau_challenge_upload_ip ($cfg, get_ip_address($cfg)))
{
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
/*
* Jirafeau, your web file repository
* Copyright (C) 2008 Julien "axolotl" BERNARD <axolotl@magieeternelle.org>
* Copyright (C) 2015 Jerome Jutteau <j.jutteau@gmail.com>
+ * Copyright (C) 2015 Nicola Spanti (RyDroid) <dev@nicola-spanti.info>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
/**
* Transform a string in a path by seperating each letters by a '/'.
- * @return path finishing with a '/'
+ * @return path finishing with a '/'
*/
function
s2p ($s)
base_16_to_64 ($num)
{
$m = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_';
- $hex2bin = array ('0000', # 0
- '0001', # 1
- '0010', # 2
- '0011', # 3
- '0100', # 4
- '0101', # 5
- '0110', # 6
- '0111', # 7
- '1000', # 8
- '1001', # 9
- '1010', # a
- '1011', # b
- '1100', # c
- '1101', # d
- '1110', # e
- '1111'); # f
+ $hex2bin = array ('0000', # 0
+ '0001', # 1
+ '0010', # 2
+ '0011', # 3
+ '0100', # 4
+ '0101', # 5
+ '0110', # 6
+ '0111', # 7
+ '1000', # 8
+ '1001', # 9
+ '1010', # a
+ '1011', # b
+ '1100', # c
+ '1101', # d
+ '1110', # e
+ '1111'); # f
$o = '';
$b = '';
$i = 0;
return $code;
}
-function is_ssl() {
+function
+is_ssl() {
if ( isset($_SERVER['HTTPS']) ) {
- if ( 'on' == strtolower($_SERVER['HTTPS']) )
- return true;
- if ( '1' == $_SERVER['HTTPS'] )
+ if ( 'on' == strtolower($_SERVER['HTTPS']) ||
+ '1' == $_SERVER['HTTPS'] )
return true;
} elseif ( isset($_SERVER['SERVER_PORT']) && ( '443' == $_SERVER['SERVER_PORT'] ) ) {
return true;
* @param $value the value from php.ini
* @returns an integer for this value
*/
-function jirafeau_ini_to_bytes ($value)
+function
+jirafeau_ini_to_bytes ($value)
{
$modifier = substr ($value, -1);
$bytes = substr ($value, 0, -1);
$bytes *= 1024;
case 'K':
$bytes *= 1024;
- default:
- break;
}
return $bytes;
}
case UPLOAD_ERR_INI_SIZE:
case UPLOAD_ERR_FORM_SIZE:
return t('Your file exceeds the maximum authorized file size. ');
- break;
case UPLOAD_ERR_PARTIAL:
case UPLOAD_ERR_NO_FILE:
return
- t
- ('Your file was not uploaded correctly. You may succeed in retrying. ');
- break;
+ t('Your file was not uploaded correctly. You may succeed in retrying. ');
case UPLOAD_ERR_NO_TMP_DIR:
case UPLOAD_ERR_CANT_WRITE:
case UPLOAD_ERR_EXTENSION:
return t('Internal error. You may not succeed in retrying. ');
- break;
-
- default:
- break;
}
return t('Unknown error. ');
}
{
jirafeau_clean_rm_file ($md5_link);
}
- return (array(
+ return array(
'error' =>
array ('has_error' => true,
'why' => t('Internal error during file creation. ')),
'link' =>'',
- 'delete_link' => ''));
+ 'delete_link' => '');
}
- return (array ('error' => $noerr,
+ return array ( 'error' => $noerr,
'link' => $md5_link,
'delete_link' => $delete_link_code,
- 'crypt_key' => $crypt_key));
+ 'crypt_key' => $crypt_key);
}
/**
$out['upload_date'] = trim ($c[7]);
$out['ip'] = trim ($c[8]);
$out['link_code'] = trim ($c[9]);
- if (trim ($c[10]) == 'C')
- $out['crypted'] = true;
- else
- $out['crypted'] = false;
+ $out['crypted'] = trim ($c[10]) == 'C';
return $out;
}
* @param $key eventual password (or blank)
* @param $time time limit
* @param $ip ip address of the client
- * @return a string containing a temporary reference followed by a code or the string "Error"
+ * @return a string containing a temporary reference followed by a code or the string 'Error'
*/
function
jirafeau_async_init ($filename, $type, $one_time, $key, $time, $ip)
@mkdir ($p, 0755, true);
if (!file_exists ($p))
{
- echo "Error";
+ echo 'Error';
return;
}
* @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"
+ * @return a string containing a next code to use or the string "Error"
*/
function
jirafeau_async_push ($ref, $data, $code, $max_file_size)
|| $a['next_code'] != "$code"
|| empty ($data['tmp_name'])
|| !is_uploaded_file ($data['tmp_name']))
- return "Error";
+ return 'Error';
$p = s2p ($ref);
filesize ($r_path) + filesize ($w_path) > $max_file_size * 1024 * 1024)
{
jirafeau_async_delete ($ref);
- return "Error";
+ return 'Error';
}
/* Concatenate data. */
fclose ($r);
fclose ($w);
jirafeau_async_delete ($ref);
- return "Error";
+ return 'Error';
}
}
fclose ($r);
* @param $code client code for this operation
* @param $crypt boolean asking to crypt or not
* @param $link_name_length link name length
- * @return a string containing the download reference followed by a delete code or the string "Error"
+ * @return a string containing the download reference followed by a delete code or the string 'Error'
*/
function
jirafeau_async_end ($ref, $code, $crypt, $link_name_length)
/* Generate link infos. */
$p = VAR_ASYNC . s2p ($ref) . $ref . "_data";
if (!file_exists($p))
- return "Error";
+ return 'Error';
$crypted = false;
$crypt_key = '';
jirafeau_decrypt_file ($fp_src, $fp_dst, $k)
{
$fs = filesize ($fp_src);
- if ($fs === false || $fs == 0 || !(extension_loaded('mcrypt') == true))
+ if ($fs === false || $fs == 0 || extension_loaded('mcrypt') == false)
return false;
/* Init module */
* Check if Jirafeau is password protected for visitors.
* @return true if Jirafeau is password protected, false otherwise.
*/
-function jirafeau_has_upload_password ($cfg)
+function
+jirafeau_has_upload_password ($cfg)
{
return count ($cfg['upload_password']) > 0;
}
* @param $password password to be challenged
* @return true if password is valid, false otherwise.
*/
-function jirafeau_challenge_upload_password ($cfg, $password)
+function
+jirafeau_challenge_upload_password ($cfg, $password)
{
if (!jirafeau_has_upload_password($cfg))
return false;
* @param $ip IP to be challenged
* @return true if IP is authorized, false otherwise.
*/
-function jirafeau_challenge_upload_ip ($cfg, $ip)
+function
+jirafeau_challenge_upload_ip ($cfg, $ip)
{
if (count ($cfg['upload_ip']) == 0)
return true;
}
/** Tell if we have some HTTP headers generated by a proxy */
-function has_http_forwarded()
+function
+has_http_forwarded()
{
- if (!empty ($_SERVER['HTTP_X_FORWARDED_FOR']))
- return true;
- if (!empty ($_SERVER['http_X_forwarded_for']))
- return true;
- return false;
+ return
+ !empty ($_SERVER['HTTP_X_FORWARDED_FOR']) ||
+ !empty ($_SERVER['http_X_forwarded_for']);
}
/**
* Generate IP list from HTTP headers generated by a proxy
* @return array of IP strings
*/
-function get_ip_list_http_forwarded()
+function
+get_ip_list_http_forwarded()
{
$ip_list = array();
if (!empty ($_SERVER['HTTP_X_FORWARDED_FOR']))
* or from HTTP_X_FORWARDED_FOR if behind a proxy
* @returns the client ip address
*/
-function get_ip_address($cfg) {
+function
+get_ip_address($cfg)
+{
$remote = $_SERVER['REMOTE_ADDR'];
if (count ($cfg['proxy_ip']) == 0 || !has_http_forwarded ())
return $remote;
* @param $ip client's IP
* @return a string containing the edit code of the alias or the string "Error"
*/
-function jirafeau_alias_create ($alias, $destination, $password, $ip)
+function
+jirafeau_alias_create ($alias, $destination, $password, $ip)
{
/* Check that alias and password are long enough. */
if (strlen ($alias) < 8 ||
strlen ($alias) > 32 ||
strlen ($password) < 8 ||
strlen ($password) > 32)
- return "Error";
+ return 'Error';
/* Check that destination exists. */
$l = jirafeau_get_link ($destination);
if (!count ($l))
- return "Error";
+ return 'Error';
/* Check that alias does not already exists. */
$alias = md5 ($alias);
$p = VAR_ALIAS . s2p ($alias);
if (file_exists ($p))
- return "Error";
+ return 'Error';
/* Create alias folder. */
@mkdir ($p, 0755, true);
if (!file_exists ($p))
- return "Error";
+ return 'Error';
/* Generate password. */
$md5_password = md5 ($password);
$destination . NL);
fclose ($handle);
- return "Ok";
+ return 'Ok';
}
/** Update an alias.
* @param $ip client's IP
* @return "Ok" or "Error" string
*/
-function jirafeau_alias_update ($alias, $destination, $password,
- $new_password, $ip)
+function
+jirafeau_alias_update ($alias, $destination, $password,
+ $new_password, $ip)
{
$alias = md5 ($alias);
/* Check that alias exits. */
$a = jirafeau_get_alias ($alias);
if (!count ($a))
- return "Error";
+ return 'Error';
/* Check that destination exists. */
$l = jirafeau_get_link ($a["destination"]);
if (!count ($l))
- return "Error";
+ return 'Error';
/* Check password. */
if ($a["md5_password"] != md5 ($password))
- return "Error";
+ return 'Error';
- $p = $a["md5_password"];
+ $p = $a['md5_password'];
if (strlen ($new_password) >= 8 &&
strlen ($new_password) <= 32)
$p = md5 ($new_password);
else if (strlen ($new_password) > 0)
- return "Error";
+ return 'Error';
/* Rewrite informations. */
$p = VAR_ALIAS . s2p ($alias) . $alias;
date ('U') . NL .
$destination . NL);
fclose ($handle);
- return "Ok";
+ return 'Ok';
}
/** Get an alias.
* @param $alias alias to get
* @return alias destination or "Error" string
*/
-function jirafeau_alias_get ($alias)
+function
+jirafeau_alias_get ($alias)
{
$alias = md5 ($alias);
/* Check that alias exits. */
$a = jirafeau_get_alias ($alias);
if (!count ($a))
- return "Error";
+ return 'Error';
- return $a["destination"];
+ return $a['destination'];
}
-function jirafeau_clean_rm_alias ($alias)
+function
+jirafeau_clean_rm_alias ($alias)
{
$p = s2p ("$alias");
if (file_exists (VAR_ALIAS . $p . $alias))
* @param $password password to protect alias
* @return "Ok" or "Error" string
*/
-function jirafeau_alias_delete ($alias, $password)
+function
+jirafeau_alias_delete ($alias, $password)
{
$alias = md5 ($alias);
/* Check that alias exits. */
/* Check password. */
if ($a["md5_password"] != md5 ($password))
- return "Error";
+ return 'Error';
jirafeau_clean_rm_alias ($alias);
- return "Ok";
+ return 'Ok';
}
/*
* Jirafeau, your web file repository
* Copyright (C) 2015 Jerome Jutteau <j.jutteau@gmail.com>
+ * Copyright (C) 2015 Nicola Spanti (RyDroid) <dev@nicola-spanti.info>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
function show_link (url, reference, delete_code, crypt_key, date)
function upload_progress (e)
{
- if (!e.lengthComputable)
+ if (e == undefined || e == null || !e.lengthComputable)
return;
// Init time estimation if needed
document.getElementById('send').style.display = '';
}
+function add_time_string_to_date(d, time_string)
+{
+ if(typeof(d) != 'object' || !(d instanceof Date))
+ {
+ return false;
+ }
+
+ if (time == 'minute')
+ {
+ d.setSeconds (d.getSeconds() + 60);
+ return true;
+ }
+ if (time == 'hour')
+ {
+ d.setSeconds (d.getSeconds() + 3600);
+ return true;
+ }
+ if (time == 'day')
+ {
+ d.setSeconds (d.getSeconds() + 86400);
+ return true;
+ }
+ if (time == 'week')
+ {
+ d.setSeconds (d.getSeconds() + 604800);
+ return true;
+ }
+ if (time == 'month')
+ {
+ d.setSeconds (d.getSeconds() + 2419200);
+ return true;
+ }
+ if (time == 'year')
+ {
+ d.setSeconds (d.getSeconds() + 29030400);
+ return true;
+ }
+ return false;
+}
+
function classic_upload (url, file, time, password, one_time, upload_password)
{
// Delay time estimation init as we can't have file size
if (time != 'none')
{
var d = new Date();
- if (time == 'minute')
- d.setSeconds (d.getSeconds() + 60);
- else if (time == 'hour')
- d.setSeconds (d.getSeconds() + 3600);
- else if (time == 'day')
- d.setSeconds (d.getSeconds() + 86400);
- else if (time == 'week')
- d.setSeconds (d.getSeconds() + 604800);
- else if (time == 'month')
- d.setSeconds (d.getSeconds() + 2419200);
- else if (time == 'year')
- d.setSeconds (d.getSeconds() + 29030400);
- else
+ if(!add_time_string_to_date(d))
+ {
return;
+ }
show_link (url, res[0], res[1], res[2], d.toString());
}
else
function check_html5_file_api ()
{
- if (window.File && window.FileReader && window.FileList && window.Blob)
- return true;
- return false;
+ return window.File && window.FileReader && window.FileList && window.Blob;
}
var async_global_transfered = 0;
function async_upload_progress (e)
{
- if (!e.lengthComputable && async_global_file.size != 0)
+ if (e == undefined || e == null || !e.lengthComputable && async_global_file.size != 0)
return;
// Compute percentage
if (async_global_time != 'none')
{
var d = new Date();
- if (async_global_time == 'minute')
- d.setSeconds (d.getSeconds() + 60);
- else if (async_global_time == 'hour')
- d.setSeconds (d.getSeconds() + 3600);
- else if (async_global_time == 'day')
- d.setSeconds (d.getSeconds() + 86400);
- else if (async_global_time == 'week')
- d.setSeconds (d.getSeconds() + 604800);
- else if (async_global_time == 'month')
- d.setSeconds (d.getSeconds() + 2419200);
- else if (async_global_time == 'year')
- d.setSeconds (d.getSeconds() + 29030400);
- else
+ if(!add_time_string_to_date(d))
return;
show_link (async_global_url, res[0], res[1], res[2], d.toString());
}
}
if (res == 0)
return '';
- else
- return res.toString() + ' ' + scale;
+ return res.toString() + ' ' + scale;
}
function milliseconds_to_time_string (milliseconds)
* GNU Affero General Public License for more details.\r
*\r
* You should have received a copy of the GNU Affero General Public License\r
- * along with this program. If not, see <http://www.gnu.org/licenses/>.\r
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.\r
*/\r
\r
- global $languages_list;\r
- $languages_list = array ('auto' => 'Automatic',\r
- 'de' => 'Deutsch',\r
- 'en' => 'English',\r
- 'fi' => 'Suomi',\r
- 'fr' => 'Français',\r
- 'it' => 'Italiano',\r
- 'nl' => 'Nederlands',\r
- 'ro' => 'Limba română',\r
- 'sk' => 'Slovenčina');\r
+global $languages_list;\r
+$languages_list = array ('auto' => 'Automatic',\r
+ 'de' => 'Deutsch',\r
+ 'en' => 'English',\r
+ 'fi' => 'Suomi',\r
+ 'fr' => 'Français',\r
+ 'it' => 'Italiano',\r
+ 'nl' => 'Nederlands',\r
+ 'ro' => 'Limba română',\r
+ 'sk' => 'Slovenčina');\r
\r
/* Translation */\r
function t ($text)\r
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
+
/* Jirafeau constants */
define ('JIRAFEAU_PACKAGE', 'Jirafeau');
define ('JIRAFEAU_VERSION', '1.0');
<div id="copyright">
<p>
<br />
- <a href="https://www.gnu.org/licenses/agpl.html">agplv3</a> |
+ <a href="https://www.gnu.org/licenses/agpl.html"><abbr title="Affero General Public License">AGPL</abbr>v3</a> |
<a href="https://gitlab.com/mojo42/Jirafeau"><?php echo t('Jirafeau Project') ?></a> |
<a href="<?php echo rtrim($cfg['web_root'], '/') . '/tos.php'; ?>"><?php echo t('Term Of Service') ?></a>
</p>
<?php
-header("Vary: Accept");
+header('Vary: Accept');
$content_type = 'text/html; charset=utf-8';
?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
+<!DOCTYPE html>
+<html>
<head>
<title><?php echo t('Jirafeau, your web file repository'); ?></title>
<meta http-equiv="Content-Type" content="<?php echo $content_type; ?>" />
<link href="<?php echo $web_root . 'media/' . $style . '/style.css.php'; ?>" rel="stylesheet" type="text/css" />
</head>
<body>
-<script language="Javascript" src="lib/functions_v7.js"></script>
+<script type="text/javascript" language="Javascript" src="lib/functions_v7.js"></script>
<div id="content">
<h1><a href="<?php echo $web_root; ?>"><?php echo t('Jirafeau, your web file repository'); ?></a></h1>
<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 15.0.0, SVG Export Plug-In -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
<!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
]>
<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 15.0.0, SVG Export Plug-In -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
<!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
]>
<svg version="1.1"
- xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
x="0px" y="0px" width="260px" height="189px" viewBox="-42.912 -27.073 260 189"
overflow="visible" enable-background="new -42.912 -27.073 260 189" xml:space="preserve">
-<defs>
-</defs>
<g>
<g>
<path fill="#BCAAA4" d="M83.244,58.862c0,8.491,0,16.981,0,25.472c0,4.514,7,4.514,7,0c0-8.491,0-16.981,0-25.472