Merge remote-tracking branch 'origin/master'

This commit is contained in:
Weblate 2017-02-23 18:34:39 +01:00
commit 9a9c9a8bf8
24 changed files with 2696 additions and 2648 deletions

View File

@ -4,6 +4,8 @@ Hi,
this document is made for newcomers in Jirafeau who are digging into the code.
If you have further questions, then just ask for help 🤓.
## General principle
Jirafeau is made in the [KISS](http://en.wikipedia.org/wiki/KISS_principle) way (Keep It Simple, Stupid).
@ -21,26 +23,32 @@ view only to show the most importants files and their role.
```
.
├── admin.php : adminitration interface, also permits to download files
├── admin.php : administration interface to manage links and files
├── f.php : permits to download files or show the download page
├── index.php : only provide a html/javascript client to interact with API
├── script.php : API interface and it's html documentation
├── index.php : provides a web interface to interact with API
├── script.php : API interface (all file actions happen here - upload, deletion, etc)
├── install.php : installation script
├── tos.php : terms of use the user may edit
├── tos.php : "Terms of Service" page
├── lib
│   ├── config.local.php : user's parameters
│   ├── config.original.php : default parameters with their documentation
│   ├── functions_*.js : javascript functions for html/javascript client
│   ├── functions.php : core functions and tools of jirafeau
│   ├── locales : langage folder, contain all langage files
│   ├── config.original.php : default parameters
│   ├── config.local.php : the users parameters (auto generated, not versionized)
│   ├── functions_*.js : JavaScript functions for index.php (AJAX etc)
│   ├── functions.php : core functions and tools of Jirafeau
│   ├── tos.original.txt : default text show on the ToS page
│   ├── tos.local.txt : a users alternative text show on the ToS page (not versionized)
│   ├── settings.php : core settings of Jirafeau, includes the configuration params automatically
│   ├── locales : language folder, contains all language files
│   └── template
│   ├── footer.php
│   └── header.php
│   ├── footer.php : footer with links to source and ToS for all HTML views
│   └── header.php : header with logo and title for all HTML views
├── media : folder containing all skins
└── var-xxxxxxx : folder containing all data
├── async : chunks of uploaded files
├── files : all files that has been successfully uploaded
└── links : all links pointing to files with meta-informations
└── var-xxxxxxx : the users folder containing all data (auto generated, not versionized)
├── async : chunks of uploaded files (not succressfull yet)
├── files : all files that have been uploaded successfully
├── [hashed file name] : the original file
├── [hashed file name]_count : count many links to this file exist
└── links : all links, including meta-informations, pointing to files
├── [link] : the link file, includes which original file should be used and some meta data like creation date, expiration time
```
## Translations
@ -49,14 +57,41 @@ Translation may be add via [Jirafeau's Weblate](https://hosted.weblate.org/proje
## Coding style
- PHP function keywords are alone on a line
- Braces "{" must be put in a new line
- This project follows the [PSR-2](http://www.php-fig.org/psr/psr-2/) Coding Style
- Files must be in UTF-8 without BOM and use Unix Line Endings (LF)
The whole project is not clean about that yet, feel free to fix :)
## Branches
* ```master``` = latest release, e.g. 2.0.1
* ```next-release``` = development branch - all new features are merged into this branch until the next version is released. So use this branch as base while developing new features or bugfixes.
* ```test``` = sandbox branch to test new features or merge requests, or run integration tests. The content of this branch may change at any time.
## Merge Requests
Please create one branch for each feature and send one merge request for each branch.
Dont squash several changes or commits into one merge request as this is hard to review.
Please use ```next-release``` as base branch and send your merge request to this branch (not ```master```).
Quick walktrough:
* Create ticket for new feature
* Fork the original repository, clone the own repository, add the original repository as upstream
* Checkout »next-release« branch ```git checkout next-release```
* Create a new branch on top of that one, e.g. »some-feature« ```git checkout -b some-feature```
* Commit changes → push → send merge request ```git add -A; git commit; git push``` MR via GitLab (link shown in console)
* Feature is reviewed
* MR accepted: Reviewer checks out »next-release« branch and cherry-picks the commit ```git checkout next-release; git cherry-pick be4369641; git push```
* MR declined: Reviewer add some notes, Developer rebases his branch, adds neccessary changes, force pushes the branch, ask a reviewer to review the changes in the merge request ticket (as Gitlab recognizes them automatically) ```git checkout some-feature; git rebase upstream/next-release``` …[add changes]… ```git add -A, git commit --amend; git push -f```
## New Releases
* Compare the [»next-release« branch to »master«](https://gitlab.com/mojo42/Jirafeau/compare/master...next-release)
* Add a list of noteworthy features and bugfixes to the README
* Change the version, using [semantic versioning](http://semver.org/), in ```settings.php```
* Merge »next-release« branch to »master«
* Update the demo page
* Tag the »master« with the new version
* Push branch and tag
* Dance a little

118
README.md
View File

@ -8,6 +8,11 @@ A demonstration of the latest version is available on [jirafeau.net](http://jira
![Screenshot1](http://i.imgur.com/TPjh48P.png)
Latest CI Status:
Master [![Build Status Master](https://gitlab.com/mojo42/Jirafeau/badges/master/build.svg)](https://gitlab.com/mojo42/Jirafeau/commits/master)
Next Release [![Build Status Next Release](https://gitlab.com/mojo42/Jirafeau/badges/test/build.svg)](https://gitlab.com/mojo42/Jirafeau/commits/master)
[All Branch Builds](https://gitlab.com/mojo42/Jirafeau/pipelines?scope=branches)
## Main features
- One upload → One download link & one delete link
@ -50,39 +55,55 @@ Jirafeau project won't evolve to a file manager and will focus to keep a very fe
## Installation
- [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
- Some options are not configured from the minimal installation wizard, you may take a look at option documentation in ```lib/config.original.php``` and customize your ```lib/config.local.php```
System requirements:
- PHP >= 5.6
- Optional, but recommended: Git >= 2.7
- No database required, no mail required
Note that ```lib/config.local.php``` is auto-generated during the installation.
Installation steps:
- Clone the [repository](https://gitlab.com/mojo42/Jirafeau/) or download the latest ([release](https://gitlab.com/mojo42/Jirafeau/tags) from GitLab onto your webserver
- Set owner & group according to your webserver
- A) Setup with the installation wizard (web):
- Open your browser and go to your installed location, eg. ```https://example.com/jirafeau/```
- The script will redirect to you to a minimal installation wizard to set up all required options
- All optional parameters may be set in ```lib/config.local.php```, take a look at ```lib/config.original.php``` to see all default values
- B) Setup without the installation wizard (cli):
- Just copy ```config.original.php``` to ```config.local.php``` and customize it
If you don't want to go through the installation wizard, you can just copy ```config.original.php``` to ```config.local.php``` and customize it.
## Upgrade
## Update
### General procedure for all versions
### General
1. Backup you Jirafeau installation
1. Backup your Jirafeau installation!
2. Block access to Jirafeau
3. Checkout new version using the [tagged release](https://gitlab.com/mojo42/Jirafeau/tags)
3. Checkout the new version with Git using the [tagged release](https://gitlab.com/mojo42/Jirafeau/tags)
* If you have installed Jirafeau just by uploading files on your server, you can download the desired version, overwrite/remove all files and chown/chmod files if needed. Keep a backup of your local configuration file tough.
4. With you browser, go to your Jirafeau root page
5. Follow installation wizard, it should propose you the same data folder
7. Go in you lib/config.local.php and lib/config.original.php to check new options
5. Follow the installation wizard, it should propose you the same data folder or even update automatically
7. Check your ```/lib/config.local.php``` and compare it with the ```/lib/config.original.php``` to see if new configuration items are available
### From version 1.0 to 1.1
1. Add a rewrite rule in your web server configuration to rename file.php to f.php to make old url work again
2. Eventually change skin in »lib/config.local.php« to 'courgette'
1. The download URL changed
* Add a rewrite rule in your web server configuration to rename ```file.php``` to ```f.php``` to make older, still existing links work again
1. The default skin changed
* Optionally change the skin in ```lib/config.local.php``` to »courgette«
### From version 1.1 to 1.2.0
### From version 1.2.0 to 2.0.0
Nothing particular
1. The "Terms of Service" text file changed
* To reuse previous changes to the ToS, move the old ```/tos_text.php``` file to ```/lib/tos.local.txt``` and remove all HTML und PHP Tags, leaving a regular text file
### from version 1.2.0 to 2.0.0.
### From version 2.0.0 to 3.0.0
1. ToS text file changed → move file from "/tos_text.php" to "/lib/tos.local.txt" and remove all HTML and PHP Tags, leaving a regular text file
1. No special change to upgrade to 3.0.0
### Troubleshooting
If you have some troubles, consider the following cases
- Check your ```/lib/config.local.php``` file and compare it with ```/lib/config.original.php```, the configuration syntax or a parameter may have changed
- Check owner & permissions of your files
## Security
@ -126,12 +147,12 @@ In a next step, encryption will be made by the client (in javascript), see issue
## License
GNU Affero General Public License version 3 (AGPLv3).
GNU Affero General Public License v3 (AGPL-3.0).
The GNU Affero General Public License can be found at https://www.gnu.org/licenses/agpl.html.
Please note: If you decide do make adaptions to the source code and run a service with these changes incorporated,
you are required to provide a link to the source code of your version in order to obey the AGPLv3 license.
you are required to provide a link to the source code of your version in order to obey the AGPL-3.0 license.
To do so please add a link to the source (eg. a public Git repository or a download link) to the Terms of Service page.
Take a look at the FAQ to find out about how to change the ToS.
@ -161,17 +182,7 @@ We would like to thank all anonymous contributors on weblate. :)
### How do I upgrade my Jirafeau?
If you have installed Jirafeau using git, it's pretty simple: just make a git pull and chown/chmod files who have the owner changed.
If you have installed Jirafeau just by uploading files on your server, you can take the [last version](https://gitlab.com/mojo42/Jirafeau/repository/archive.zip), overwrite files and chown/chmod files if needed.
After upgrading, you can compare your ```lib/config.local.php``` and ```lib/config.original.php``` to see if new configuration items are available.
If you have some troubles:
- 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. :)
See upgrade instructions above.
### How can I limit upload access?
@ -317,21 +328,36 @@ The very first version of Jirafeau after the fork of Jyraphe.
## Version 1.2.0
- Change versioning semantic
- Link on API page to generate bash script
- More informative error codes for API
- Security Fix: Prevent authentication bypass for admin interface
- CLI script to remove expired files automatically with a cronjob
- SHA-256 hash the admin password
- New theme "elegantish"
- Fix for JavaScript MIME-Type, prevents blocking the resource on some servers
- Show download link for a file in admin interface
- Default time for expiration (set to 'month' by default)
- New expiration time: 'quarter'
- A lof of translation contributions
- Fix javascript MIME type
- Show download in admin panel
- Default expiration date set to 'month'
- New expiration date: 'quarter'
- Small other fixes
- Code cleanups
## Version 2.0.0
- ToS refactoring (see update notes !)
- You can now set a title to Jirafeau in options
- A lot of documentation improvements
- Code refactoring & bugfixes
- Add version to bash script
- A lot of documentation improvements
- Code refactoring & bug fixes
- Various documentation improvements
- Simplify automatic generation of local configuration file
- Set a custom title
- Bash Script: Enhanced help, show version, return link to web view as well
- »Terms of Service« refactored - Enable admin to overwrite the ToS, without changing existing source code → breaking, see upgrade notes
## Version 3.0.0
- A lot of code cleaning
- Replace all domain depended links
- Better documentation
- Convert UTC dates to clients timezone
- Show readable date format
- Multiple UI glitch fixes
- Switch to PSR-2
- Catch errors in upload form
- Can now use IP _or_ password authentification
-

193
admin.php
View File

@ -17,45 +17,38 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
define ('JIRAFEAU_ROOT', dirname (__FILE__) . '/');
define('JIRAFEAU_ROOT', dirname(__FILE__) . '/');
require (JIRAFEAU_ROOT . 'lib/settings.php');
require (JIRAFEAU_ROOT . 'lib/functions.php');
require (JIRAFEAU_ROOT . 'lib/lang.php');
require(JIRAFEAU_ROOT . 'lib/settings.php');
require(JIRAFEAU_ROOT . 'lib/functions.php');
require(JIRAFEAU_ROOT . 'lib/lang.php');
/* Check if installation is OK. */
if (file_exists (JIRAFEAU_ROOT . 'install.php')
&& !file_exists (JIRAFEAU_ROOT . 'lib/config.local.php'))
{
if (file_exists(JIRAFEAU_ROOT . 'install.php')
&& !file_exists(JIRAFEAU_ROOT . 'lib/config.local.php')) {
header('Location: install.php');
exit;
}
/* If called from CLI, no password or graphical interface */
if (php_sapi_name() == "cli") {
if ((count($argv)>1) && $argv[1]=="clean_expired") {
$total = jirafeau_admin_clean ();
echo "$total expired files deleted.";
}
elseif ((count($argv)>1) && $argv[1]=="clean_async") {
$total = jirafeau_admin_clean_async ();
echo "$total old unfinished transfers deleted.";
}
else
{
die("No command found. Should be admin.php <clean_expired|clean_async>.");
}
}
else
{
/* Disable admin interface if we have a empty admin password. */
if (empty($cfg['admin_password']) && empty($cfg['admin_http_auth_user']))
{
require (JIRAFEAU_ROOT . 'lib/template/header.php');
if ((count($argv)>1) && $argv[1]=="clean_expired") {
$total = jirafeau_admin_clean();
echo "$total expired files deleted.";
} elseif ((count($argv)>1) && $argv[1]=="clean_async") {
$total = jirafeau_admin_clean_async();
echo "$total old unfinished transfers deleted.";
} else {
die("No command found. Should be admin.php <clean_expired|clean_async>.");
}
} else {
/* Disable admin interface if we have a empty admin password. */
if (empty($cfg['admin_password']) && empty($cfg['admin_http_auth_user'])) {
require(JIRAFEAU_ROOT . 'lib/template/header.php');
echo '<div class="error"><p>'.
t('Sorry, the admin interface is not enabled.') .
'</p></div>';
require (JIRAFEAU_ROOT.'lib/template/footer.php');
require(JIRAFEAU_ROOT.'lib/template/footer.php');
exit;
}
@ -63,36 +56,34 @@ else
session_start();
/* Unlog if asked. */
if (isset ($_POST['action']) && (strcmp ($_POST['action'], 'logout') == 0))
if (isset($_POST['action']) && (strcmp($_POST['action'], 'logout') == 0)) {
$_SESSION['admin_auth'] = false;
}
/* Check classic admin password authentification. */
if (isset ($_POST['admin_password']) && empty($cfg['admin_http_auth_user']))
{
if (isset($_POST['admin_password']) && empty($cfg['admin_http_auth_user'])) {
if ($cfg['admin_password'] === $_POST['admin_password'] ||
$cfg['admin_password'] === hash('sha256', $_POST['admin_password']))
$cfg['admin_password'] === hash('sha256', $_POST['admin_password'])) {
$_SESSION['admin_auth'] = true;
else
{
} else {
$_SESSION['admin_auth'] = false;
require (JIRAFEAU_ROOT . 'lib/template/header.php');
require(JIRAFEAU_ROOT . 'lib/template/header.php');
echo '<div class="error"><p>'.
t('Wrong password.') . '</p></div>';
require (JIRAFEAU_ROOT.'lib/template/footer.php');
require(JIRAFEAU_ROOT.'lib/template/footer.php');
exit;
}
}
/* Ask for classic admin password authentification. */
elseif ((!isset ($_SESSION['admin_auth']) || $_SESSION['admin_auth'] != true)
&& empty($cfg['admin_http_auth_user']))
{
require (JIRAFEAU_ROOT . 'lib/template/header.php'); ?>
<form action = "<?php echo basename(__FILE__); ?>" method = "post">
elseif ((!isset($_SESSION['admin_auth']) || $_SESSION['admin_auth'] != true)
&& empty($cfg['admin_http_auth_user'])) {
require(JIRAFEAU_ROOT . 'lib/template/header.php'); ?>
<form method="post">
<fieldset>
<table>
<tr>
<td class = "label"><label for = "enter_password">
<?php echo t('Administration password') . ':';?></label>
<?php echo t('Administration password') . ':'; ?></label>
</td>
<td class = "field"><input type = "password"
name = "admin_password" id = "admin_password"
@ -110,27 +101,26 @@ else
</fieldset>
</form>
<?php
require (JIRAFEAU_ROOT.'lib/template/footer.php');
require(JIRAFEAU_ROOT.'lib/template/footer.php');
exit;
}
/* Check authenticated user if HTTP authentification is enable. */
elseif ((!isset ($_SESSION['admin_auth']) || $_SESSION['admin_auth'] != true)
&& !empty($cfg['admin_http_auth_user']))
{
if ($cfg['admin_http_auth_user'] == $_SERVER['PHP_AUTH_USER'])
elseif ((!isset($_SESSION['admin_auth']) || $_SESSION['admin_auth'] != true)
&& !empty($cfg['admin_http_auth_user'])) {
if ($cfg['admin_http_auth_user'] == $_SERVER['PHP_AUTH_USER']) {
$_SESSION['admin_auth'] = true;
}
}
/* Be sure that no one can access further without admin_auth. */
if (!isset ($_SESSION['admin_auth']) || $_SESSION['admin_auth'] != true)
{
$_SESSION['admin_auth'] = false;
require (JIRAFEAU_ROOT . 'lib/template/header.php');
echo '<div class="error"><p>'.
if (!isset($_SESSION['admin_auth']) || $_SESSION['admin_auth'] != true) {
$_SESSION['admin_auth'] = false;
require(JIRAFEAU_ROOT . 'lib/template/header.php');
echo '<div class="error"><p>'.
t('Sorry, you are not authenticated on admin interface.') .
'</p></div>';
require (JIRAFEAU_ROOT.'lib/template/footer.php');
exit;
require(JIRAFEAU_ROOT.'lib/template/footer.php');
exit;
}
/* Operations may take a long time.
@ -141,16 +131,14 @@ else
@error_reporting(0);
/* Show admin interface if not downloading a file. */
if (!(isset ($_POST['action']) && strcmp ($_POST['action'], 'download') == 0))
{
require (JIRAFEAU_ROOT . 'lib/template/header.php');
?><h2><?php echo t('Admin interface'); ?></h2><?php
if (!(isset($_POST['action']) && strcmp($_POST['action'], 'download') == 0)) {
require(JIRAFEAU_ROOT . 'lib/template/header.php'); ?><h2><?php echo t('Admin interface'); ?></h2><?php
?><h2>(version <?php echo JIRAFEAU_VERSION ?>)</h2><?php
?><div id = "admin">
<fieldset><legend><?php echo t('Actions');?></legend>
<fieldset><legend><?php echo t('Actions'); ?></legend>
<table>
<form action = "<?php echo basename(__FILE__); ?>" method = "post">
<form method="post">
<tr>
<input type = "hidden" name = "action" value = "clean"/>
<td class = "info">
@ -162,7 +150,7 @@ else
</td>
</tr>
</form>
<form action = "<?php echo basename(__FILE__); ?>" method = "post">
<form method="post">
<tr>
<input type = "hidden" name = "action" value = "clean_async"/>
<td class = "info">
@ -174,7 +162,7 @@ else
</td>
</tr>
</form>
<form action = "<?php echo basename(__FILE__); ?>" method = "post">
<form method="post">
<tr>
<input type = "hidden" name = "action" value = "list"/>
<td class = "info">
@ -186,7 +174,7 @@ else
</td>
</tr>
</form>
<form action = "<?php echo basename(__FILE__); ?>" method = "post">
<form method="post">
<tr>
<input type = "hidden" name = "action" value = "search_by_name"/>
<td class = "info">
@ -200,7 +188,7 @@ else
</td>
</tr>
</form>
<form action = "<?php echo basename(__FILE__); ?>" method = "post">
<form method="post">
<tr>
<input type = "hidden" name = "action" value = "search_by_file_hash"/>
<td class = "info">
@ -214,7 +202,7 @@ else
</td>
</tr>
</form>
<form action = "<?php echo basename(__FILE__); ?>" method = "post">
<form method="post">
<tr>
<input type = "hidden" name = "action" value = "search_link"/>
<td class = "info">
@ -229,76 +217,61 @@ else
</tr>
</form>
</table>
<form action = "<?php echo basename(__FILE__); ?>" method = "post">
<form method="post">
<input type = "hidden" name = "action" value = "logout" />
<input type = "submit" value = "<?php echo t('Logout'); ?>" />
</form>
</fieldset></div><?php
}
/* Check for actions */
if (isset ($_POST['action']))
{
if (strcmp ($_POST['action'], 'clean') == 0)
{
$total = jirafeau_admin_clean ();
if (isset($_POST['action'])) {
if (strcmp($_POST['action'], 'clean') == 0) {
$total = jirafeau_admin_clean();
echo '<div class="message">' . NL;
echo '<p>';
echo t('Number of cleaned files') . ' : ' . $total;
echo '</p></div>';
}
elseif (strcmp ($_POST['action'], 'clean_async') == 0)
{
$total = jirafeau_admin_clean_async ();
} elseif (strcmp($_POST['action'], 'clean_async') == 0) {
$total = jirafeau_admin_clean_async();
echo '<div class="message">' . NL;
echo '<p>';
echo t('Number of cleaned files') . ' : ' . $total;
echo '</p></div>';
}
elseif (strcmp ($_POST['action'], 'list') == 0)
{
jirafeau_admin_list ("", "", "");
}
elseif (strcmp ($_POST['action'], 'search_by_name') == 0)
{
jirafeau_admin_list ($_POST['name'], "", "");
}
elseif (strcmp ($_POST['action'], 'search_by_file_hash') == 0)
{
jirafeau_admin_list ("", $_POST['hash'], "");
}
elseif (strcmp ($_POST['action'], 'search_link') == 0)
{
jirafeau_admin_list ("", "", $_POST['link']);
}
elseif (strcmp ($_POST['action'], 'delete_link') == 0)
{
jirafeau_delete_link ($_POST['link']);
} elseif (strcmp($_POST['action'], 'list') == 0) {
jirafeau_admin_list("", "", "");
} elseif (strcmp($_POST['action'], 'search_by_name') == 0) {
jirafeau_admin_list($_POST['name'], "", "");
} elseif (strcmp($_POST['action'], 'search_by_file_hash') == 0) {
jirafeau_admin_list("", $_POST['hash'], "");
} elseif (strcmp($_POST['action'], 'search_link') == 0) {
jirafeau_admin_list("", "", $_POST['link']);
} elseif (strcmp($_POST['action'], 'delete_link') == 0) {
jirafeau_delete_link($_POST['link']);
echo '<div class="message">' . NL;
echo '<p>' . t('Link deleted') . '</p></div>';
}
elseif (strcmp ($_POST['action'], 'delete_file') == 0)
{
$count = jirafeau_delete_file ($_POST['md5']);
} elseif (strcmp($_POST['action'], 'delete_file') == 0) {
$count = jirafeau_delete_file($_POST['md5']);
echo '<div class="message">' . NL;
echo '<p>' . t('Deleted links') . ' : ' . $count . '</p></div>';
}
elseif (strcmp ($_POST['action'], 'download') == 0)
{
$l = jirafeau_get_link ($_POST['link']);
if (!count ($l))
} elseif (strcmp($_POST['action'], 'download') == 0) {
$l = jirafeau_get_link($_POST['link']);
if (!count($l)) {
return;
$p = s2p ($l['md5']);
header ('Content-Length: ' . $l['file_size']);
header ('Content-Type: ' . $l['mime_type']);
header ('Content-Disposition: attachment; filename="' .
}
$p = s2p($l['md5']);
header('Content-Length: ' . $l['file_size']);
header('Content-Type: ' . $l['mime_type']);
header('Content-Disposition: attachment; filename="' .
$l['file_name'] . '"');
if (file_exists(VAR_FILES . $p . $l['md5']))
readfile (VAR_FILES . $p . $l['md5']);
if (file_exists(VAR_FILES . $p . $l['md5'])) {
readfile(VAR_FILES . $p . $l['md5']);
}
exit;
}
}
require (JIRAFEAU_ROOT.'lib/template/footer.php');
require(JIRAFEAU_ROOT.'lib/template/footer.php');
}
?>

255
f.php
View File

@ -17,15 +17,14 @@
* 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/>.
*/
define ('JIRAFEAU_ROOT', dirname (__FILE__) . '/');
define('JIRAFEAU_ROOT', dirname(__FILE__) . '/');
require (JIRAFEAU_ROOT . 'lib/settings.php');
require (JIRAFEAU_ROOT . 'lib/functions.php');
require (JIRAFEAU_ROOT . 'lib/lang.php');
require(JIRAFEAU_ROOT . 'lib/settings.php');
require(JIRAFEAU_ROOT . 'lib/functions.php');
require(JIRAFEAU_ROOT . 'lib/lang.php');
if (!isset ($_GET['h']) || empty ($_GET['h']))
{
header ('Location: ' . $cfg['web_root']);
if (!isset($_GET['h']) || empty($_GET['h'])) {
header('Location: ' . $cfg['web_root']);
exit;
}
@ -38,98 +37,94 @@ if (!isset ($_GET['h']) || empty ($_GET['h']))
$link_name = $_GET['h'];
if (!preg_match ('/[0-9a-zA-Z_-]+$/', $link_name))
{
require (JIRAFEAU_ROOT.'lib/template/header.php');
if (!preg_match('/[0-9a-zA-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/footer.php');
require(JIRAFEAU_ROOT.'lib/template/footer.php');
exit;
}
$link = jirafeau_get_link ($link_name);
if (count ($link) == 0)
{
$link = jirafeau_get_link($link_name);
if (count($link) == 0) {
/* Try alias. */
$alias = jirafeau_get_alias (md5 ($link_name));
if (count ($alias) > 0)
$link = jirafeau_get_link ($alias["destination"]);
$alias = jirafeau_get_alias(md5($link_name));
if (count($alias) > 0) {
$link = jirafeau_get_link($alias["destination"]);
}
}
if (count ($link) == 0)
{
require (JIRAFEAU_ROOT.'lib/template/header.php');
if (count($link) == 0) {
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/footer.php');
require(JIRAFEAU_ROOT.'lib/template/footer.php');
exit;
}
$delete_code = '';
if (isset ($_GET['d']) && !empty ($_GET['d']) && $_GET['d'] != '1')
if (isset($_GET['d']) && !empty($_GET['d']) && $_GET['d'] != '1') {
$delete_code = $_GET['d'];
}
$crypt_key = '';
if (isset ($_GET['k']) && !empty ($_GET['k']))
if (isset($_GET['k']) && !empty($_GET['k'])) {
$crypt_key = $_GET['k'];
}
$do_download = false;
if (isset ($_GET['d']) && $_GET['d'] == '1')
if (isset($_GET['d']) && $_GET['d'] == '1') {
$do_download = true;
}
$do_preview = false;
if (isset ($_GET['p']) && !empty ($_GET['p']))
if (isset($_GET['p']) && !empty($_GET['p'])) {
$do_preview = true;
}
$p = s2p ($link['md5']);
if (!file_exists (VAR_FILES . $p . $link['md5']))
{
jirafeau_delete_link ($link_name);
require (JIRAFEAU_ROOT.'lib/template/header.php');
$p = s2p($link['md5']);
if (!file_exists(VAR_FILES . $p . $link['md5'])) {
jirafeau_delete_link($link_name);
require(JIRAFEAU_ROOT.'lib/template/header.php');
echo '<div class="error"><p>'.t('File not available.').
'</p></div>';
require (JIRAFEAU_ROOT.'lib/template/footer.php');
require(JIRAFEAU_ROOT.'lib/template/footer.php');
exit;
}
if (!empty ($delete_code) && $delete_code == $link['link_code'])
{
jirafeau_delete_link ($link_name);
require (JIRAFEAU_ROOT.'lib/template/header.php');
if (!empty($delete_code) && $delete_code == $link['link_code']) {
jirafeau_delete_link($link_name);
require(JIRAFEAU_ROOT.'lib/template/header.php');
echo '<div class="message"><p>'.t('File has been deleted.').
'</p></div>';
require (JIRAFEAU_ROOT.'lib/template/footer.php');
require(JIRAFEAU_ROOT.'lib/template/footer.php');
exit;
}
if ($link['time'] != JIRAFEAU_INFINITY && time () > $link['time'])
{
jirafeau_delete_link ($link_name);
require (JIRAFEAU_ROOT.'lib/template/header.php');
if ($link['time'] != JIRAFEAU_INFINITY && time() > $link['time']) {
jirafeau_delete_link($link_name);
require(JIRAFEAU_ROOT.'lib/template/header.php');
echo '<div class="error"><p>'.
t('The time limit of this file has expired.') . ' ' .
t('File has been deleted.') .
'</p></div>';
require (JIRAFEAU_ROOT . 'lib/template/footer.php');
require(JIRAFEAU_ROOT . 'lib/template/footer.php');
exit;
}
if (empty ($crypt_key) && $link['crypted'])
{
require (JIRAFEAU_ROOT.'lib/template/header.php');
if (empty($crypt_key) && $link['crypted']) {
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/footer.php');
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');
if (!empty($link['key'])) {
if (!isset($_POST['key'])) {
require(JIRAFEAU_ROOT.'lib/template/header.php');
echo '<div>' .
'<form action = "';
echo $cfg['web_root'] . '/f.php';
echo JIRAFEAU_ABSPREFIX . 'f.php';
echo '" ' .
'method = "post" id = "submit_post">'; ?>
<input type = "hidden" name = "jirafeau" value = "<?php echo JIRAFEAU_VERSION ?>"/><?php
@ -140,62 +135,53 @@ if (!empty ($link['key']))
'<input type = "password" name = "key" />' .
'</td></tr>' .
'<tr><td>' .
t('By using our services, you accept our'). ' <a href="' . $cfg['web_root'] . 'tos.php' . '">' . t('Terms of Service') . '</a>.' .
t('By using our services, you accept our'). ' <a href="' . JIRAFEAU_ABSPREFIX . 'tos.php' . '">' . t('Terms of Service') . '</a>.' .
'</td></tr>';
if ($link['onetime'] == 'O')
{
if ($link['onetime'] == 'O') {
echo '<tr><td id="self_destruct">' .
t('Warning, this file will self-destruct after being read') .
'</td></tr>';
}
?><tr><td><input type="submit" id = "submit_download" value="<?php echo t('Download'); ?>"
onclick="document.getElementById('submit_post').action='
<?php
echo $cfg['web_root'] . '/f.php?h=' . $link_name . '&amp;d=1';
if (!empty($crypt_key))
} ?><tr><td><input type="submit" id = "submit_download" value="<?php echo t('Download'); ?>"
onclick="document.getElementById('submit_post').action='<?php
echo JIRAFEAU_ABSPREFIX . 'f.php?h=' . $link_name . '&amp;d=1';
if (!empty($crypt_key)) {
echo '&amp;k=' . urlencode($crypt_key);
?>';
} ?>';
document.getElementById('submit_download').submit ();"/><?php
if ($cfg['preview'] && jirafeau_is_viewable($link['mime_type']))
{
if ($cfg['preview'] && jirafeau_is_viewable($link['mime_type'])) {
?><input type="submit" id = "submit_preview" value="<?php echo t('Preview'); ?>"
onclick="document.getElementById('submit_post').action='
<?php
echo $cfg['web_root'] . '/f.php?h=' . $link_name . '&amp;p=1';
if (!empty($crypt_key))
onclick="document.getElementById('submit_post').action='<?php
echo JIRAFEAU_ABSPREFIX . 'f.php?h=' . $link_name . '&amp;p=1';
if (!empty($crypt_key)) {
echo '&amp;k=' . urlencode($crypt_key);
?>';
} ?>';
document.getElementById('submit_preview').submit ();"/><?php
}
echo '</td></tr></table></fieldset></form></div>';
require (JIRAFEAU_ROOT.'lib/template/footer.php');
require(JIRAFEAU_ROOT.'lib/template/footer.php');
exit;
}
else
{
if ($link['key'] == md5 ($_POST['key']))
} else {
if ($link['key'] == md5($_POST['key'])) {
$password_challenged = true;
else
{
sleep (2);
require (JIRAFEAU_ROOT.'lib/template/header.php');
} else {
sleep(2);
require(JIRAFEAU_ROOT.'lib/template/header.php');
echo '<div class="error"><p>' . t('Access denied') .
'</p></div>';
require (JIRAFEAU_ROOT.'lib/template/footer.php');
require(JIRAFEAU_ROOT.'lib/template/footer.php');
exit;
}
}
}
if (!$password_challenged && !$do_download && !$do_preview)
{
require (JIRAFEAU_ROOT.'lib/template/header.php');
echo '<div>' .
'<form action = "';
echo $cfg['web_root'] . '/f.php';
echo '" ' .
if (!$password_challenged && !$do_download && !$do_preview) {
require(JIRAFEAU_ROOT.'lib/template/header.php');
echo '<div>' .
'<form action="';
echo JIRAFEAU_ABSPREFIX . 'f.php';
echo '" ' .
'method = "post" id = "submit_post">'; ?>
<input type = "hidden" name = "jirafeau" value = "<?php echo JIRAFEAU_VERSION ?>"/><?php
echo '<fieldset><legend>' . htmlspecialchars($link['file_name']) . '</legend><table>' .
@ -203,89 +189,82 @@ if (!$password_challenged && !$do_download && !$do_preview)
t('You are about to download') . ' "' . htmlspecialchars($link['file_name']) . '" (' . jirafeau_human_size($link['file_size']) . ').' .
'</td></tr>' .
'<tr><td>' .
t('By using our services, you accept our'). ' <a href="' . $cfg['web_root'] . 'tos.php' . '">' . t('Terms of Service') . '</a>.' .
t('By using our services, you accept our'). ' <a href="' . JIRAFEAU_ABSPREFIX . 'tos.php' . '">' . t('Terms of Service') . '</a>.' .
'</td></tr>';
if ($link['onetime'] == 'O')
{
echo '<tr><td id="self_destruct">' .
if ($link['onetime'] == 'O') {
echo '<tr><td id="self_destruct">' .
t('Warning, this file will self-destruct after being read') .
'</td></tr>';
}
?>
} ?>
<tr><td><input type="submit" id = "submit_download" value="<?php echo t('Download'); ?>"
onclick="document.getElementById('submit_post').action='
<?php
echo $cfg['web_root'] . '/f.php?h=' . $link_name . '&amp;d=1';
if (!empty($crypt_key))
echo '&amp;k=' . urlencode($crypt_key);
?>';
onclick="document.getElementById('submit_post').action='<?php
echo JIRAFEAU_ABSPREFIX . 'f.php?h=' . $link_name . '&amp;d=1';
if (!empty($crypt_key)) {
echo '&amp;k=' . urlencode($crypt_key);
} ?>';
document.getElementById('submit_post').submit ();"/><?php
if ($cfg['preview'] && jirafeau_is_viewable($link['mime_type']))
{
if ($cfg['preview'] && jirafeau_is_viewable($link['mime_type'])) {
?><input type="submit" id = "submit_preview" value="<?php echo t('Preview'); ?>"
onclick="document.getElementById('submit_post').action='
<?php
echo $cfg['web_root'] . '/f.php?h=' . $link_name . '&amp;p=1';
if (!empty($crypt_key))
echo '&amp;k=' . urlencode($crypt_key);
?>';
onclick="document.getElementById('submit_post').action='<?php
echo JIRAFEAU_ABSPREFIX . 'f.php?h=' . $link_name . '&amp;p=1';
if (!empty($crypt_key)) {
echo '&amp;k=' . urlencode($crypt_key);
} ?>';
document.getElementById('submit_post').submit ();"/><?php
}
echo '</td></tr>';
echo '</table></fieldset></form></div>';
require (JIRAFEAU_ROOT.'lib/template/footer.php');
exit;
echo '</td></tr>';
echo '</table></fieldset></form></div>';
require(JIRAFEAU_ROOT.'lib/template/footer.php');
exit;
}
header ('HTTP/1.0 200 OK');
header ('Content-Length: ' . $link['file_size']);
if (!jirafeau_is_viewable ($link['mime_type']) || !$cfg['preview'] || $do_download)
header ('Content-Disposition: attachment; filename="' . $link['file_name'] . '"');
else
header ('Content-Disposition: filename="' . $link['file_name'] . '"');
header ('Content-Type: ' . $link['mime_type']);
header ('Content-MD5: ' . hex_to_base64($link['md5']));
header('HTTP/1.0 200 OK');
header('Content-Length: ' . $link['file_size']);
if (!jirafeau_is_viewable($link['mime_type']) || !$cfg['preview'] || $do_download) {
header('Content-Disposition: attachment; filename="' . $link['file_name'] . '"');
} else {
header('Content-Disposition: filename="' . $link['file_name'] . '"');
}
header('Content-Type: ' . $link['mime_type']);
header('Content-MD5: ' . hex_to_base64($link['md5']));
/* Read encrypted file. */
if ($link['crypted'])
{
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));
$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);
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));
$r = fopen(VAR_FILES . $p . $link['md5'], 'r');
while (!feof($r)) {
$dec = mdecrypt_generic($m, fread($r, 1024));
print $dec;
ob_flush();
}
fclose ($r);
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);
else {
$r = fopen(VAR_FILES . $p . $link['md5'], 'r');
while (!feof($r)) {
print fread($r, 1024);
ob_flush();
}
fclose ($r);
fclose($r);
}
if ($link['onetime'] == 'O')
jirafeau_delete_link ($link_name);
if ($link['onetime'] == 'O') {
jirafeau_delete_link($link_name);
}
exit;
?>

176
index.php
View File

@ -18,86 +18,76 @@
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
define ('JIRAFEAU_ROOT', dirname (__FILE__) . '/');
define('JIRAFEAU_ROOT', dirname(__FILE__) . '/');
require (JIRAFEAU_ROOT . 'lib/settings.php');
require (JIRAFEAU_ROOT . 'lib/functions.php');
require (JIRAFEAU_ROOT . 'lib/lang.php');
require(JIRAFEAU_ROOT . 'lib/settings.php');
require(JIRAFEAU_ROOT . 'lib/functions.php');
require(JIRAFEAU_ROOT . 'lib/lang.php');
check_errors ($cfg);
if (has_error ())
{
show_errors ();
require (JIRAFEAU_ROOT . 'lib/template/footer.php');
check_errors($cfg);
if (has_error()) {
show_errors();
require(JIRAFEAU_ROOT . 'lib/template/footer.php');
exit;
}
require (JIRAFEAU_ROOT . 'lib/template/header.php');
require(JIRAFEAU_ROOT . 'lib/template/header.php');
/* Check if user is allowed to upload. */
if (!jirafeau_challenge_upload_ip ($cfg, get_ip_address($cfg)))
{
echo '<div class="error"><p>' . t('Access denied') . '</p></div>';
require (JIRAFEAU_ROOT.'lib/template/footer.php');
exit;
}
if (!jirafeau_challenge_upload_ip($cfg, get_ip_address($cfg))) {
/* Ask password if upload password is set. */
if (jirafeau_has_upload_password ($cfg))
{
session_start();
/* Ask password if upload password is set. */
if (jirafeau_has_upload_password($cfg)) {
session_start();
/* Unlog if asked. */
if (isset ($_POST['action']) && (strcmp ($_POST['action'], 'logout') == 0))
session_unset ();
/* Auth. */
if (isset ($_POST['upload_password']))
{
if (jirafeau_challenge_upload_password ($cfg, $_POST['upload_password']))
{
$_SESSION['upload_auth'] = true;
$_SESSION['user_upload_password'] = $_POST['upload_password'];
/* Unlog if asked. */
if (isset($_POST['action']) && (strcmp($_POST['action'], 'logout') == 0)) {
session_unset();
}
else
{
$_SESSION['admin_auth'] = false;
echo '<div class="error"><p>' . t('Wrong password.') . '</p></div>';
require (JIRAFEAU_ROOT.'lib/template/footer.php');
/* Auth. */
if (isset($_POST['upload_password'])) {
if (jirafeau_challenge_upload_password($cfg, $_POST['upload_password'])) {
$_SESSION['upload_auth'] = true;
$_SESSION['user_upload_password'] = $_POST['upload_password'];
} else {
$_SESSION['admin_auth'] = false;
echo '<div class="error"><p>' . t('Wrong password.') . '</p></div>';
require(JIRAFEAU_ROOT.'lib/template/footer.php');
exit;
}
}
/* Show auth page. */
if (!isset($_SESSION['upload_auth']) || $_SESSION['upload_auth'] != true) {
?>
<form method="post">
<fieldset>
<table>
<tr>
<td class = "label"><label for = "enter_password">
<?php echo t('Upload password') . ':'; ?></label>
</td>
<td class = "field"><input type = "password"
name = "upload_password" id = "upload_password"
size = "40" />
</td>
</tr>
<tr class = "nav">
<td></td>
<td class = "nav next">
<input type = "submit" name = "key" value =
"<?php echo t('Login'); ?>" />
</td>
</tr>
</table>
</fieldset>
</form>
<?php
require(JIRAFEAU_ROOT.'lib/template/footer.php');
exit;
}
}
/* Show auth page. */
if (!isset ($_SESSION['upload_auth']) || $_SESSION['upload_auth'] != true)
{
?>
<form action = "<?php echo basename(__FILE__); ?>" method = "post">
<fieldset>
<table>
<tr>
<td class = "label"><label for = "enter_password">
<?php echo t('Upload password') . ':';?></label>
</td>
<td class = "field"><input type = "password"
name = "upload_password" id = "upload_password"
size = "40" />
</td>
</tr>
<tr class = "nav">
<td></td>
<td class = "nav next">
<input type = "submit" name = "key" value =
"<?php echo t('Login'); ?>" />
</td>
</tr>
</table>
</fieldset>
</form>
<?php
require (JIRAFEAU_ROOT.'lib/template/footer.php');
exit;
}
}
?>
@ -112,12 +102,14 @@ if (jirafeau_has_upload_password ($cfg))
<p><a id="upload_link" href=""></a></p>
</div>
<?php if ($cfg['preview'] == true) { ?>
<?php if ($cfg['preview'] == true) {
?>
<div id="upload_finished_preview">
<p><?php echo t('View link') ?>:</p>
<p><a id="preview_link" href=""></a></p>
</div>
<?php } ?>
<?php
} ?>
<div id="upload_direct_download">
<p><?php echo t('Direct download link') ?>:</p>
@ -137,7 +129,7 @@ if (jirafeau_has_upload_password ($cfg))
<div id="uploading">
<p>
<?php echo t ('Uploading ...'); ?>
<?php echo t('Uploading ...'); ?>
<div id="uploaded_percentage"></div>
<div id="uploaded_speed"></div>
<div id="uploaded_time"></div>
@ -154,7 +146,7 @@ if (jirafeau_has_upload_password ($cfg))
</legend>
<p>
<input type="file" id="file_select" size="30"
onchange="control_selected_file_size(<?php echo $cfg['maximal_upload_size'] ?>, '<?php echo t ('File is too big') . ', ' . t ('File size is limited to') . " " . $cfg['maximal_upload_size'] . " MB"; ?>')"/>
onchange="control_selected_file_size(<?php echo $cfg['maximal_upload_size'] ?>, '<?php echo t('File is too big') . ', ' . t('File size is limited to') . " " . $cfg['maximal_upload_size'] . " MB"; ?>')"/>
</p>
<div id="options">
@ -206,59 +198,57 @@ if (jirafeau_has_upload_password ($cfg))
)
);
foreach ($expirationTimeOptions as $expirationTimeOption) {
$selected = ($expirationTimeOption['value'] === $cfg['availability_default'])? 'selected="selected"' : '';
if(true === $cfg['availabilities'][$expirationTimeOption['value']]) {
echo '<option value="' . $expirationTimeOption['value'] . '" ' .
$selected = ($expirationTimeOption['value'] === $cfg['availability_default'])? 'selected="selected"' : '';
if (true === $cfg['availabilities'][$expirationTimeOption['value']]) {
echo '<option value="' . $expirationTimeOption['value'] . '" ' .
$selected . '>' . t($expirationTimeOption['label']) . '</option>';
}
}
}
?>
</select></td>
</tr>
<?php
if ($cfg['maximal_upload_size'] > 0)
{
echo '<p class="config">' . t ('File size is limited to');
echo " " . $cfg['maximal_upload_size'] . " MB</p>";
if ($cfg['maximal_upload_size'] > 0) {
echo '<p class="config">' . t('File size is limited to');
echo " " . $cfg['maximal_upload_size'] . " MB</p>";
}
?>
<p id="max_file_size" class="config"></p>
<p>
<?php
if (jirafeau_has_upload_password ($cfg) && $_SESSION['upload_auth'])
{
?>
if (jirafeau_has_upload_password($cfg) && $_SESSION['upload_auth']) {
?>
<input type="hidden" id="upload_password" name="upload_password" value="<?php echo $_SESSION['user_upload_password'] ?>"/>
<?php
}
else
{
?>
} else {
?>
<input type="hidden" id="upload_password" name="upload_password" value=""/>
<?php
}
?>
<input type="submit" id="send" value="<?php echo t('Send'); ?>"
onclick="
document.getElementById('upload').style.display = 'none';
document.getElementById('uploading').style.display = '';
upload ('<?php echo $cfg['web_root']; ?>', <?php echo jirafeau_get_max_upload_size_bytes (); ?>);
upload ('<?php echo $cfg['web_root']; ?>', <?php echo jirafeau_get_max_upload_size_bytes(); ?>);
"/>
</p>
</table>
</div> </fieldset>
<?php
if (jirafeau_has_upload_password ($cfg))
{
?>
<form action = "<?php echo basename(__FILE__); ?>" method = "post">
if (jirafeau_has_upload_password($cfg)) {
?>
<form method="post">
<input type = "hidden" name = "action" value = "logout"/>
<input type = "submit" value = "<?php echo t('Logout'); ?>" />
</form>
<?php
}
?>
@ -272,7 +262,7 @@ if (jirafeau_has_upload_password ($cfg))
document.getElementById('send').style.display = 'none';
if (!check_html5_file_api ())
document.getElementById('max_file_size').innerHTML = '<?php
echo t('You browser may not support HTML5 so the maximum file size is ') . jirafeau_get_max_upload_size ();
echo t('You browser may not support HTML5 so the maximum file size is ') . jirafeau_get_max_upload_size();
?>';
</script>
<?php require (JIRAFEAU_ROOT . 'lib/template/footer.php'); ?>
<?php require(JIRAFEAU_ROOT . 'lib/template/footer.php'); ?>

View File

@ -17,31 +17,28 @@
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
define ('JIRAFEAU_ROOT', dirname (__FILE__) . '/');
define ('NL', "\n");
define ('QUOTE', "'");
define ('JIRAFEAU_CFG', JIRAFEAU_ROOT . 'lib/config.local.php');
define ('JIRAFEAU_VAR_RAND_LENGTH', 15);
define('JIRAFEAU_ROOT', dirname(__FILE__) . '/');
require (JIRAFEAU_ROOT . 'lib/settings.php');
require (JIRAFEAU_ROOT . 'lib/functions.php');
require (JIRAFEAU_ROOT . 'lib/lang.php');
define('JIRAFEAU_CFG', JIRAFEAU_ROOT . 'lib/config.local.php');
define('JIRAFEAU_VAR_RAND_LENGTH', 15);
require(JIRAFEAU_ROOT . 'lib/settings.php');
require(JIRAFEAU_ROOT . 'lib/functions.php');
require(JIRAFEAU_ROOT . 'lib/lang.php');
/**
* Prepend used functions
**/
function
jirafeau_quoted ($str)
function jirafeau_quoted($str)
{
return QUOTE . str_replace (QUOTE, "\'", $str) . QUOTE;
return QUOTE . str_replace(QUOTE, "\'", $str) . QUOTE;
}
function
jirafeau_export_cfg ($cfg)
function jirafeau_export_cfg($cfg)
{
$content = '<?php' . NL;
$content .= '/* ' . t ('This file was generated by the install process. ' .
$content .= '/* ' . t('This file was generated by the install process. ' .
'You can edit it. Please see config.original.php to understand the ' .
'configuration items.') . ' */' . NL;
$content .= '$cfg = ' . var_export($cfg, true) . ';';
@ -53,10 +50,9 @@ jirafeau_export_cfg ($cfg)
}
}
function
jirafeau_mkdir ($path)
function jirafeau_mkdir($path)
{
return !(!file_exists ($path) && !@mkdir ($path, 0755));
return !(!file_exists($path) && !@mkdir($path, 0755));
}
/**
@ -65,15 +61,13 @@ jirafeau_mkdir ($path)
* @param $path is the file or directory to be tested.
* @return true if $path is writable.
*/
function
jirafeau_is_writable ($path)
function jirafeau_is_writable($path)
{
/* "@" gets rid of error messages. */
return is_writable ($path) || @chmod ($path, 0777);
return is_writable($path) || @chmod($path, 0777);
}
function
jirafeau_check_var_dir ($path)
function jirafeau_check_var_dir($path)
{
$mkdir_str1 = t('The following directory could not be created') . ':';
$mkdir_str2 = t('You should create this directory manually.');
@ -82,37 +76,36 @@ jirafeau_check_var_dir ($path)
'this directory.');
$solution_str = t('Here is a solution') . ':';
if (!jirafeau_mkdir ($path) || !jirafeau_is_writable ($path))
return array ('has_error' => true,
if (!jirafeau_mkdir($path) || !jirafeau_is_writable($path)) {
return array('has_error' => true,
'why' => $mkdir_str1 . '<br /><code>' .
$path . '</code><br />' . $solution_str .
'<br />' . $mkdir_str2);
}
foreach (array ('files', 'links', 'async', 'alias') as $subdir)
{
foreach (array('files', 'links', 'async', 'alias') as $subdir) {
$subpath = $path.$subdir;
if (!jirafeau_mkdir ($subpath) || !jirafeau_is_writable ($subpath))
return array ('has_error' => true,
if (!jirafeau_mkdir($subpath) || !jirafeau_is_writable($subpath)) {
return array('has_error' => true,
'why' => $mkdir_str1 . '<br /><code>' .
$subpath . '</code><br />' . $solution_str .
'<br />' . $mkdir_str2);
}
}
return array ('has_error' => false, 'why' => '');
return array('has_error' => false, 'why' => '');
}
function
jirafeau_add_ending_slash ($path)
function jirafeau_add_ending_slash($path)
{
return $path . ((substr ($path, -1) == '/') ? '' : '/');
return $path . ((substr($path, -1) == '/') ? '' : '/');
}
function
jirafeau_fatal_error($errorText)
function jirafeau_fatal_error($errorText)
{
echo '<div class="error"><h2>Error</h2><p>' . $errorText . '</p></div>';
require (JIRAFEAU_ROOT . 'lib/template/footer.php');
require(JIRAFEAU_ROOT . 'lib/template/footer.php');
exit;
}
@ -122,24 +115,21 @@ jirafeau_fatal_error($errorText)
// Is the installation process done already?
// Then there is nothing to do here → redirect to the main page.
if ($cfg['installation_done'] === true)
{
header('Location: index.php');
exit;
if ($cfg['installation_done'] === true) {
header('Location: index.php');
exit;
}
/**
* Prepare installation process
**/
require (JIRAFEAU_ROOT . 'lib/template/header.php');
require(JIRAFEAU_ROOT . 'lib/template/header.php');
// does the local configuration file exist?
if (!file_exists (JIRAFEAU_CFG))
{
if (!file_exists(JIRAFEAU_CFG)) {
// show an error if it is not possible to create the file
if (!@touch (JIRAFEAU_CFG))
{
if (!@touch(JIRAFEAU_CFG)) {
jirafeau_fatal_error(
t('The local configuration file could not be created. Create a ' .
'<code>lib/config.local.php</code> file and give the write ' .
@ -151,8 +141,7 @@ if (!file_exists (JIRAFEAU_CFG))
}
// is the local configuration writable?
if (!is_writable (JIRAFEAU_CFG) && !@chmod (JIRAFEAU_CFG, '0666'))
{
if (!is_writable(JIRAFEAU_CFG) && !@chmod(JIRAFEAU_CFG, '0666')) {
jirafeau_fatal_error(
t('The local configuration is not writable by the web server. ' .
'Give the write permission to the web server on the ' .
@ -164,66 +153,60 @@ if (!is_writable (JIRAFEAU_CFG) && !@chmod (JIRAFEAU_CFG, '0666'))
* Run trough each installation step
**/
if (isset ($_POST['step']) && isset ($_POST['next']))
{
switch ($_POST['step'])
{
if (isset($_POST['step']) && isset($_POST['next'])) {
switch ($_POST['step']) {
case 1:
$cfg['lang'] = $_POST['lang'];
jirafeau_export_cfg ($cfg);
jirafeau_export_cfg($cfg);
break;
case 2:
$cfg['admin_password'] = hash('sha256', $_POST['admin_password']);
jirafeau_export_cfg ($cfg);
jirafeau_export_cfg($cfg);
break;
case 3:
$cfg['web_root'] = jirafeau_add_ending_slash ($_POST['web_root']);
$cfg['var_root'] = jirafeau_add_ending_slash ($_POST['var_root']);
jirafeau_export_cfg ($cfg);
$cfg['web_root'] = jirafeau_add_ending_slash($_POST['web_root']);
$cfg['var_root'] = jirafeau_add_ending_slash($_POST['var_root']);
jirafeau_export_cfg($cfg);
break;
case 4:
$cfg['web_root'] = jirafeau_add_ending_slash ($_POST['web_root']);
$cfg['var_root'] = jirafeau_add_ending_slash ($_POST['var_root']);
jirafeau_export_cfg ($cfg);
$cfg['web_root'] = jirafeau_add_ending_slash($_POST['web_root']);
$cfg['var_root'] = jirafeau_add_ending_slash($_POST['var_root']);
jirafeau_export_cfg($cfg);
break;
}
}
$current = 1;
if (isset ($_POST['next']))
if (isset($_POST['next'])) {
$current = $_POST['step'] + 1;
else if (isset ($_POST['previous']))
} elseif (isset($_POST['previous'])) {
$current = $_POST['step'] - 1;
else if (isset ($_POST['retry']))
} elseif (isset($_POST['retry'])) {
$current = $_POST['step'];
}
switch ($current)
{
switch ($current) {
case 1:
default:
?><h2><?php printf (t('Installation of Jirafeau') . ' - ' . t('step') .
?><h2><?php printf(t('Installation of Jirafeau') . ' - ' . t('step') .
' %d ' . t('out of') . ' %d', 1, 4);
?></h2> <div id = "install"> <form action =
"<?php echo basename(__FILE__); ?>" method = "post"> <input type =
?></h2> <div id = "install"> <form method="post"> <input type =
"hidden" name = "jirafeau" value =
"<?php echo JIRAFEAU_VERSION; ?>" /><input type = "hidden" name =
"step" value = "1" /><fieldset> <legend><?php echo t('Language');
?></legend> <table> <tr> <td class = "info" colspan =
"2"><?php echo
t
('Jirafeau is internationalised. Choose a specific langage or ' .
t('Jirafeau is internationalised. Choose a specific langage or ' .
'choose Automatic (langage is provided by user\'s browser).');
?></td> </tr> <tr> <td class = "label"><label for = "select_lang"
><?php echo t('Choose the default language') . ':';
?></label></td>
<td class = "field">
<select name = "lang" id = "select_lang">
<?php foreach ($languages_list as $key => $item)
{
<?php foreach ($languages_list as $key => $item) {
echo '<option value="'.$key.'"'.($key ==
$cfg['lang'] ? ' selected="selected"'
: '').'>'.$item.'</option>'.NL;
@ -239,18 +222,16 @@ default:
break;
case 2:
?><h2><?php printf (t('Installation of Jirafeau') . ' - ' . t('step') .
?><h2><?php printf(t('Installation of Jirafeau') . ' - ' . t('step') .
' %d ' . t('out of') . ' %d', 2, 4);
?></h2> <div id = "install"> <form action =
"<?php echo basename(__FILE__); ?>" method = "post"> <input type =
?></h2> <div id = "install"> <form method="post"> <input type =
"hidden" name = "jirafeau" value =
"<?php echo JIRAFEAU_VERSION; ?>" /><input type = "hidden" name =
"step" value = "2" /><fieldset> <legend><?php
echo t('Administration password');
?></legend> <table> <tr> <td class = "info" colspan =
"2"><?php echo
t
('Jirafeau has an administration interface (through admin.php). ' .
t('Jirafeau has an administration interface (through admin.php). ' .
'You can set a password to access the interface or leave it empty ' .
'to disable the interface.');
?></td> </tr> <tr> <td class = "label"><label for = "select_password"
@ -271,18 +252,16 @@ case 2:
break;
case 3:
?><h2><?php printf (t('Installation of Jirafeau') . ' - ' . t('step') .
?><h2><?php printf(t('Installation of Jirafeau') . ' - ' . t('step') .
' %d ' . t('out of') . ' %d', 3, 4);
?></h2> <div id = "install"> <form action =
"<?php echo basename(__FILE__); ?>" method = "post"> <input type =
?></h2> <div id = "install"> <form method="post"> <input type =
"hidden" name = "jirafeau" value =
"<?php echo JIRAFEAU_VERSION; ?>" /><input type = "hidden" name =
"step" value =
"3" /><fieldset> <legend><?php echo t('Information');
?></legend> <table> <tr> <td class = "info" colspan =
"2"><?php echo
t
('The base address of Jirafeau is the first part of the URL, until ' .
t('The base address of Jirafeau is the first part of the URL, until ' .
'(and including) the last slash. For example: ' .
'"http://www.example.com/". Do not forget the trailing slash!');
?></td> </tr> <tr> <td class = "label"><label for = "input_web_root"
@ -290,7 +269,7 @@ case 3:
?></label></td>
<td class = "field"><input type = "text" name = "web_root"
id = "input_web_root" value = "<?php
echo (empty($cfg['web_root']) ?
echo(empty($cfg['web_root']) ?
'http://' . $_SERVER['HTTP_HOST'] . str_replace(basename(__FILE__),
'', $_SERVER['REQUEST_URI']) : $cfg['web_root']);
?>" size = "40" /></td>
@ -304,18 +283,18 @@ case 3:
?></label></td>
<td class = "field"><input type = "text" name = "var_root"
id = "input_var_root" value = "<?php
if(empty($cfg['var_root'])) {
$alphanum = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' .
if (empty($cfg['var_root'])) {
$alphanum = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' .
'abcdefghijklmnopqrstuvwxyz' . '0123456789';
$len_alphanum = strlen($alphanum);
$var = 'var-';
for($i = 0; $i <JIRAFEAU_VAR_RAND_LENGTH; $i++) {
$var .= substr($alphanum, mt_rand(0, $len_alphanum - 1), 1);
}
echo JIRAFEAU_ROOT . $var . '/';
$len_alphanum = strlen($alphanum);
$var = 'var-';
for ($i = 0; $i <JIRAFEAU_VAR_RAND_LENGTH; $i++) {
$var .= substr($alphanum, mt_rand(0, $len_alphanum - 1), 1);
}
echo JIRAFEAU_ROOT . $var . '/';
} else {
echo $cfg['var_root'];
}
else
echo $cfg['var_root'];
?>" size = "40" /></td>
</tr> <tr> <td colspan = "2"><input type = "submit"
class = "navleft" name = "previous" value = "<?php
@ -327,17 +306,16 @@ case 3:
break;
case 4:
?><h2><?php printf (t('Installation of Jirafeau') . ' - ' . t('step') .
?><h2><?php printf(t('Installation of Jirafeau') . ' - ' . t('step') .
' %d ' . t('out of') . ' %d', 4, 4);
?></h2> <div id = "install"> <form action =
"<?php echo basename(__FILE__); ?>" method = "post"> <input type =
?></h2> <div id = "install"> <form method="post"> <input type =
"hidden" name = "jirafeau" value =
"<?php echo JIRAFEAU_VERSION; ?>" /><input type = "hidden" name =
"step" value =
"4" /><fieldset> <legend><?php echo t('Finalisation');
?></legend> <table> <tr> <td class = "info" colspan =
"2"><?php echo
t ('Jirafeau is setting the website according to the configuration ' .
t('Jirafeau is setting the website according to the configuration ' .
'you provided.');
?></td> </tr> <tr> <td class = "nav previous"><input type =
"submit" name = "previous" value =
@ -347,22 +325,17 @@ case 4:
?>" /></td> <td></td> </tr>
</table> </fieldset> </form> </div>
<?php
$err = jirafeau_check_var_dir ($cfg['var_root']);
if ($err['has_error'])
{
echo '<div class="error"><p>'.$err['why'].'<br />'.NL;
?><form action = "<?php echo basename(__FILE__); ?>" method =
"post"> <input type = "hidden" name = "jirafeau" value =
$err = jirafeau_check_var_dir($cfg['var_root']);
if ($err['has_error']) {
echo '<div class="error"><p>'.$err['why'].'<br />'.NL; ?><form method="post"> <input type = "hidden" name = "jirafeau" value =
"<?php echo JIRAFEAU_VERSION; ?>" /><input type = "hidden" name =
"step" value = "4" /><input type = "submit" name =
"retry" value =
"<?php echo t('Retry this step'); ?>" /></form>
<?php echo '</p></div>';
}
else
{
} else {
$cfg['installation_done'] = true;
jirafeau_export_cfg ($cfg);
jirafeau_export_cfg($cfg);
echo '<div class="message"><p>' .
t('Jirafeau is now fully operational') . ':' .
'<br /><a href="' . $cfg['web_root'] . '">' .
@ -371,4 +344,4 @@ case 4:
break;
}
require (JIRAFEAU_ROOT . 'lib/template/footer.php');
require(JIRAFEAU_ROOT . 'lib/template/footer.php');

View File

@ -109,7 +109,7 @@ $cfg['admin_http_auth_user'] = '';
* 'year': file available for one year
* 'none': unlimited availability
*/
$cfg['availabilities'] = array (
$cfg['availabilities'] = array(
'minute' => true,
'hour' => true,
'day' => true,
@ -143,5 +143,3 @@ $cfg['proxy_ip'] = array();
* or needs to start the installation script
*/
$cfg['installation_done'] = false;
?>

View File

@ -20,21 +20,99 @@
header('Content-Type: text/javascript');
define ('JIRAFEAU_ROOT', dirname (__FILE__) . '/../');
define('JIRAFEAU_ROOT', dirname(__FILE__) . '/../');
require (JIRAFEAU_ROOT . 'lib/settings.php');
require (JIRAFEAU_ROOT . 'lib/functions.php');
require (JIRAFEAU_ROOT . 'lib/lang.php');
require(JIRAFEAU_ROOT . 'lib/settings.php');
require(JIRAFEAU_ROOT . 'lib/functions.php');
require(JIRAFEAU_ROOT . 'lib/lang.php');
?>
function translate (expr)
{
var lang_array = <?php echo json_lang_generator () ?>;
var lang_array = <?php echo json_lang_generator() ?>;
if (lang_array.hasOwnProperty(expr))
return lang_array[expr];
return expr;
}
function isEmpty(str) {
return (!str || 0 === str.length);
}
// Extend date object with format method
Date.prototype.format = function(format) {
format = format || 'YYYY-MM-DD hh:mm';
var zeropad = function(number, length) {
number = number.toString();
length = length || 2;
while(number.length < length)
number = '0' + number;
return number;
},
formats = {
YYYY: this.getFullYear(),
MM: zeropad(this.getMonth() + 1),
DD: zeropad(this.getDate()),
hh: zeropad(this.getHours()),
mm: zeropad(this.getMinutes()),
O: (function() {
localDate = new Date;
sign = (localDate.getTimezoneOffset() > 0) ? '-' : '+';
offset = Math.abs(localDate.getTimezoneOffset());
hours = zeropad(Math.floor(offset / 60));
minutes = zeropad(offset % 60);
return sign + hours + ":" + minutes;
})()
},
pattern = '(' + Object.keys(formats).join(')|(') + ')';
return format.replace(new RegExp(pattern, 'g'), function(match) {
return formats[match];
});
};
function dateFromUtcString(datestring) {
// matches »YYYY-MM-DD hh:mm«
var m = datestring.match(/(\d+)-(\d+)-(\d+)\s+(\d+):(\d+)/);
return new Date(Date.UTC(+m[1], +m[2] - 1, +m[3], +m[4], +m[5], 0));
}
function dateFromUtcTimestamp(datetimestamp) {
return new Date(parseInt(datetimestamp) * 1000)
}
function dateToUtcString(datelocal) {
return new Date(
datelocal.getUTCFullYear(),
datelocal.getUTCMonth(),
datelocal.getUTCDate(),
datelocal.getUTCHours(),
datelocal.getUTCMinutes(),
datelocal.getUTCSeconds()
).format();
}
function dateToUtcTimestamp(datelocal) {
return (Date.UTC(
datelocal.getUTCFullYear(),
datelocal.getUTCMonth(),
datelocal.getUTCDate(),
datelocal.getUTCHours(),
datelocal.getUTCMinutes(),
datelocal.getUTCSeconds()
) / 1000);
}
function convertAllDatetimeFields() {
datefields = document.getElementsByClassName('datetime')
for(var i=0; i<datefields.length; i++) {
dateUTC = datefields[i].getAttribute('data-datetime');
datefields[i].setAttribute('title', dateUTC + ' (GMT)');
datefields[i].innerHTML = dateFromUtcString(dateUTC).format('YYYY-MM-DD hh:mm (GMT O)');
}
}
function show_link (url, reference, delete_code, crypt_key, date)
{
// Upload finished
@ -61,9 +139,11 @@ function show_link (url, reference, delete_code, crypt_key, date)
var filename = document.getElementById('file_select').files[0].name;
var b = encodeURIComponent("Download file \"" + filename + "\":") + "%0D";
b += encodeURIComponent(download_link_href) + "%0D";
if (date)
b += "%0D" + encodeURIComponent("This file will be available until " + date) + "%0D";
document.getElementById('upload_link_email').href = "mailto:?body=" + b + "&subject=" + encodeURIComponent(filename);
if (false == isEmpty(date))
{
b += "%0D" + encodeURIComponent("This file will be available until " + date.format('YYYY-MM-DD hh:mm (GMT O)')) + "%0D";
document.getElementById('upload_link_email').href = "mailto:?body=" + b + "&subject=" + encodeURIComponent(filename);
}
// Delete link
var delete_link = url + 'f.php?h=' + reference + '&amp;d=' + delete_code;
@ -72,13 +152,17 @@ function show_link (url, reference, delete_code, crypt_key, date)
document.getElementById('delete_link').href = delete_link_href;
// Validity date
if (date)
if (isEmpty(date))
{
document.getElementById('date').innerHTML = date;
document.getElementById('validity').style.display = 'none';
}
else {
document.getElementById('date').innerHTML = '<span class="datetime" title="'
+ dateToUtcString(date) + ' (GMT)">'
+ date.format('YYYY-MM-DD hh:mm (GMT O)')
+ '</span>';
document.getElementById('validity').style.display = '';
}
else
document.getElementById('validity').style.display = 'none';
// Preview link (if allowed)
if (!!document.getElementById('preview_link'))
@ -177,12 +261,13 @@ function control_selected_file_size(max_size, error_str)
}
else
{
document.getElementById('options').style.display = '';
document.getElementById('send').style.display = '';
// add class to restyle upload form in next step
document.getElementById('upload').setAttribute('class', 'file-selected');
// display options
document.getElementById('options').style.display = 'block';
document.getElementById('send').style.display = 'block';
document.getElementById('error_pop').style.display = 'none';
document.getElementById('file_select').style.left = 'inherit';
document.getElementById('file_select').style.height = 'inherit';
document.getElementById('file_select').style.opacity = '1';
document.getElementById('send').focus();
}
}
@ -259,21 +344,29 @@ function classic_upload (url, file, time, password, one_time, upload_password)
if (req.readyState == 4 && req.status == 200)
{
var res = req.responseText;
if (res == "Error")
// if response starts with "Error" then show a failure
if (/^Error/.test(res))
{
pop_failure ();
pop_failure (res);
return;
}
res = res.split ("\n");
var expiryDate = '';
if (time != 'none')
{
var d = new Date();
if(!add_time_string_to_date(d, time))
// convert time (local time + selected expiry date)
var localDatetime = new Date();
if(!add_time_string_to_date(localDatetime, time))
{
pop_failure ('Error: Date can not be parsed');
return;
show_link (url, res[0], res[1], res[2], d.toString());
}
expiryDate = localDatetime;
}
else
show_link (url, res[0], res[1], res[2]);
show_link (url, res[0], res[1], res[2], expiryDate);
}
}
req.open ("POST", url + 'script.php' , true);
@ -321,11 +414,13 @@ function async_upload_start (url, max_size, file, time, password, one_time, uplo
if (req.readyState == 4 && req.status == 200)
{
var res = req.responseText;
if (res == "Error")
if (/^Error/.test(res))
{
pop_failure ();
pop_failure (res);
return;
}
res = res.split ("\n");
async_global_ref = res[0];
var code = res[1];
@ -390,11 +485,13 @@ function async_upload_push (code)
if (req.readyState == 4 && req.status == 200)
{
var res = req.responseText;
if (res == "Error")
if (/^Error/.test(res))
{
pop_failure ();
pop_failure (res);
return;
}
res = res.split ("\n");
var code = res[0]
async_global_transfered = async_global_transfering;
@ -428,21 +525,27 @@ function async_upload_end (code)
if (req.readyState == 4 && req.status == 200)
{
var res = req.responseText;
if (res == "Error")
if (/^Error/.test(res))
{
pop_failure ();
pop_failure (res);
return;
}
res = res.split ("\n");
var expiryDate = '';
if (async_global_time != 'none')
{
var d = new Date();
if(!add_time_string_to_date(d, async_global_time))
return;
show_link (async_global_url, res[0], res[1], res[2], d.toString());
// convert time (local time + selected expiry date)
var localDatetime = new Date();
if(!add_time_string_to_date(localDatetime, async_global_time)) {
pop_failure ('Error: Date can not be parsed');
return;
}
expiryDate = localDatetime;
}
else
show_link (async_global_url, res[0], res[1], res[2]);
show_link (async_global_url, res[0], res[1], res[2], expiryDate);
}
}
req.open ("POST", async_global_url + 'script.php?end_async' , true);
@ -615,3 +718,9 @@ function upload_speed_refresh_limiter(speed_str)
}
return upload_speed_refresh_limiter_last_value;
}
// document.ready()
document.addEventListener('DOMContentLoaded', function(event) {
// Search for all datetime fields and convert the time to local timezone
convertAllDatetimeFields();
});

File diff suppressed because it is too large Load Diff

View File

@ -1,111 +1,118 @@
<?php
/*
* Jirafeau, your web file repository
* 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
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* 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 <https://www.gnu.org/licenses/>.
*/
global $languages_list;
$languages_list = array ('auto' => 'Automatic',
'de' => 'Deutsch',
'en' => 'English',
'el' => 'Ελληνικά',
'es' => 'Español',
'hu' => 'Magyar',
'fi' => 'Suomi',
'fr' => 'Français',
'it' => 'Italiano',
'nl' => 'Nederlands',
'ro' => 'Limba română',
'ru' => 'ру́сский',
'sk' => 'Slovenčina',
'zh' => '汉语');
/* Translation */
function t ($text)
{
$cfg = $GLOBALS['cfg'];
$languages_list = $GLOBALS['languages_list'];
/* Detect user's langage if we are in automatic mode. */
if (strcmp ($cfg['lang'], 'auto') == 0)
{
if (isset ($_SERVER['HTTP_ACCEPT_LANGUAGE']))
$l = substr ($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
else
$l = "en";
}
else
$l = $cfg['lang'];
/* Is the langage in the list ? */
$found = false;
foreach ($languages_list as $key => $v)
if (strcmp ($l, $key) == 0)
$found = true;
/* Don't translate english. */
if (!($found && strcmp ($l, "en")))
return $text;
/* Open translation file. */
$trans_j = file_get_contents (JIRAFEAU_ROOT . "lib/locales/$l.json");
if ($trans_j === FALSE)
return $text;
/* Decode JSON. */
$trans = json_decode ($trans_j, true);
if ($trans === NULL)
return $text;
/* Try to find translation. */
if (!array_key_exists ($text, $trans))
return $text;
return $trans[$text];
}
function json_lang_generator ()
{
$cfg = $GLOBALS['cfg'];
$languages_list = $GLOBALS['languages_list'];
/* Detect user's langage if we are in automatic mode. */
if (strcmp ($cfg['lang'], 'auto') == 0)
{
if (isset ($_SERVER['HTTP_ACCEPT_LANGUAGE']))
$l = substr ($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
else
$l = "en";
}
else
$l = $cfg['lang'];
/* Is the langage in the list ? */
$found = false;
foreach ($languages_list as $key => $v)
if (strcmp ($l, $key) == 0)
$found = true;
/* Don't translate english. */
if (!($found && strcmp ($l, "en")))
return "{}";
/* Open translation file. */
$trans_j = file_get_contents (JIRAFEAU_ROOT . "lib/locales/$l.json");
return $trans_j;
}
?>
<?php
/*
* Jirafeau, your web file repository
* 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
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* 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 <https://www.gnu.org/licenses/>.
*/
global $languages_list;
$languages_list = array('auto' => 'Automatic',
'de' => 'Deutsch',
'en' => 'English',
'el' => 'Ελληνικά',
'es' => 'Español',
'hu' => 'Magyar',
'fi' => 'Suomi',
'fr' => 'Français',
'it' => 'Italiano',
'nl' => 'Nederlands',
'ro' => 'Limba română',
'ru' => 'ру́сский',
'sk' => 'Slovenčina',
'zh' => '汉语');
/* Translation */
function t($text)
{
$cfg = $GLOBALS['cfg'];
$languages_list = $GLOBALS['languages_list'];
/* Detect user's langage if we are in automatic mode. */
if (strcmp($cfg['lang'], 'auto') == 0) {
if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
$l = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
} else {
$l = "en";
}
} else {
$l = $cfg['lang'];
}
/* Is the langage in the list ? */
$found = false;
foreach ($languages_list as $key => $v) {
if (strcmp($l, $key) == 0) {
$found = true;
}
}
/* Don't translate english. */
if (!($found && strcmp($l, "en"))) {
return $text;
}
/* Open translation file. */
$trans_j = file_get_contents(JIRAFEAU_ROOT . "lib/locales/$l.json");
if ($trans_j === false) {
return $text;
}
/* Decode JSON. */
$trans = json_decode($trans_j, true);
if ($trans === null) {
return $text;
}
/* Try to find translation. */
if (!array_key_exists($text, $trans)) {
return $text;
}
return $trans[$text];
}
function json_lang_generator()
{
$cfg = $GLOBALS['cfg'];
$languages_list = $GLOBALS['languages_list'];
/* Detect user's langage if we are in automatic mode. */
if (strcmp($cfg['lang'], 'auto') == 0) {
if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
$l = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
} else {
$l = "en";
}
} else {
$l = $cfg['lang'];
}
/* Is the langage in the list ? */
$found = false;
foreach ($languages_list as $key => $v) {
if (strcmp($l, $key) == 0) {
$found = true;
}
}
/* Don't translate english. */
if (!($found && strcmp($l, "en"))) {
return "{}";
}
/* Open translation file. */
$trans_j = file_get_contents(JIRAFEAU_ROOT . "lib/locales/$l.json");
return $trans_j;
}

View File

@ -1,112 +1,112 @@
{
"Access denied": "",
"Action": "",
"Actions": "",
"Admin interface": "",
"Administration password": "",
"An error occurred.": "",
"Base address": "",
"By using our services, you accept our": "",
"Choose the default language": "",
"Clean": "",
"Clean expired files": "",
"Clean old unfinished transfers": "",
"Data directory": "",
"Del file and links": "",
"Del link": "",
"Delete link": "",
"Deleted links": "",
"Direct download link": "",
"Download": "",
"Download page": "",
"Expire": "",
"File has been deleted.": "",
"File is too big": "",
"File not available.": "",
"File size is limited to": "",
"File uploaded !": "",
"Filename": "",
"Finalisation": "",
"Give the password of this file": "",
"Here is a solution": "",
"Information": "",
"Installation of Jirafeau": "",
"Installer script still present": "",
"Internal error during file creation.": "",
"Jirafeau Project": "",
"Jirafeau has an administration interface (through admin.php). You can set a password to access the interface or leave it empty to disable the interface.": "",
"Jirafeau is internationalised. Choose a specific langage or choose Automatic (langage is provided by user's browser).": "",
"Jirafeau is now fully operational": "",
"Jirafeau is setting the website according to the configuration you provided.": "",
"Jirafeau, your web file repository": "",
"Link deleted": "",
"List": "",
"List all files": "",
"Login": "",
"Logout": "",
"Maximum file size": "",
"Next step": "",
"None": "",
"Number of cleaned files": "",
"One day": "",
"One hour": "",
"One minute": "",
"One month": "",
"One time download": "",
"One week": "",
"One year": "",
"Onetime": "",
"Origin": "",
"Password": "",
"Password protection": "",
"Please make sure to delete the installer script \"install.php\" before continuing.": "",
"Preview": "",
"Previous step": "",
"Retry this step": "",
"Search": "",
"Search a specific link": "",
"Search files by file hash": "",
"Search files by name": "",
"Select a file": "",
"Send": "",
"Size": "",
"Sorry, the admin interface is not enabled.": "",
"Sorry, the requested file is not found": "",
"Sorry, you are not authenticated on admin interface.": "",
"Term Of Service": "",
"The async directory is not writable!": "",
"The base address of Jirafeau is the first part of the URL, until (and including) the last slash. For example: \"http://www.example.com/\". Do not forget the trailing slash!": "",
"The data directory is where your files and information about your files will be stored. You should put it outside your web site, or at least restrict the access to this directory. Do not forget the trailing slash!": "",
"The file directory is not writable": "",
"The following directory could not be created": "",
"The following directory is not writable": "",
"The link directory is not writable": "",
"The local configuration file could not be created. Create a <code>lib/config.local.php</code> file and give the write permission to the web server (preferred solution), or give the write permission to the web server on the <code>lib</code> directory.": "",
"The local configuration is not writable by the web server. Give the write permission to the web server on the '<code>lib/config.local.php</code> file.": "",
"The time limit of this file has expired.": "",
"This file is valid until the following date": "",
"This file was generated by the install process. You can edit it. Please see config.original.php to understand the configuration items.": "",
"Time limit": "",
"Type": "",
"Upload date": "",
"Upload password": "",
"Uploading ...": "",
"View link": "",
"Warning, this file will self-destruct after being read": "",
"Wrong password.": "",
"You are about to download": "",
"You are now loggued out": "",
"You should create this directory manually.": "",
"You should give the write permission to the web server on this directory.": "",
"day": "",
"file": "",
"hour": "",
"less than a second": "",
"link": "",
"minute": "",
"out of": "",
"powered by Open-Source project Jirafeau": "",
"second": "",
"step": "",
"Access denied": "",
"Action": "",
"Actions": "",
"Admin interface": "",
"Administration password": "",
"An error occurred.": "",
"Base address": "",
"By using our services, you accept our": "",
"Choose the default language": "",
"Clean": "",
"Clean expired files": "",
"Clean old unfinished transfers": "",
"Data directory": "",
"Del file and links": "",
"Del link": "",
"Delete link": "",
"Deleted links": "",
"Direct download link": "",
"Download": "",
"Download page": "",
"Expire": "",
"File has been deleted.": "",
"File is too big": "",
"File not available.": "",
"File size is limited to": "",
"File uploaded !": "",
"Filename": "",
"Finalisation": "",
"Give the password of this file": "",
"Here is a solution": "",
"Information": "",
"Installation of Jirafeau": "",
"Installer script still present": "",
"Internal error during file creation.": "",
"Jirafeau Project": "",
"Jirafeau has an administration interface (through admin.php). You can set a password to access the interface or leave it empty to disable the interface.": "",
"Jirafeau is internationalised. Choose a specific langage or choose Automatic (langage is provided by user's browser).": "",
"Jirafeau is now fully operational": "",
"Jirafeau is setting the website according to the configuration you provided.": "",
"Jirafeau, your web file repository": "",
"Link deleted": "",
"List": "",
"List all files": "",
"Login": "",
"Logout": "",
"Maximum file size": "",
"Next step": "",
"None": "",
"Number of cleaned files": "",
"One day": "",
"One hour": "",
"One minute": "",
"One month": "",
"One time download": "",
"One week": "",
"One year": "",
"Onetime": "",
"Origin": "",
"Password": "",
"Password protection": "",
"Please make sure to delete the installer script \"install.php\" before continuing.": "",
"Preview": "",
"Previous step": "",
"Retry this step": "",
"Search": "",
"Search a specific link": "",
"Search files by file hash": "",
"Search files by name": "",
"Select a file": "",
"Send": "",
"Size": "",
"Sorry, the admin interface is not enabled.": "",
"Sorry, the requested file is not found": "",
"Sorry, you are not authenticated on admin interface.": "",
"Term Of Service": "",
"The async directory is not writable!": "",
"The base address of Jirafeau is the first part of the URL, until (and including) the last slash. For example: \"http://www.example.com/\". Do not forget the trailing slash!": "",
"The data directory is where your files and information about your files will be stored. You should put it outside your web site, or at least restrict the access to this directory. Do not forget the trailing slash!": "",
"The file directory is not writable": "",
"The following directory could not be created": "",
"The following directory is not writable": "",
"The link directory is not writable": "",
"The local configuration file could not be created. Create a <code>lib/config.local.php</code> file and give the write permission to the web server (preferred solution), or give the write permission to the web server on the <code>lib</code> directory.": "",
"The local configuration is not writable by the web server. Give the write permission to the web server on the '<code>lib/config.local.php</code> file.": "",
"The time limit of this file has expired.": "",
"This file is valid until the following date": "",
"This file was generated by the install process. You can edit it. Please see config.original.php to understand the configuration items.": "",
"Time limit": "",
"Type": "",
"Upload date": "",
"Upload password": "",
"Uploading ...": "",
"View link": "",
"Warning, this file will self-destruct after being read": "",
"Wrong password.": "",
"You are about to download": "",
"You are now loggued out": "",
"You should create this directory manually.": "",
"You should give the write permission to the web server on this directory.": "",
"day": "",
"file": "",
"hour": "",
"less than a second": "",
"link": "",
"minute": "",
"out of": "",
"powered by Open-Source project Jirafeau": "",
"second": "",
"step": "",
"year": ""
}

View File

@ -1,112 +1,112 @@
{
"Access denied": "",
"Action": "",
"Actions": "",
"Admin interface": "",
"Administration password": "",
"An error occurred.": "",
"Base address": "",
"By using our services, you accept our": "",
"Choose the default language": "",
"Clean": "",
"Clean expired files": "",
"Clean old unfinished transfers": "",
"Data directory": "",
"Del file and links": "",
"Del link": "",
"Delete link": "",
"Deleted links": "",
"Direct download link": "",
"Download": "",
"Download page": "",
"Expire": "",
"File has been deleted.": "",
"File is too big": "",
"File not available.": "",
"File size is limited to": "",
"File uploaded !": "",
"Filename": "",
"Finalisation": "",
"Give the password of this file": "",
"Here is a solution": "",
"Information": "",
"Installation of Jirafeau": "",
"Installer script still present": "",
"Internal error during file creation.": "",
"Jirafeau Project": "",
"Jirafeau has an administration interface (through admin.php). You can set a password to access the interface or leave it empty to disable the interface.": "",
"Jirafeau is internationalised. Choose a specific langage or choose Automatic (langage is provided by user's browser).": "",
"Jirafeau is now fully operational": "",
"Jirafeau is setting the website according to the configuration you provided.": "",
"Jirafeau, your web file repository": "",
"Link deleted": "",
"List": "",
"List all files": "",
"Login": "",
"Logout": "",
"Maximum file size": "",
"Next step": "",
"None": "",
"Number of cleaned files": "",
"One day": "",
"One hour": "",
"One minute": "",
"One month": "",
"One time download": "",
"One week": "",
"One year": "",
"Onetime": "",
"Origin": "",
"Password": "",
"Password protection": "",
"Please make sure to delete the installer script \"install.php\" before continuing.": "",
"Preview": "",
"Previous step": "",
"Retry this step": "",
"Search": "",
"Search a specific link": "",
"Search files by file hash": "",
"Search files by name": "",
"Select a file": "",
"Send": "",
"Size": "",
"Sorry, the admin interface is not enabled.": "",
"Sorry, the requested file is not found": "",
"Sorry, you are not authenticated on admin interface.": "",
"Term Of Service": "",
"The async directory is not writable!": "",
"The base address of Jirafeau is the first part of the URL, until (and including) the last slash. For example: \"http://www.example.com/\". Do not forget the trailing slash!": "",
"The data directory is where your files and information about your files will be stored. You should put it outside your web site, or at least restrict the access to this directory. Do not forget the trailing slash!": "",
"The file directory is not writable": "",
"The following directory could not be created": "",
"The following directory is not writable": "",
"The link directory is not writable": "",
"The local configuration file could not be created. Create a <code>lib/config.local.php</code> file and give the write permission to the web server (preferred solution), or give the write permission to the web server on the <code>lib</code> directory.": "",
"The local configuration is not writable by the web server. Give the write permission to the web server on the '<code>lib/config.local.php</code> file.": "",
"The time limit of this file has expired.": "",
"This file is valid until the following date": "",
"This file was generated by the install process. You can edit it. Please see config.original.php to understand the configuration items.": "",
"Time limit": "",
"Type": "",
"Upload date": "",
"Upload password": "",
"Uploading ...": "",
"View link": "",
"Warning, this file will self-destruct after being read": "",
"Wrong password.": "",
"You are about to download": "",
"You are now loggued out": "",
"You should create this directory manually.": "",
"You should give the write permission to the web server on this directory.": "",
"day": "",
"file": "",
"hour": "",
"less than a second": "",
"link": "",
"minute": "",
"out of": "",
"powered by Open-Source project Jirafeau": "",
"second": "",
"step": "",
"Access denied": "",
"Action": "",
"Actions": "",
"Admin interface": "",
"Administration password": "",
"An error occurred.": "",
"Base address": "",
"By using our services, you accept our": "",
"Choose the default language": "",
"Clean": "",
"Clean expired files": "",
"Clean old unfinished transfers": "",
"Data directory": "",
"Del file and links": "",
"Del link": "",
"Delete link": "",
"Deleted links": "",
"Direct download link": "",
"Download": "",
"Download page": "",
"Expire": "",
"File has been deleted.": "",
"File is too big": "",
"File not available.": "",
"File size is limited to": "",
"File uploaded !": "",
"Filename": "",
"Finalisation": "",
"Give the password of this file": "",
"Here is a solution": "",
"Information": "",
"Installation of Jirafeau": "",
"Installer script still present": "",
"Internal error during file creation.": "",
"Jirafeau Project": "",
"Jirafeau has an administration interface (through admin.php). You can set a password to access the interface or leave it empty to disable the interface.": "",
"Jirafeau is internationalised. Choose a specific langage or choose Automatic (langage is provided by user's browser).": "",
"Jirafeau is now fully operational": "",
"Jirafeau is setting the website according to the configuration you provided.": "",
"Jirafeau, your web file repository": "",
"Link deleted": "",
"List": "",
"List all files": "",
"Login": "",
"Logout": "",
"Maximum file size": "",
"Next step": "",
"None": "",
"Number of cleaned files": "",
"One day": "",
"One hour": "",
"One minute": "",
"One month": "",
"One time download": "",
"One week": "",
"One year": "",
"Onetime": "",
"Origin": "",
"Password": "",
"Password protection": "",
"Please make sure to delete the installer script \"install.php\" before continuing.": "",
"Preview": "",
"Previous step": "",
"Retry this step": "",
"Search": "",
"Search a specific link": "",
"Search files by file hash": "",
"Search files by name": "",
"Select a file": "",
"Send": "",
"Size": "",
"Sorry, the admin interface is not enabled.": "",
"Sorry, the requested file is not found": "",
"Sorry, you are not authenticated on admin interface.": "",
"Term Of Service": "",
"The async directory is not writable!": "",
"The base address of Jirafeau is the first part of the URL, until (and including) the last slash. For example: \"http://www.example.com/\". Do not forget the trailing slash!": "",
"The data directory is where your files and information about your files will be stored. You should put it outside your web site, or at least restrict the access to this directory. Do not forget the trailing slash!": "",
"The file directory is not writable": "",
"The following directory could not be created": "",
"The following directory is not writable": "",
"The link directory is not writable": "",
"The local configuration file could not be created. Create a <code>lib/config.local.php</code> file and give the write permission to the web server (preferred solution), or give the write permission to the web server on the <code>lib</code> directory.": "",
"The local configuration is not writable by the web server. Give the write permission to the web server on the '<code>lib/config.local.php</code> file.": "",
"The time limit of this file has expired.": "",
"This file is valid until the following date": "",
"This file was generated by the install process. You can edit it. Please see config.original.php to understand the configuration items.": "",
"Time limit": "",
"Type": "",
"Upload date": "",
"Upload password": "",
"Uploading ...": "",
"View link": "",
"Warning, this file will self-destruct after being read": "",
"Wrong password.": "",
"You are about to download": "",
"You are now loggued out": "",
"You should create this directory manually.": "",
"You should give the write permission to the web server on this directory.": "",
"day": "",
"file": "",
"hour": "",
"less than a second": "",
"link": "",
"minute": "",
"out of": "",
"powered by Open-Source project Jirafeau": "",
"second": "",
"step": "",
"year": ""
}

View File

@ -1,107 +1,107 @@
{
"Access denied": "Přístup zamítnut",
"Action": "Akce",
"Actions": "Akce",
"Admin interface": "Administrační rozhraní",
"Administration password": "Heslo do administrace",
"An error occurred.": "Chyba.",
"Base address": "",
"By using our services, you accept our": "",
"Choose the default language": "Zvolte výchozí jazyk",
"Clean": "Vyčistit",
"Clean expired files": "Vyčistit soubory, které vypršely",
"Clean old unfinished transfers": "Vyčistit nedokončené přenosy",
"Data directory": "Data adresář",
"Del file and links": "",
"Del link": "",
"Delete link": "Odkaz na smazání",
"Deleted links": "Smazané odkazy",
"Direct download link": "Přímý odkaz na stažení",
"Download": "Stáhnout",
"Download page": "",
"Expire": "Vyprší",
"File has been deleted.": "Soubor byl smazán.",
"File is too big": "Soubor je moc velký",
"File not available.": "Soubor není dostupný.",
"File size is limited to": "Velikost souboru je limitována na",
"File uploaded !": "Soubor nahrán !",
"Filename": "Název souboru",
"Finalisation": "Dokončování",
"Give the password of this file": "Zadejte heslo k souboru",
"Here is a solution": "",
"Information": "Informace",
"Installation of Jirafeau": "",
"Installer script still present": "Instalační skript je stále přítomen",
"Internal error during file creation.": "Chyba při vytváření souboru.",
"Jirafeau Project": "Jirafeau projekt",
"Jirafeau has an administration interface (through admin.php). You can set a password to access the interface or leave it empty to disable the interface.": "",
"Jirafeau is internationalised. Choose a specific langage or choose Automatic (langage is provided by user's browser).": "Jirafeau je světový. Vyberte si jazyk nebo bude zvolen automaticky (podle uživatelského prohlížeče).",
"Jirafeau is now fully operational": "",
"Jirafeau is setting the website according to the configuration you provided.": "Jirafeau je nastaveno podle zadané konfigurace.",
"Jirafeau, your web file repository": "",
"Link deleted": "Odkaz smazán",
"List": "",
"List all files": "Zobrazit všechny soubory",
"Login": "Přihlášení",
"Logout": "Odhlásit",
"Maximum file size": "Maximální velikost souboru",
"Next step": "",
"None": "",
"Number of cleaned files": "Počet vyčištěných souborů",
"One day": "Den",
"One hour": "Hodinu",
"One minute": "Minutu",
"One month": "Měsíc",
"One time download": "Jednorázové stáhnutí",
"One week": "Týden",
"One year": "Rok",
"Onetime": "Jednorázové",
"Origin": "Původ",
"Password": "Heslo",
"Password protection": "",
"Please make sure to delete the installer script \"install.php\" before continuing.": "Prosím ujistěte se, že jste odstranili soubor \"install.php\" předtím než budete pokračovat.",
"Preview": "Náhled",
"Previous step": "Přechozí krok",
"Retry this step": "Zkusit znovu",
"Search": "Hledat",
"Search a specific link": "Hledat odkaz",
"Search files by file hash": "Hledat soubory podle hashe",
"Search files by name": "Hledat podle názvu",
"Select a file": "Vybrat soubor",
"Send": "Odeslat",
"Size": "Velikost",
"Sorry, the admin interface is not enabled.": "Omlouváme se, administrační rozhraní není povoleno.",
"Sorry, the requested file is not found": "Omlouváme se, ale soubor se nepovedlo nalézt",
"Sorry, you are not authenticated on admin interface.": "",
"Term Of Service": "Podmínky použití",
"The async directory is not writable!": "Do adresáře async se nedá zapisovat!",
"The base address of Jirafeau is the first part of the URL, until (and including) the last slash. For example: \"http://www.example.com/\". Do not forget the trailing slash!": "",
"The data directory is where your files and information about your files will be stored. You should put it outside your web site, or at least restrict the access to this directory. Do not forget the trailing slash!": "Adresář s daty kde se nachází soubory a všechny relevantní informace. Doporučujeme tento adresář umístit mimo adresář s webovými stránkami, nebo alespoň omezit práva pro tento adresář. Nezapoměňte na poslední lomítko!",
"The file directory is not writable": "",
"The following directory could not be created": "Tento adresář nemůže být vytvořen",
"The following directory is not writable": "Do adresáře nelze zapisovat",
"The link directory is not writable": "",
"The local configuration file could not be created. Create a <code>lib/config.local.php</code> file and give the write permission to the web server (preferred solution), or give the write permission to the web server on the <code>lib</code> directory.": "",
"The local configuration is not writable by the web server. Give the write permission to the web server on the '<code>lib/config.local.php</code> file.": "Konfigurace nemůže být změněna webovým serverem. Nastavte práva pro zápis webovému serveru pro soubor '<code>lib/config.local.php</code>'.",
"The time limit of this file has expired.": "Časový limit souboru již vypršel.",
"This file is valid until the following date": "Tento soubor vyprší po následujícím datu",
"This file was generated by the install process. You can edit it. Please see config.original.php to understand the configuration items.": "Tento soubor byl vygenerovaný během instalačního procesu. Můžete jej editovat. Pro konfigurační možnosti se můžete podívat do souboru config.original.php.",
"Time limit": "Časový limit",
"Type": "Typ",
"Upload date": "Datum nahrání",
"Upload password": "",
"Uploading ...": "Nahrávání ...",
"View link": "Zobrazit odkaz",
"Warning, this file will self-destruct after being read": "Pozor, soubor bude smazán jakmile bude přečten",
"Wrong password.": "Špatné heslo.",
"You are about to download": "",
"You are now loggued out": "Odhlášen",
"You should create this directory manually.": "Vytvořte tento adresář manuálně.",
"You should give the write permission to the web server on this directory.": "",
"file": "soubor",
"link": "odkaz",
"out of": "",
"powered by Open-Source project Jirafeau": "poháněno open-source projektem Jirafeau",
"Access denied": "Přístup zamítnut",
"Action": "Akce",
"Actions": "Akce",
"Admin interface": "Administrační rozhraní",
"Administration password": "Heslo do administrace",
"An error occurred.": "Chyba.",
"Base address": "",
"By using our services, you accept our": "",
"Choose the default language": "Zvolte výchozí jazyk",
"Clean": "Vyčistit",
"Clean expired files": "Vyčistit soubory, které vypršely",
"Clean old unfinished transfers": "Vyčistit nedokončené přenosy",
"Data directory": "Data adresář",
"Del file and links": "",
"Del link": "",
"Delete link": "Odkaz na smazání",
"Deleted links": "Smazané odkazy",
"Direct download link": "Přímý odkaz na stažení",
"Download": "Stáhnout",
"Download page": "",
"Expire": "Vyprší",
"File has been deleted.": "Soubor byl smazán.",
"File is too big": "Soubor je moc velký",
"File not available.": "Soubor není dostupný.",
"File size is limited to": "Velikost souboru je limitována na",
"File uploaded !": "Soubor nahrán !",
"Filename": "Název souboru",
"Finalisation": "Dokončování",
"Give the password of this file": "Zadejte heslo k souboru",
"Here is a solution": "",
"Information": "Informace",
"Installation of Jirafeau": "",
"Installer script still present": "Instalační skript je stále přítomen",
"Internal error during file creation.": "Chyba při vytváření souboru.",
"Jirafeau Project": "Jirafeau projekt",
"Jirafeau has an administration interface (through admin.php). You can set a password to access the interface or leave it empty to disable the interface.": "",
"Jirafeau is internationalised. Choose a specific langage or choose Automatic (langage is provided by user's browser).": "Jirafeau je světový. Vyberte si jazyk nebo bude zvolen automaticky (podle uživatelského prohlížeče).",
"Jirafeau is now fully operational": "",
"Jirafeau is setting the website according to the configuration you provided.": "Jirafeau je nastaveno podle zadané konfigurace.",
"Jirafeau, your web file repository": "",
"Link deleted": "Odkaz smazán",
"List": "",
"List all files": "Zobrazit všechny soubory",
"Login": "Přihlášení",
"Logout": "Odhlásit",
"Maximum file size": "Maximální velikost souboru",
"Next step": "",
"None": "",
"Number of cleaned files": "Počet vyčištěných souborů",
"One day": "Den",
"One hour": "Hodinu",
"One minute": "Minutu",
"One month": "Měsíc",
"One time download": "Jednorázové stáhnutí",
"One week": "Týden",
"One year": "Rok",
"Onetime": "Jednorázové",
"Origin": "Původ",
"Password": "Heslo",
"Password protection": "",
"Please make sure to delete the installer script \"install.php\" before continuing.": "Prosím ujistěte se, že jste odstranili soubor \"install.php\" předtím než budete pokračovat.",
"Preview": "Náhled",
"Previous step": "Přechozí krok",
"Retry this step": "Zkusit znovu",
"Search": "Hledat",
"Search a specific link": "Hledat odkaz",
"Search files by file hash": "Hledat soubory podle hashe",
"Search files by name": "Hledat podle názvu",
"Select a file": "Vybrat soubor",
"Send": "Odeslat",
"Size": "Velikost",
"Sorry, the admin interface is not enabled.": "Omlouváme se, administrační rozhraní není povoleno.",
"Sorry, the requested file is not found": "Omlouváme se, ale soubor se nepovedlo nalézt",
"Sorry, you are not authenticated on admin interface.": "",
"Term Of Service": "Podmínky použití",
"The async directory is not writable!": "Do adresáře async se nedá zapisovat!",
"The base address of Jirafeau is the first part of the URL, until (and including) the last slash. For example: \"http://www.example.com/\". Do not forget the trailing slash!": "",
"The data directory is where your files and information about your files will be stored. You should put it outside your web site, or at least restrict the access to this directory. Do not forget the trailing slash!": "Adresář s daty kde se nachází soubory a všechny relevantní informace. Doporučujeme tento adresář umístit mimo adresář s webovými stránkami, nebo alespoň omezit práva pro tento adresář. Nezapoměňte na poslední lomítko!",
"The file directory is not writable": "",
"The following directory could not be created": "Tento adresář nemůže být vytvořen",
"The following directory is not writable": "Do adresáře nelze zapisovat",
"The link directory is not writable": "",
"The local configuration file could not be created. Create a <code>lib/config.local.php</code> file and give the write permission to the web server (preferred solution), or give the write permission to the web server on the <code>lib</code> directory.": "",
"The local configuration is not writable by the web server. Give the write permission to the web server on the '<code>lib/config.local.php</code> file.": "Konfigurace nemůže být změněna webovým serverem. Nastavte práva pro zápis webovému serveru pro soubor '<code>lib/config.local.php</code>'.",
"The time limit of this file has expired.": "Časový limit souboru již vypršel.",
"This file is valid until the following date": "Tento soubor vyprší po následujícím datu",
"This file was generated by the install process. You can edit it. Please see config.original.php to understand the configuration items.": "Tento soubor byl vygenerovaný během instalačního procesu. Můžete jej editovat. Pro konfigurační možnosti se můžete podívat do souboru config.original.php.",
"Time limit": "Časový limit",
"Type": "Typ",
"Upload date": "Datum nahrání",
"Upload password": "",
"Uploading ...": "Nahrávání ...",
"View link": "Zobrazit odkaz",
"Warning, this file will self-destruct after being read": "Pozor, soubor bude smazán jakmile bude přečten",
"Wrong password.": "Špatné heslo.",
"You are about to download": "",
"You are now loggued out": "Odhlášen",
"You should create this directory manually.": "Vytvořte tento adresář manuálně.",
"You should give the write permission to the web server on this directory.": "",
"file": "soubor",
"link": "odkaz",
"out of": "",
"powered by Open-Source project Jirafeau": "poháněno open-source projektem Jirafeau",
"step": "krok",
"year": "",
"day": "",

View File

@ -1,113 +1,113 @@
{
"Access denied": "Zugriff verweigert",
"Action": "Aktion",
"Actions": "Aktionen",
"Admin interface": "Admin-Oberfläche",
"Administration password": "Administrator-Passwort",
"An error occurred.": "Ein Fehler ist aufgetreten.",
"Base address": "Basisadresse",
"By using our services, you accept our": "Durch die Nutzung unserer Dienste, akzeptieren Sie unsere",
"Choose the default language": "Wählen Sie die Standardsprache",
"Clean": "Aufräumen",
"Clean expired files": "Abgelaufene Dateien löschen",
"Clean old unfinished transfers": "Alte unfertige Übertragungen löschen",
"Data directory": "Datenverzeichnis",
"Del file and links": "Datei und Link löschen",
"Del link": "Link löschen",
"Delete link": "Link zum Löschen der Datei",
"Deleted links": "Gelöschte Links",
"Direct download link": "Direkter Download-Link",
"Download": "Herunterladen",
"Download page": "Download-Seite",
"Expire": "Ablauffrist",
"File has been deleted.": "Die Datei wurde gelöscht.",
"File is too big": "Die Datei ist zu groß",
"File not available.": "Datei nicht gefunden.",
"File size is limited to": "Die maximale Dateigröße ist",
"File uploaded !": "Die Datei wurde hochgeladen!",
"Filename": "Dateiname",
"Finalisation": "Fertig",
"Give the password of this file": "Bitte Passwort für diese Datei eingeben",
"Here is a solution": "Hier ist eine Lösung",
"Information": "Information",
"Installation of Jirafeau": "Installation von Jirafeau",
"Installer script still present": "Installer-Skript noch vorhanden",
"Internal error during file creation.": "Interner Fehler während der Dateierstellung.",
"Jirafeau Project": "Jirafeau Projekt",
"Jirafeau has an administration interface (through admin.php). You can set a password to access the interface or leave it empty to disable the interface.": "Jirafeau hat eine Administrations-Oberfläche (durch admin.php). Sie können ein Kennwort zum Zugriff auf die Schnittstelle festlegen oder lassen Sie es leer, um die Schnittstelle zu deaktivieren.",
"Jirafeau is internationalised. Choose a specific langage or choose Automatic (langage is provided by user's browser).": "Jirafeau ist internationalisiert. Wählen Sie eine bestimmte Sprache oder Automatik (die Sprache wird vom Browser des Benutzers bereitgestellt).",
"Jirafeau is now fully operational": "Jirafeau ist nun voll funktionsfähig",
"Jirafeau is setting the website according to the configuration you provided.": "Jirafeau richtet die Webseite entsprechend der Konfiguration, die Sie angegeben haben, ein.",
"Jirafeau, your web file repository": "Jirafeau, Ihr Web-Datei-Speicher",
"Link deleted": "Link gelöscht",
"List": "Auflisten",
"List all files": "Alle Dateien auflisten",
"Login": "Login",
"Logout": "Ausloggen",
"Maximum file size": "Maximale Dateigröße",
"Next step": "Nächster Schritt",
"None": "Nie",
"Number of cleaned files": "Anzahl der gelöschten Dateien",
"One day": "Ein Tag",
"One hour": "Eine Stunde",
"One minute": "Eine Minute",
"One month": "Ein Monat",
"Access denied": "Zugriff verweigert",
"Action": "Aktion",
"Actions": "Aktionen",
"Admin interface": "Admin-Oberfläche",
"Administration password": "Administrator-Passwort",
"An error occurred.": "Ein Fehler ist aufgetreten.",
"Base address": "Basisadresse",
"By using our services, you accept our": "Durch die Nutzung unserer Dienste, akzeptieren Sie unsere",
"Choose the default language": "Wählen Sie die Standardsprache",
"Clean": "Aufräumen",
"Clean expired files": "Abgelaufene Dateien löschen",
"Clean old unfinished transfers": "Alte unfertige Übertragungen löschen",
"Data directory": "Datenverzeichnis",
"Del file and links": "Datei und Link löschen",
"Del link": "Link löschen",
"Delete link": "Link zum Löschen der Datei",
"Deleted links": "Gelöschte Links",
"Direct download link": "Direkter Download-Link",
"Download": "Herunterladen",
"Download page": "Download-Seite",
"Expire": "Ablauffrist",
"File has been deleted.": "Die Datei wurde gelöscht.",
"File is too big": "Die Datei ist zu groß",
"File not available.": "Datei nicht gefunden.",
"File size is limited to": "Die maximale Dateigröße ist",
"File uploaded !": "Die Datei wurde hochgeladen!",
"Filename": "Dateiname",
"Finalisation": "Fertig",
"Give the password of this file": "Bitte Passwort für diese Datei eingeben",
"Here is a solution": "Hier ist eine Lösung",
"Information": "Information",
"Installation of Jirafeau": "Installation von Jirafeau",
"Installer script still present": "Installer-Skript noch vorhanden",
"Internal error during file creation.": "Interner Fehler während der Dateierstellung.",
"Jirafeau Project": "Jirafeau Projekt",
"Jirafeau has an administration interface (through admin.php). You can set a password to access the interface or leave it empty to disable the interface.": "Jirafeau hat eine Administrations-Oberfläche (durch admin.php). Sie können ein Kennwort zum Zugriff auf die Schnittstelle festlegen oder lassen Sie es leer, um die Schnittstelle zu deaktivieren.",
"Jirafeau is internationalised. Choose a specific langage or choose Automatic (langage is provided by user's browser).": "Jirafeau ist internationalisiert. Wählen Sie eine bestimmte Sprache oder Automatik (die Sprache wird vom Browser des Benutzers bereitgestellt).",
"Jirafeau is now fully operational": "Jirafeau ist nun voll funktionsfähig",
"Jirafeau is setting the website according to the configuration you provided.": "Jirafeau richtet die Webseite entsprechend der Konfiguration, die Sie angegeben haben, ein.",
"Jirafeau, your web file repository": "Jirafeau, Ihr Web-Datei-Speicher",
"Link deleted": "Link gelöscht",
"List": "Auflisten",
"List all files": "Alle Dateien auflisten",
"Login": "Login",
"Logout": "Ausloggen",
"Maximum file size": "Maximale Dateigröße",
"Next step": "Nächster Schritt",
"None": "Nie",
"Number of cleaned files": "Anzahl der gelöschten Dateien",
"One day": "Ein Tag",
"One hour": "Eine Stunde",
"One minute": "Eine Minute",
"One month": "Ein Monat",
"One quarter": "Drei Monate",
"One time download": "Einmaliger Download",
"One week": "Eine Woche",
"One year": "Ein Jahr",
"Onetime": "Einmalig",
"Origin": "Ursprung",
"Password": "Passwort",
"Password protection": "Passwort-Schutz",
"Please make sure to delete the installer script \"install.php\" before continuing.": "Bitte achten Sie darauf, das Installationsskript \"install.php\" zu löschen, bevor Sie fortfahren.",
"Preview": "Vorschau",
"Previous step": "Vorheriger Schritt",
"Retry this step": "Diesen Schritt wiederholen",
"Search": "Suchen",
"Search a specific link": "Einen bestimmten Link suchen",
"Search files by file hash": "Suche Dateien nach Dateihash",
"Search files by name": "Dateien nach Name suchen",
"Select a file": "Datei auswählen",
"Send": "Hochladen",
"Size": "Größe",
"Sorry, the admin interface is not enabled.": "Entschuldigung, die Admin-Oberfläche ist deaktiviert.",
"Sorry, the requested file is not found": "Leider wurde die angeforderte Datei nicht gefunden",
"Sorry, you are not authenticated on admin interface.": "Entschuldigung, Sie sind nicht auf der Admin-Oberfläche authentifiziert.",
"Terms of Service": "Allgemeine Geschäftsbedingungen",
"The async directory is not writable!": "Das Async-Verzeichnis ist nicht beschreibbar!",
"The base address of Jirafeau is the first part of the URL, until (and including) the last slash. For example: \"http://www.example.com/\". Do not forget the trailing slash!": "Die Basisadresse von Jirafeau ist der erste Teil der URL, bis (und einschließlich) dem letzten Schrägstrich. Zum Beispiel: \"http://www.example.com/\". Vergessen Sie nicht den abschließenden Schrägstrich!",
"The data directory is where your files and information about your files will be stored. You should put it outside your web site, or at least restrict the access to this directory. Do not forget the trailing slash!": "Das Datenverzeichnis ist, wo Ihre Dateien und Informationen über Ihre Dateien gespeichert werden. Sie sollten dieses Verzeichnis außerhalb Ihrer Webseite setzen, oder zumindest den Zugriff auf dieses Verzeichnis beschränken. Vergessen Sie nicht den abschließenden Schrägstrich!",
"The file directory is not writable": "Das Dateiverzeichnis ist nicht beschreibbar",
"The following directory could not be created": "Der folgende Ordner konnte nicht erstellt werden",
"The following directory is not writable": "Das folgende Verzeichnis ist nicht beschreibbar",
"The link directory is not writable": "Das Link-Verzeichnis ist nicht beschreibbar",
"The local configuration file could not be created. Create a <code>lib/config.local.php</code> file and give the write permission to the web server (preferred solution), or give the write permission to the web server on the <code>lib</code> directory.": "Die lokale Konfiguration-Datei konnte nicht erstellt werden. Erstellen Sie die Datei <code>lib/config.local.php</code> und geben Sie dem Webserver die Schreibberechtigung (bevorzugte Lösung) oder geben Sie dem Webserver die Schreibberechtigung für das <code>Lib</code>-Verzeichnis.",
"The local configuration is not writable by the web server. Give the write permission to the web server on the '<code>lib/config.local.php</code> file.": "Die lokale Konfiguration ist nicht vom Webserver beschreibbar. Geben Sie dem Webserver die Schreibberechtigung für die \"<code>lib/config.local.php</code> Datei.",
"The time limit of this file has expired.": "Die zeitliche Begrenzung dieser Datei ist abgelaufen.",
"This file is valid until the following date": "Diese Datei ist gültig bis",
"This file was generated by the install process. You can edit it. Please see config.original.php to understand the configuration items.": "Diese Datei wurde vom Installationsprozess generiert. Sie können diese bearbeiten. Siehe config.original.php, um die Konfigurationsparameter zu verstehen.",
"Time limit": "Ablauffrist",
"Type": "Typ",
"Upload date": "Datum",
"Upload password": "Passwort",
"Uploading ...": "Lädt hoch ...",
"View link": "Vorschau-Link",
"Warning, this file will self-destruct after being read": "Achtung, diese Datei wird automatisch gelöscht, nachdem diese gelesen wird",
"Wrong password.": "Falsches Passwort.",
"You are about to download": "Es wird heruntergeladen",
"You are now loggued out": "Sie wurden abgemeldet",
"You should create this directory manually.": "Sie sollten dieses Verzeichnis manuell erstellen.",
"You should give the write permission to the web server on this directory.": "Geben Sie dem Webserver die Schreibberechtigung für dieses Verzeichnis.",
"day": "Tag",
"file": "Datei",
"hour": "Stunde",
"less than a second": "weniger als einer Sekunde",
"link": "Link",
"minute": "Minute",
"out of": "von",
"powered by Open-Source project Jirafeau": "angetrieben vom Open-Source-Projekt Jirafeau",
"second": "Sekunde",
"step": "Schritt",
"One time download": "Einmaliger Download",
"One week": "Eine Woche",
"One year": "Ein Jahr",
"Onetime": "Einmalig",
"Origin": "Ursprung",
"Password": "Passwort",
"Password protection": "Passwort-Schutz",
"Please make sure to delete the installer script \"install.php\" before continuing.": "Bitte achten Sie darauf, das Installationsskript \"install.php\" zu löschen, bevor Sie fortfahren.",
"Preview": "Vorschau",
"Previous step": "Vorheriger Schritt",
"Retry this step": "Diesen Schritt wiederholen",
"Search": "Suchen",
"Search a specific link": "Einen bestimmten Link suchen",
"Search files by file hash": "Suche Dateien nach Dateihash",
"Search files by name": "Dateien nach Name suchen",
"Select a file": "Datei auswählen",
"Send": "Hochladen",
"Size": "Größe",
"Sorry, the admin interface is not enabled.": "Entschuldigung, die Admin-Oberfläche ist deaktiviert.",
"Sorry, the requested file is not found": "Leider wurde die angeforderte Datei nicht gefunden",
"Sorry, you are not authenticated on admin interface.": "Entschuldigung, Sie sind nicht auf der Admin-Oberfläche authentifiziert.",
"Terms of Service": "Allgemeine Geschäftsbedingungen",
"The async directory is not writable!": "Das Async-Verzeichnis ist nicht beschreibbar!",
"The base address of Jirafeau is the first part of the URL, until (and including) the last slash. For example: \"http://www.example.com/\". Do not forget the trailing slash!": "Die Basisadresse von Jirafeau ist der erste Teil der URL, bis (und einschließlich) dem letzten Schrägstrich. Zum Beispiel: \"http://www.example.com/\". Vergessen Sie nicht den abschließenden Schrägstrich!",
"The data directory is where your files and information about your files will be stored. You should put it outside your web site, or at least restrict the access to this directory. Do not forget the trailing slash!": "Das Datenverzeichnis ist, wo Ihre Dateien und Informationen über Ihre Dateien gespeichert werden. Sie sollten dieses Verzeichnis außerhalb Ihrer Webseite setzen, oder zumindest den Zugriff auf dieses Verzeichnis beschränken. Vergessen Sie nicht den abschließenden Schrägstrich!",
"The file directory is not writable": "Das Dateiverzeichnis ist nicht beschreibbar",
"The following directory could not be created": "Der folgende Ordner konnte nicht erstellt werden",
"The following directory is not writable": "Das folgende Verzeichnis ist nicht beschreibbar",
"The link directory is not writable": "Das Link-Verzeichnis ist nicht beschreibbar",
"The local configuration file could not be created. Create a <code>lib/config.local.php</code> file and give the write permission to the web server (preferred solution), or give the write permission to the web server on the <code>lib</code> directory.": "Die lokale Konfiguration-Datei konnte nicht erstellt werden. Erstellen Sie die Datei <code>lib/config.local.php</code> und geben Sie dem Webserver die Schreibberechtigung (bevorzugte Lösung) oder geben Sie dem Webserver die Schreibberechtigung für das <code>Lib</code>-Verzeichnis.",
"The local configuration is not writable by the web server. Give the write permission to the web server on the '<code>lib/config.local.php</code> file.": "Die lokale Konfiguration ist nicht vom Webserver beschreibbar. Geben Sie dem Webserver die Schreibberechtigung für die \"<code>lib/config.local.php</code> Datei.",
"The time limit of this file has expired.": "Die zeitliche Begrenzung dieser Datei ist abgelaufen.",
"This file is valid until the following date": "Diese Datei ist gültig bis",
"This file was generated by the install process. You can edit it. Please see config.original.php to understand the configuration items.": "Diese Datei wurde vom Installationsprozess generiert. Sie können diese bearbeiten. Siehe config.original.php, um die Konfigurationsparameter zu verstehen.",
"Time limit": "Ablauffrist",
"Type": "Typ",
"Upload date": "Datum",
"Upload password": "Passwort",
"Uploading ...": "Lädt hoch ...",
"View link": "Vorschau-Link",
"Warning, this file will self-destruct after being read": "Achtung, diese Datei wird automatisch gelöscht, nachdem diese gelesen wird",
"Wrong password.": "Falsches Passwort.",
"You are about to download": "Es wird heruntergeladen",
"You are now loggued out": "Sie wurden abgemeldet",
"You should create this directory manually.": "Sie sollten dieses Verzeichnis manuell erstellen.",
"You should give the write permission to the web server on this directory.": "Geben Sie dem Webserver die Schreibberechtigung für dieses Verzeichnis.",
"day": "Tag",
"file": "Datei",
"hour": "Stunde",
"less than a second": "weniger als einer Sekunde",
"link": "Link",
"minute": "Minute",
"out of": "von",
"powered by Open-Source project Jirafeau": "angetrieben vom Open-Source-Projekt Jirafeau",
"second": "Sekunde",
"step": "Schritt",
"year": "Jahr"
}

View File

@ -1,112 +1,112 @@
{
"Access denied": "Acceso denegado",
"Action": "Acción",
"Actions": "Acciones",
"Admin interface": "Panel de Administración",
"Administration password": "Contraseña de Administración",
"An error occurred.": "Ocurrió un error",
"Base address": "Dirección base",
"By using our services, you accept our": "Al utilizar nuestros servicios, acepta nuestros",
"Choose the default language": "Elija el idioma predeterminado",
"Clean": "Limpiar",
"Clean expired files": "Limpiar archivos caducados",
"Clean old unfinished transfers": "Limpiar las transferencias sin terminar",
"Data directory": "Directorio de datos",
"Del file and links": "Borrar archivos y enlaces",
"Del link": "Borrar enlace",
"Delete link": "Eliminar enlace",
"Deleted links": "Eliminar enlaces",
"Direct download link": "Enlace de descarga directa",
"Download": "Descargar",
"Download page": "Página de descarga",
"Expire": "Expira",
"File has been deleted.": "El archivos ha sido borrado",
"File is too big": "El archivo es demasiado grande",
"File not available.": "Archivo no disponible",
"File size is limited to": "El tamaño del archivo está limitado a",
"File uploaded !": "¡Archivo subido!",
"Filename": "Nombre del archivo",
"Finalisation": "Finalización",
"Give the password of this file": "Contraseña para el archivo",
"Here is a solution": "Aquí hay una solución",
"Information": "Información",
"Installation of Jirafeau": "Instalación de Jirafeau",
"Installer script still present": "El Script de instalación todavía existe",
"Internal error during file creation.": "Error interno durante la creación del archivo",
"Jirafeau Project": "Proyecto Jirafeau",
"Jirafeau has an administration interface (through admin.php). You can set a password to access the interface or leave it empty to disable the interface.": "Jirafeau tiene una panel de administración (a través de admin.php). Puede establecer una contraseña para acceder al panel o dejarla vacía para deshabilitarla.",
"Jirafeau is internationalised. Choose a specific langage or choose Automatic (langage is provided by user's browser).": "Jirafeau es multilenguaje. Elija un idioma o elija automático (el idioma será proporcionado por el navegador utilizado).",
"Jirafeau is now fully operational": "Jirafeau está ahora completamente operativo",
"Jirafeau is setting the website according to the configuration you provided.": "Jirafeau está configurado de acuerdo a la configuración proporcionada.",
"Jirafeau, su repositorio de archivos web": "",
"Link deleted": "Enlace eliminado",
"List": "Lista",
"List all files": "Listar todos los archivos",
"Login": "Iniciar sesión",
"Logout": "Cerrar sesión",
"Maximum file size": "Tamaño máximo de archivo",
"Next step": "Siguiente paso",
"None": "Ninguna",
"Number of cleaned files": "Número de archivos eliminados",
"One day": "Un día",
"One hour": "Una hora",
"One minute": "Un minuto",
"One month": "Un mes",
"One time download": "Descargar una vez",
"One week": "Una semana",
"One year": "Un año",
"Onetime": "Una vez",
"Origin": "Origen",
"Password": "Contraseña",
"Password protection": "Protección por Contraseña",
"Please make sure to delete the installer script \"install.php\" before continuing.": "Asegúrese de borrar el script de instalación \"install.php\" antes de continuar.",
"Preview": "Vista previa",
"Previous step": "Paso anterior",
"Retry this step": "Reintentar este paso",
"Search": "Buscar",
"Search a specific link": "Buscar un enlace específico",
"Search files by file hash": "Buscar archivos por HASH de archivo",
"Search files by name": "Buscar archivos por nombre",
"Select a file": "Seleccione un archivo",
"Send": "Enviar",
"Size": "Tamaño",
"Sorry, the admin interface is not enabled.": "Lo sentimos, el panel de administración no está habilitado.",
"Sorry, the requested file is not found": "Lo sentimos, no se ha encontrado el archivo solicitado",
"Sorry, you are not authenticated on admin interface.": "Lo siento, no estás autenticado en el panel de administración.",
"Term Of Service": "Términos del servicio",
"The async directory is not writable!": "¡No se puede escribir en el directorio asíncrono!",
"The base address of Jirafeau is the first part of the URL, until (and including) the last slash. For example: \"http://www.example.com/\". Do not forget the trailing slash!": "La dirección base de Jirafeau es la primera parte de la URL, hasta (e incluyendo) la última barra diagonal. Por ejemplo: \"http://www.example.com/\". ¡No olvide la barra diagonal de finalización!",
"The data directory is where your files and information about your files will be stored. You should put it outside your web site, or at least restrict the access to this directory. Do not forget the trailing slash!": "El directorio de datos es donde se almacenarán los archivos e información acerca de sus archivos, debe ponerlo fuera de su sitio web o, al menos, restringir el acceso a este directorio. ¡No olvide la barra diagonal!",
"The file directory is not writable": "No se puede escribir en el directorio de archivos.",
"The following directory could not be created": "No se puede crear el siguiente directorio",
"The following directory is not writable": "No puede escribirse en el siguiente directorio",
"The link directory is not writable": "No se pudo crear el siguiente directorio.",
"The local configuration file could not be created. Create a <code>lib/config.local.php</code> file and give the write permission to the web server (preferred solution), or give the write permission to the web server on the <code>lib</code> directory.": "No se pudo crear el archivo de configuración local. Crear un archivo <code>lib/config.local.php</code> y dar el permiso de escritura al servidor web (mejor solución) o dar el permiso de escritura al directorio <code>lib/config.local.php</code>.",
"The local configuration is not writable by the web server. Give the write permission to the web server on the '<code>lib/config.local.php</code> file.": "La configuracíon local no puede ser escrita. Dé permisos de escritura al archivo '<code>lib/config.local.php</code>",
"The time limit of this file has expired.": "El límite de tiempo de este archivo ha finalizado.",
"This file is valid until the following date": "Este archivo es válido hasta la siguiente fecha",
"This file was generated by the install process. You can edit it. Please see config.original.php to understand the configuration items.": "Este archivo ha sido generado por el proceso de instalación. Puede editarlo. Por favor consulte config.original.php para entender los elementos de configuración.",
"Time limit": "Tiempo límite",
"Type": "Tipo",
"Upload date": "Fecha de subida",
"Upload password": "Contraseña de subida",
"Uploading ...": "Subiendo ...",
"View link": "Ver enlace",
"Warning, this file will self-destruct after being read": "Advertencia, este archivo se autodestruirá después de ser leído",
"Wrong password.": "Contraseña incorrecta",
"You are about to download": "Estás a punto de descargar",
"You are now loggued out": "Ahora estás desconectado",
"You should create this directory manually.": "Debes crear este directorio manualmente.",
"You should give the write permission to the web server on this directory.": "Debe dar el permiso de escritura a este directorio",
"day": "día",
"file": "archivo",
"hour": "hora",
"less than a second": "menos de un segundo",
"link": "enlace",
"minute": "minuto",
"out of": "fuera de",
"powered by Open-Source project Jirafeau": "Impulsado por el proyecto Open-Source Jirafeau",
"second": "segundo",
"step": "paso",
"Access denied": "Acceso denegado",
"Action": "Acción",
"Actions": "Acciones",
"Admin interface": "Panel de Administración",
"Administration password": "Contraseña de Administración",
"An error occurred.": "Ocurrió un error",
"Base address": "Dirección base",
"By using our services, you accept our": "Al utilizar nuestros servicios, acepta nuestros",
"Choose the default language": "Elija el idioma predeterminado",
"Clean": "Limpiar",
"Clean expired files": "Limpiar archivos caducados",
"Clean old unfinished transfers": "Limpiar las transferencias sin terminar",
"Data directory": "Directorio de datos",
"Del file and links": "Borrar archivos y enlaces",
"Del link": "Borrar enlace",
"Delete link": "Eliminar enlace",
"Deleted links": "Eliminar enlaces",
"Direct download link": "Enlace de descarga directa",
"Download": "Descargar",
"Download page": "Página de descarga",
"Expire": "Expira",
"File has been deleted.": "El archivos ha sido borrado",
"File is too big": "El archivo es demasiado grande",
"File not available.": "Archivo no disponible",
"File size is limited to": "El tamaño del archivo está limitado a",
"File uploaded !": "¡Archivo subido!",
"Filename": "Nombre del archivo",
"Finalisation": "Finalización",
"Give the password of this file": "Contraseña para el archivo",
"Here is a solution": "Aquí hay una solución",
"Information": "Información",
"Installation of Jirafeau": "Instalación de Jirafeau",
"Installer script still present": "El Script de instalación todavía existe",
"Internal error during file creation.": "Error interno durante la creación del archivo",
"Jirafeau Project": "Proyecto Jirafeau",
"Jirafeau has an administration interface (through admin.php). You can set a password to access the interface or leave it empty to disable the interface.": "Jirafeau tiene una panel de administración (a través de admin.php). Puede establecer una contraseña para acceder al panel o dejarla vacía para deshabilitarla.",
"Jirafeau is internationalised. Choose a specific langage or choose Automatic (langage is provided by user's browser).": "Jirafeau es multilenguaje. Elija un idioma o elija automático (el idioma será proporcionado por el navegador utilizado).",
"Jirafeau is now fully operational": "Jirafeau está ahora completamente operativo",
"Jirafeau is setting the website according to the configuration you provided.": "Jirafeau está configurado de acuerdo a la configuración proporcionada.",
"Jirafeau, su repositorio de archivos web": "",
"Link deleted": "Enlace eliminado",
"List": "Lista",
"List all files": "Listar todos los archivos",
"Login": "Iniciar sesión",
"Logout": "Cerrar sesión",
"Maximum file size": "Tamaño máximo de archivo",
"Next step": "Siguiente paso",
"None": "Ninguna",
"Number of cleaned files": "Número de archivos eliminados",
"One day": "Un día",
"One hour": "Una hora",
"One minute": "Un minuto",
"One month": "Un mes",
"One time download": "Descargar una vez",
"One week": "Una semana",
"One year": "Un año",
"Onetime": "Una vez",
"Origin": "Origen",
"Password": "Contraseña",
"Password protection": "Protección por Contraseña",
"Please make sure to delete the installer script \"install.php\" before continuing.": "Asegúrese de borrar el script de instalación \"install.php\" antes de continuar.",
"Preview": "Vista previa",
"Previous step": "Paso anterior",
"Retry this step": "Reintentar este paso",
"Search": "Buscar",
"Search a specific link": "Buscar un enlace específico",
"Search files by file hash": "Buscar archivos por HASH de archivo",
"Search files by name": "Buscar archivos por nombre",
"Select a file": "Seleccione un archivo",
"Send": "Enviar",
"Size": "Tamaño",
"Sorry, the admin interface is not enabled.": "Lo sentimos, el panel de administración no está habilitado.",
"Sorry, the requested file is not found": "Lo sentimos, no se ha encontrado el archivo solicitado",
"Sorry, you are not authenticated on admin interface.": "Lo siento, no estás autenticado en el panel de administración.",
"Term Of Service": "Términos del servicio",
"The async directory is not writable!": "¡No se puede escribir en el directorio asíncrono!",
"The base address of Jirafeau is the first part of the URL, until (and including) the last slash. For example: \"http://www.example.com/\". Do not forget the trailing slash!": "La dirección base de Jirafeau es la primera parte de la URL, hasta (e incluyendo) la última barra diagonal. Por ejemplo: \"http://www.example.com/\". ¡No olvide la barra diagonal de finalización!",
"The data directory is where your files and information about your files will be stored. You should put it outside your web site, or at least restrict the access to this directory. Do not forget the trailing slash!": "El directorio de datos es donde se almacenarán los archivos e información acerca de sus archivos, debe ponerlo fuera de su sitio web o, al menos, restringir el acceso a este directorio. ¡No olvide la barra diagonal!",
"The file directory is not writable": "No se puede escribir en el directorio de archivos.",
"The following directory could not be created": "No se puede crear el siguiente directorio",
"The following directory is not writable": "No puede escribirse en el siguiente directorio",
"The link directory is not writable": "No se pudo crear el siguiente directorio.",
"The local configuration file could not be created. Create a <code>lib/config.local.php</code> file and give the write permission to the web server (preferred solution), or give the write permission to the web server on the <code>lib</code> directory.": "No se pudo crear el archivo de configuración local. Crear un archivo <code>lib/config.local.php</code> y dar el permiso de escritura al servidor web (mejor solución) o dar el permiso de escritura al directorio <code>lib/config.local.php</code>.",
"The local configuration is not writable by the web server. Give the write permission to the web server on the '<code>lib/config.local.php</code> file.": "La configuracíon local no puede ser escrita. Dé permisos de escritura al archivo '<code>lib/config.local.php</code>",
"The time limit of this file has expired.": "El límite de tiempo de este archivo ha finalizado.",
"This file is valid until the following date": "Este archivo es válido hasta la siguiente fecha",
"This file was generated by the install process. You can edit it. Please see config.original.php to understand the configuration items.": "Este archivo ha sido generado por el proceso de instalación. Puede editarlo. Por favor consulte config.original.php para entender los elementos de configuración.",
"Time limit": "Tiempo límite",
"Type": "Tipo",
"Upload date": "Fecha de subida",
"Upload password": "Contraseña de subida",
"Uploading ...": "Subiendo ...",
"View link": "Ver enlace",
"Warning, this file will self-destruct after being read": "Advertencia, este archivo se autodestruirá después de ser leído",
"Wrong password.": "Contraseña incorrecta",
"You are about to download": "Estás a punto de descargar",
"You are now loggued out": "Ahora estás desconectado",
"You should create this directory manually.": "Debes crear este directorio manualmente.",
"You should give the write permission to the web server on this directory.": "Debe dar el permiso de escritura a este directorio",
"day": "día",
"file": "archivo",
"hour": "hora",
"less than a second": "menos de un segundo",
"link": "enlace",
"minute": "minuto",
"out of": "fuera de",
"powered by Open-Source project Jirafeau": "Impulsado por el proyecto Open-Source Jirafeau",
"second": "segundo",
"step": "paso",
"year": "año"
}

View File

@ -1,108 +1,108 @@
{
"Access denied": "Accès interdit",
"Action": "Action",
"Actions": "Actions",
"Admin interface": "Interface d'administration",
"Administration password": "Mot de passe d'administration",
"An error occurred.": "Une erreur s'est produite.",
"Base address": "Adresse d'origine",
"By using our services, you accept our": "En utilisant nos services, vous acceptez nos",
"Choose the default language": "Choisissez la langue par défaut",
"Clean": "Nettoyage",
"Clean expired files": "Nettoyer les fichiers périmés",
"Clean old unfinished transfers": "Nettoyer les anciens transferts inachevés",
"Data directory": "Dossier de stockage des données",
"Del file and links": "Supprimer fichier et liens",
"Del link": "Supprimer le lien",
"Delete link": "Lien de suppression",
"Deleted links": "Liens supprimés",
"Direct download link": "Lien de téléchargement direct",
"Download": "Télécharger",
"Download page": "Page de téléchargement",
"Expire": "Expiration",
"File has been deleted.": "Le fichier a été supprimé.",
"File is too big": "Le fichier est trop volumineux",
"File not available.": "Fichier non disponible.",
"File size is limited to": "La taille de fichier est limité à",
"File uploaded !": "Fichier envoyé !",
"Filename": "Nom",
"Finalisation": "Finalisation",
"Give the password of this file": "Donnez le mot de passe pour ce fichier",
"Here is a solution": "Une solution possible",
"Information": "Information",
"Installation of Jirafeau": "Installation de Jirafeau",
"Installer script still present": "Le script d'installation est toujours présent",
"Internal error during file creation.": "Erreur interne lors la création de fichier.",
"Jirafeau Project": "Projet Jirafeau",
"Jirafeau has an administration interface (through admin.php). You can set a password to access the interface or leave it empty to disable the interface.": "Jirafeau a une interface d'administration (accessible via admin.php). Vous pouvez saisir un mot de passe pour y accéder ou ne pas en mettre pour désactiver l'accès à l'interface.",
"Jirafeau is internationalised. Choose a specific langage or choose Automatic (langage is provided by user's browser).": "Jirafeau supporte plusieurs langages. Choisissez un langage spécifique ou Automatique (la langue utilisée est alors fournie par le navigateur du visiteur).",
"Jirafeau is now fully operational": "Jirafeau est maintenant utilisable",
"Jirafeau is setting the website according to the configuration you provided.": "Jirafeau se configure selon les paramètres donnés.",
"Jirafeau, your web file repository": "Jirafeau, votre dépôt de fichiers",
"Link deleted": "Lien supprimé",
"List": "Lister",
"List all files": "Lister tous les fichiers",
"Login": "Connexion",
"Logout": "Déconnexion",
"Maximum file size": "Taille maximale",
"Next step": "Étape suivante",
"None": "Aucune",
"Number of cleaned files": "Nombre de fichiers nettoyés",
"One day": "Une journée",
"One hour": "Une heure",
"One minute": "Une minute",
"Access denied": "Accès interdit",
"Action": "Action",
"Actions": "Actions",
"Admin interface": "Interface d'administration",
"Administration password": "Mot de passe d'administration",
"An error occurred.": "Une erreur s'est produite.",
"Base address": "Adresse d'origine",
"By using our services, you accept our": "En utilisant nos services, vous acceptez nos",
"Choose the default language": "Choisissez la langue par défaut",
"Clean": "Nettoyage",
"Clean expired files": "Nettoyer les fichiers périmés",
"Clean old unfinished transfers": "Nettoyer les anciens transferts inachevés",
"Data directory": "Dossier de stockage des données",
"Del file and links": "Supprimer fichier et liens",
"Del link": "Supprimer le lien",
"Delete link": "Lien de suppression",
"Deleted links": "Liens supprimés",
"Direct download link": "Lien de téléchargement direct",
"Download": "Télécharger",
"Download page": "Page de téléchargement",
"Expire": "Expiration",
"File has been deleted.": "Le fichier a été supprimé.",
"File is too big": "Le fichier est trop volumineux",
"File not available.": "Fichier non disponible.",
"File size is limited to": "La taille de fichier est limité à",
"File uploaded !": "Fichier envoyé !",
"Filename": "Nom",
"Finalisation": "Finalisation",
"Give the password of this file": "Donnez le mot de passe pour ce fichier",
"Here is a solution": "Une solution possible",
"Information": "Information",
"Installation of Jirafeau": "Installation de Jirafeau",
"Installer script still present": "Le script d'installation est toujours présent",
"Internal error during file creation.": "Erreur interne lors la création de fichier.",
"Jirafeau Project": "Projet Jirafeau",
"Jirafeau has an administration interface (through admin.php). You can set a password to access the interface or leave it empty to disable the interface.": "Jirafeau a une interface d'administration (accessible via admin.php). Vous pouvez saisir un mot de passe pour y accéder ou ne pas en mettre pour désactiver l'accès à l'interface.",
"Jirafeau is internationalised. Choose a specific langage or choose Automatic (langage is provided by user's browser).": "Jirafeau supporte plusieurs langages. Choisissez un langage spécifique ou Automatique (la langue utilisée est alors fournie par le navigateur du visiteur).",
"Jirafeau is now fully operational": "Jirafeau est maintenant utilisable",
"Jirafeau is setting the website according to the configuration you provided.": "Jirafeau se configure selon les paramètres donnés.",
"Jirafeau, your web file repository": "Jirafeau, votre dépôt de fichiers",
"Link deleted": "Lien supprimé",
"List": "Lister",
"List all files": "Lister tous les fichiers",
"Login": "Connexion",
"Logout": "Déconnexion",
"Maximum file size": "Taille maximale",
"Next step": "Étape suivante",
"None": "Aucune",
"Number of cleaned files": "Nombre de fichiers nettoyés",
"One day": "Une journée",
"One hour": "Une heure",
"One minute": "Une minute",
"One month": "Un mois",
"One quarter": "Trois mois",
"One time download": "Téléchargement unique",
"One week": "Une semaine",
"One year": "Une année",
"Onetime": "Une fois",
"Origin": "Origine",
"Password": "Mot de passe",
"Password protection": "Protection par mot de passe",
"Please make sure to delete the installer script \"install.php\" before continuing.": "Merci de supprimer le fichier \"install.php\" avant de continuer.",
"Preview": "Prévisualiser",
"Previous step": "Étape précédente",
"Retry this step": "Ressayer cette étape",
"Search": "Rechercher",
"Search a specific link": "Rechercher un lien particulier",
"Search files by file hash": "Rechercher par empreinte de fichier",
"Search files by name": "Rechercher les fichiers par leur nom",
"Select a file": "Sélectionner un fichier à envoyer:",
"Send": "Envoyer",
"Size": "Taille",
"Sorry, the admin interface is not enabled.": "Désolé, l'interface d'administration n'est pas activée.",
"Sorry, the requested file is not found": "Désolé, le fichier que vous demandez n'existe pas ou n'existe plus",
"Sorry, you are not authenticated on admin interface.": "Désolé, vous n'êtes pas authentifié sur l'interface d'administration.",
"Term Of Service": "Conditions d'utilisation",
"The async directory is not writable!": "Le dossier 'async' ne peut être écrit ! ",
"The base address of Jirafeau is the first part of the URL, until (and including) the last slash. For example: \"http://www.example.com/\". Do not forget the trailing slash!": "L'adresse d'origine de Jirafeau est la première partie de l'URL (slash de fin inclue). Par exemple: \"http://www.exemple.com/\". N'oubliez pas le slash de fin !",
"The data directory is where your files and information about your files will be stored. You should put it outside your web site, or at least restrict the access to this directory. Do not forget the trailing slash!": "Le dossier \"data\" est là où seront conservés les fichiers ainsi que leurs informations. Ce dossier ne devrait pas être accessible directement par l'utilisateur. N'oubliez pas le slash de fin !",
"The file directory is not writable": "Le dossier 'file' ne peut être écrit",
"The following directory could not be created": "Le dossier suivant ne peut être créé",
"The following directory is not writable": "Le dossier suivant ne peut être créé",
"The link directory is not writable": "Le dossier 'link' ne peut être écrit",
"The local configuration file could not be created. Create a <code>lib/config.local.php</code> file and give the write permission to the web server (preferred solution), or give the write permission to the web server on the <code>lib</code> directory.": "Le fichier de configuration local ne peut être créé. Créez le fichier <code>lib/config.local.php</code> et donnez lui les droits d'écriture par le serveur web (solution préférable) ou bien donnez les accès en écriture au dossier <code>lib</code>.",
"The local configuration is not writable by the web server. Give the write permission to the web server on the '<code>lib/config.local.php</code> file.": "Le fichier de configuration local ne peut être écrit. Donnez les droits d'écriture au fichier <code>lib/config.local.php</code> par le serveur web.",
"The time limit of this file has expired.": "La limite de temps est dépassée.",
"This file is valid until the following date": "Ce fichier est valable jusqu'à la date suivante",
"This file was generated by the install process. You can edit it. Please see config.original.php to understand the configuration items.": "Ce fichier a été généré par le processus d'installation. Vous pouvez l'éditer. Merci de se référer à config.original.php pour comprendre les éléments de configuration.",
"Time limit": "Limite de temps",
"Type": "Type",
"Upload date": "Date denvoi",
"Upload password": "Mot de passe",
"Uploading ...": "Envoi en cours ...",
"View link": "Lien d'affichage",
"Warning, this file will self-destruct after being read": "Attention, ce fichier s'auto-détruira après sa lecture",
"Wrong password.": "Mot de passe invalide.",
"You are about to download": "Vous êtes sur le point de télécharger",
"You are now loggued out": "Vous êtes maintenant déconnecté",
"You should create this directory manually.": "Vous devriez créer manuellement ce dossier.",
"You should give the write permission to the web server on this directory.": "Vous devriez donner le droits d'écriture à ce répertoire pour le rendre accessible par le serveur web.",
"file": "fichier",
"link": "lien",
"out of": "sur",
"powered by Open-Source project Jirafeau": "Propulsé par le projet Open-Source Jirafeau",
"One quarter": "Trois mois",
"One time download": "Téléchargement unique",
"One week": "Une semaine",
"One year": "Une année",
"Onetime": "Une fois",
"Origin": "Origine",
"Password": "Mot de passe",
"Password protection": "Protection par mot de passe",
"Please make sure to delete the installer script \"install.php\" before continuing.": "Merci de supprimer le fichier \"install.php\" avant de continuer.",
"Preview": "Prévisualiser",
"Previous step": "Étape précédente",
"Retry this step": "Ressayer cette étape",
"Search": "Rechercher",
"Search a specific link": "Rechercher un lien particulier",
"Search files by file hash": "Rechercher par empreinte de fichier",
"Search files by name": "Rechercher les fichiers par leur nom",
"Select a file": "Sélectionner un fichier à envoyer:",
"Send": "Envoyer",
"Size": "Taille",
"Sorry, the admin interface is not enabled.": "Désolé, l'interface d'administration n'est pas activée.",
"Sorry, the requested file is not found": "Désolé, le fichier que vous demandez n'existe pas ou n'existe plus",
"Sorry, you are not authenticated on admin interface.": "Désolé, vous n'êtes pas authentifié sur l'interface d'administration.",
"Term Of Service": "Conditions d'utilisation",
"The async directory is not writable!": "Le dossier 'async' ne peut être écrit ! ",
"The base address of Jirafeau is the first part of the URL, until (and including) the last slash. For example: \"http://www.example.com/\". Do not forget the trailing slash!": "L'adresse d'origine de Jirafeau est la première partie de l'URL (slash de fin inclue). Par exemple: \"http://www.exemple.com/\". N'oubliez pas le slash de fin !",
"The data directory is where your files and information about your files will be stored. You should put it outside your web site, or at least restrict the access to this directory. Do not forget the trailing slash!": "Le dossier \"data\" est là où seront conservés les fichiers ainsi que leurs informations. Ce dossier ne devrait pas être accessible directement par l'utilisateur. N'oubliez pas le slash de fin !",
"The file directory is not writable": "Le dossier 'file' ne peut être écrit",
"The following directory could not be created": "Le dossier suivant ne peut être créé",
"The following directory is not writable": "Le dossier suivant ne peut être créé",
"The link directory is not writable": "Le dossier 'link' ne peut être écrit",
"The local configuration file could not be created. Create a <code>lib/config.local.php</code> file and give the write permission to the web server (preferred solution), or give the write permission to the web server on the <code>lib</code> directory.": "Le fichier de configuration local ne peut être créé. Créez le fichier <code>lib/config.local.php</code> et donnez lui les droits d'écriture par le serveur web (solution préférable) ou bien donnez les accès en écriture au dossier <code>lib</code>.",
"The local configuration is not writable by the web server. Give the write permission to the web server on the '<code>lib/config.local.php</code> file.": "Le fichier de configuration local ne peut être écrit. Donnez les droits d'écriture au fichier <code>lib/config.local.php</code> par le serveur web.",
"The time limit of this file has expired.": "La limite de temps est dépassée.",
"This file is valid until the following date": "Ce fichier est valable jusqu'à la date suivante",
"This file was generated by the install process. You can edit it. Please see config.original.php to understand the configuration items.": "Ce fichier a été généré par le processus d'installation. Vous pouvez l'éditer. Merci de se référer à config.original.php pour comprendre les éléments de configuration.",
"Time limit": "Limite de temps",
"Type": "Type",
"Upload date": "Date denvoi",
"Upload password": "Mot de passe",
"Uploading ...": "Envoi en cours ...",
"View link": "Lien d'affichage",
"Warning, this file will self-destruct after being read": "Attention, ce fichier s'auto-détruira après sa lecture",
"Wrong password.": "Mot de passe invalide.",
"You are about to download": "Vous êtes sur le point de télécharger",
"You are now loggued out": "Vous êtes maintenant déconnecté",
"You should create this directory manually.": "Vous devriez créer manuellement ce dossier.",
"You should give the write permission to the web server on this directory.": "Vous devriez donner le droits d'écriture à ce répertoire pour le rendre accessible par le serveur web.",
"file": "fichier",
"link": "lien",
"out of": "sur",
"powered by Open-Source project Jirafeau": "Propulsé par le projet Open-Source Jirafeau",
"step": "étape",
"year": "année",
"day": "jour",

View File

@ -20,39 +20,52 @@
global $cfg;
// Read config files
require (JIRAFEAU_ROOT . 'lib/config.original.php');
if (file_exists(JIRAFEAU_ROOT . 'lib/config.local.php'))
{
// read local copy and merge with original values
$cfgOriginal = $cfg;
require (JIRAFEAU_ROOT . 'lib/config.local.php');
$cfg = array_merge($cfgOriginal, $cfg);
unset($cfgOriginal);
require(JIRAFEAU_ROOT . 'lib/config.original.php');
if (file_exists(JIRAFEAU_ROOT . 'lib/config.local.php')) {
// read local copy and merge with original values
$cfgOriginal = $cfg;
require(JIRAFEAU_ROOT . 'lib/config.local.php');
$cfg = array_merge($cfgOriginal, $cfg);
unset($cfgOriginal);
}
/* Jirafeau constants */
define ('JIRAFEAU_PACKAGE', 'Jirafeau');
define ('JIRAFEAU_VERSION', '2.0.0');
// Set constants
/* Jirafeau package */
define('JIRAFEAU_PACKAGE', 'Jirafeau');
define('JIRAFEAU_VERSION', '3.0.0');
/* Directories. */
define ('VAR_FILES', $cfg['var_root'] . 'files/');
define ('VAR_LINKS', $cfg['var_root'] . 'links/');
define ('VAR_ASYNC', $cfg['var_root'] . 'async/');
define ('VAR_ALIAS', $cfg['var_root'] . 'alias/');
define('VAR_FILES', $cfg['var_root'] . 'files/');
define('VAR_LINKS', $cfg['var_root'] . 'links/');
define('VAR_ASYNC', $cfg['var_root'] . 'async/');
define('VAR_ALIAS', $cfg['var_root'] . 'alias/');
// helping variable to build absolute link to
// root of the domain without handling the URL scheme
$absPrefix = parse_url($cfg['web_root'], PHP_URL_PATH);
if (true === empty($absPrefix)) {
// fallback if installation isnt done yet: relative links to same level on the current page
$absPrefix = './';
}
define('JIRAFEAU_ABSPREFIX', $absPrefix);
/* Useful constants. */
if (!defined ('NL'))
define ('NL', "\n");
if (!defined('NL')) {
define('NL', "\n");
}
if (!defined('QUOTE')) {
define('QUOTE', "'");
}
define ('JIRAFEAU_INFINITY', -1);
define ('JIRAFEAU_MINUTE', 60); // 60
define ('JIRAFEAU_HOUR', 3600); // JIRAFEAU_MINUTE * 60
define ('JIRAFEAU_DAY', 86400); // JIRAFEAU_HOUR * 24
define ('JIRAFEAU_WEEK', 604800); // JIRAFEAU_DAY * 7
define ('JIRAFEAU_MONTH', 2419200); // JIRAFEAU_WEEK * 4
define ('JIRAFEAU_QUARTER', 7257600); // JIRAFEAU_MONTH * 3
define ('JIRAFEAU_YEAR', 29030400); // JIRAFEAU_MONTH * 12
define('JIRAFEAU_INFINITY', -1);
define('JIRAFEAU_MINUTE', 60); // 60
define('JIRAFEAU_HOUR', 3600); // JIRAFEAU_MINUTE * 60
define('JIRAFEAU_DAY', 86400); // JIRAFEAU_HOUR * 24
define('JIRAFEAU_WEEK', 604800); // JIRAFEAU_DAY * 7
define('JIRAFEAU_MONTH', 2419200); // JIRAFEAU_WEEK * 4
define('JIRAFEAU_QUARTER', 7257600); // JIRAFEAU_MONTH * 3
define('JIRAFEAU_YEAR', 29030400); // JIRAFEAU_MONTH * 12
?>
// set UTC as default timezone for all date/time functions
date_default_timezone_set ('UTC');

View File

@ -5,14 +5,13 @@
<?php
echo t('Made with') .
' <a href="https://gitlab.com/mojo42/Jirafeau">' . t('Jirafeau Project') . '</a>' .
' (<a href="https://www.gnu.org/licenses/agpl.html"><abbr title="Affero General Public License">AGPL</abbr>v3</a>)';
' (<a href="https://www.gnu.org/licenses/agpl.html"><abbr title="GNU Affero General Public License v3">AGPL-3.0</abbr></a>)';
?>
<!-- Installation dependend links -->
<?php
if (false === empty($cfg['web_root']))
{
echo ' | ';
echo '<a href="' . $cfg['web_root'] . 'tos.php">' . t('Terms of Service') . '</a>';
if (true == $cfg['installation_done']) {
echo ' | ';
echo '<a href="' . JIRAFEAU_ABSPREFIX . 'tos.php">' . t('Terms of Service') . '</a>';
}
?>
</p>

View File

@ -1,61 +1,19 @@
<?php
header('Vary: Accept');
$content_type = 'text/html; charset=utf-8';
if (isset ($_SERVER['HTTP_ACCEPT']) &&
stristr ($_SERVER['HTTP_ACCEPT'], 'application/xhtml+xml'))
{
$content_type = 'application/xhtml+xml; charset=utf-8';
}
header('Content-Type: ' . $content_type);
header('Content-Type: text/html; charset=utf-8');
header('x-ua-compatible: ie=edge');
$protocol = (bool)is_ssl() ? 'https' : 'http';
if ( !empty($cfg['web_root']) ) {
$cfg['web_root'] = preg_replace('#https?://#', $protocol . '://', $cfg['web_root'], 1);
}
/* Avoids irritating errors with the installer (no conf file is present then). */
if (!isset ($cfg['web_root']))
$web_root = $protocol+'://' . $_SERVER['HTTP_HOST'] . '/';
else
$web_root = $cfg['web_root'];
if (!isset ($cfg['style']))
$style = 'default';
else
$style = $cfg['style'];
if (isset ($_SERVER['HTTP_ACCEPT']) &&
stristr ($_SERVER['HTTP_ACCEPT'], 'application/xhtml+xml'))
{
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<?php
}
else
{
?>
<!DOCTYPE html>
<html>
<?php
}
?>
<head>
<meta charset="utf-8">
<title><?php echo (true === empty($cfg['title']))? t('Jirafeau, your web file repository') : $cfg['title']; ?></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" />
<link href="<?php echo JIRAFEAU_ABSPREFIX . 'media/' . $cfg['style'] . '/style.css.php'; ?>" rel="stylesheet" type="text/css" />
</head>
<body>
<script type="text/javascript" language="Javascript" src="lib/functions.js.php"></script>
<script type="text/javascript" src="<?php echo JIRAFEAU_ABSPREFIX . 'lib/functions.js.php'; ?>"></script>
<div id="content">
<h1>
<a href="<?php echo $web_root; ?>">
<a href="<?php echo JIRAFEAU_ABSPREFIX; ?>">
<?php echo (true === empty($cfg['title']))? t('Jirafeau, your web file repository') : $cfg['title']; ?>
</a>
</h1>

View File

@ -41,7 +41,7 @@ header('Content-type: text/css');
6 = Install
7 = Admin
8 = Download page
========================================================================== */
/* ==========================================================================
@ -157,16 +157,24 @@ input[type="submit"]:focus {
text-align: center;
}
#upload p {
margin: 0;
}
#file_select {
position: absolute;
top: 0;
left: 0;
position: relative;
width: 100%;
height: 100%;
height: 16em;
cursor: pointer;
opacity: 0;
}
#upload.file-selected #file_select {
opacity: 1;
height: 2em;
}
#upload.file-selected fieldset {
background-image: none;
}
/* ==========================================================================
@ -197,7 +205,6 @@ input[type="submit"]:focus {
#options {
position: relative;
z-index: 10;
background: #efebe9;
width: 100%;
height: 90%;
}
@ -214,7 +221,7 @@ input[type="submit"]:focus {
#options input[type="submit"] {
position: relative;
left: 11.2em;
margin: 1em auto;
}
/* ==========================================================================
@ -383,7 +390,7 @@ textarea[readonly="readonly"] + p + p a:focus {
#admin fieldset,
#admin + fieldset {
width: auto;
max-width: 50em;
max-width: 60em;
border: 7px dashed #bcaaa4;
}

View File

@ -1,470 +1,473 @@
/* ==========================================================================
Elegantish Template for Jirafeau V1.1
Based on the standard Courgette template, re-styled by JordyV
JordyValentine.Com
---
Css moved from 'style.css.php', This makes editing things a little nicer, because the Atom editor's sytax highlighting works
better in a plain css file. This is a personal preference, you can move it back to 'style.css.php' and it will work fine.
Images moved to a seperate 'img' directory, this is also personal preference.
---
Provided under the same licence as Jirafeau, as this is originally the 'Courgette' stylesheet, just edited.
========================================================================== */
/* ==========================================================================
Summary
1 = Basic Style
2 = Copyright
3 = Options
4 = Upload
5 = Terms of service
6 = Install
7 = Admin
8 = Download page
========================================================================== */
/* ==========================================================================
1 = Basic Style
========================================================================== */
/* Call Google Fonts */
@import url(https://fonts.googleapis.com/css?family=Open+Sans|Lobster);
body {
background: ##050505;
background-image: url("bg1.png"), url("bg2.png");
background-repeat: repeat-x, repeat;
font-family: 'Lobster', cursive;
color: #ffffff;
margin: 0;
line-height: 1.5;
}
h1 a {
font-family: 'Lobster', cursive;
font-weight: 200;
display: block;
background: url(logo.png) no-repeat;
background-size: 100% 100%;
text-indent: -9999px;
width: 194px;
height: 185px;
margin: 1em auto;
position: relative;
left: 0.4em;
}
h2 {
font-family: 'Lobster', cursive;
text-align: center;
color: #ffffff;
}
fieldset {
border: 0;
padding: 1.5em;
margin: 0 auto;
border-radius: 8px;
width: 20em;
border: 7px dashed rgba(255, 255, 255, 0.7);
min-height: 15em;
min-width: 30em;
position: relative;
}
legend {
padding: 0.5em 1em;
background: #ffffff;
color: #040404;
font-size: 1.2em;
display: block;
min-width: 8em;
text-align: center;
}
table a {
color: #000;
}
table a:hover,
table a:focus {
text-decoration: none;
}
input[type="submit"] {
font-family: 'Lobster', cursive;
background: #157EFB;
border: 0;
padding: 0.4em 2.2em;
font-size: 1.1em;
color: #FFF;
border-bottom: 5px solid #085B69;
cursor: pointer;
margin: 10px;
}
select,
input[type="text"],
input[type="password"] {
font-family: 'Lobster', cursive;
border: 1;
padding: 5px 5px;
font-size: 1em;
}
select { width: 100%; }
input[type="submit"]:hover,
input[type="submit"]:focus {
font-family: 'Lobster', cursive;
border: 0;
position: relative;
top: 5px;
margin-bottom: 15px;
}
.inner {
margin-top: 3em;
}
#upload fieldset {
background: url(upload.png) no-repeat center;
-webkit-transition: all 0.5s ease;
-moz-transition: all 0.5s ease;
-ms-transition: all 0.5s ease;
-o-transition: all 0.5s ease;
transition: all 0.5s ease;
}
#upload fieldset:hover {
border-color: #ffffff;
}
#upload > form {
text-align: center;
}
#file_select {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
cursor: pointer;
opacity: 0;
}
/* ==========================================================================
2 = Copyright
========================================================================== */
#copyright {
font-family: 'Open Sans', sans-serif;
text-align: center;
font-size: 0.7em;
color: #ffffff;
padding-left: 3em;
}
#copyright a {
font-family: 'Open Sans', sans-serif;
color: #ffffff;
text-decoration: none;
}
#copyright a:hover,
#copyright a:focus {
text-decoration: underline;
}
/* ==========================================================================
3 = Options
========================================================================== */
#options {
position: relative;
z-index: 10;
background: transparent;
width: 100%;
height: 90%;
}
#options tr { height: 2.7em; }
#option_table tr:first-child {
width: 100%;
height: 100%;
}
#option_table td:first-child {
}
#options input[type="submit"] {
position: relative;
left: 11.2em;
}
/* ==========================================================================
4 = Upload
========================================================================== */
#upload_finished,
#uploading,
.message,
.info,
.error {
font-family: 'Lobster', cursive;
text-align: center;
color: #ffffff;
padding-left: 3em;
}
#upload_finished > p:nth-child(1) {
font-family: 'Lobster', cursive;
color: #157EFB;
font-weight: bold;
}
#upload_finished div p:nth-child(1) {
font-family: 'Lobster', cursive;
font-weight: bold;
}
#upload_finished a {
font-family: 'Lobster', cursive;
text-decoration: none;
color: #ffffff;
}
#uploading a {
font-family: 'Lobster', cursive;
font-weight: bold;
text-decoration: none;
color: #ffffff;
}
#uploaded_percentage {
font-family: 'Lobster', cursive;
font-size: 2em;
font-weight: bold;
}
#upload_finished a:hover,
#uploading a:hover,
#upload_finished a:focus,
#uploading a:focus {
font-family: 'Lobster', cursive;
text-decoration: underline;
}
.message,
.error {
font-family: 'Lobster', cursive;
color: #f27a00;
font-style: italic;
font-weight: bold;
}
#upload_image_email {
padding-left: 20px;
margin-left: 10px;
background: url(email.png) no-repeat;
}
/* ==========================================================================
5 = Terms of service
========================================================================== */
textarea[readonly="readonly"] {
border: 0;
color: #ffffff;
font-family: 'Open Sans', sans-serif;
background: none;
margin: auto;
display: block;
}
textarea[readonly="readonly"] + p,
textarea[readonly="readonly"] + p + p {
font-family: 'Open Sans', sans-serif;
text-align: center;
color: #ffffff;
}
textarea[readonly="readonly"] + p a,
textarea[readonly="readonly"] + p + p a {
font-family: 'Open Sans', sans-serif;
font-weight: bold;
text-decoration: none;
color: #ffffff;
}
textarea[readonly="readonly"] + p a:hover,
textarea[readonly="readonly"] + p + p a:hover,
textarea[readonly="readonly"] + p a:focus,
textarea[readonly="readonly"] + p + p a:focus {
font-family: 'Open Sans', sans-serif;
text-decoration: underline;
}
/* ==========================================================================
6 = Install
========================================================================== */
#install fieldset,
#install + fieldset {
width: auto;
max-width: 50em;
border: 7px dashed #bcaaa4;
}
#install table,
#install + fieldset table {
width: 100%;
border-collapse: collapse;
}
#install td,
#install + fieldset td {
padding: 0.5em 1em;
border-bottom: 0;
}
#install td:empty {
width: 13.1em;
}
#install table form:nth-child(odd),
#install + fieldset tr:nth-child(odd) {
background: #bcaaa4;
}
#install fieldset > form {
margin-top: 2em;
text-align: center;
}
#install form {
display: table;
width: 100%;
}
#install td:last-child { text-align: left; }
#install .info { width: 19em; }
#install input[type="submit"] {
min-width: 10.5em;
}
#install + fieldset table {
font-size: 0.9em;
}
#install + fieldset td:first-child input[type="submit"] {
background: none;
padding: 0;
color: #000;
font-weight: bold;
border-bottom: 0;
}
#install + fieldset td:first-child input[type="submit"]:hover,
#install + fieldset td:first-child input[type="submit"]:focus {
text-decoration: underline;
}
/* ==========================================================================
7 = Admin
========================================================================== */
#admin fieldset,
#admin + fieldset {
width: auto;
max-width: 50em;
border: 7px dashed #ffffff;
}
#admin table,
#admin + fieldset table {
width: 100%;
border-collapse: collapse;
border-bottom: 2px solid #FFF;
}
#admin td,
#admin + fieldset td {
padding: 0.5em 1em;
border: 0px solid #FFF;
border-bottom: 2px solid #FFF;
}
#admin td:empty {
width: 13.1em;
}
#admin table form:nth-child(odd),
#admin + fieldset tr:nth-child(odd) {
background: transparent;
}
#admin fieldset > form {
margin-top: 2em;
text-align: center;
}
#admin form {
display: table;
width: 100%;
}
#admin td:last-child { text-align: left; }
#admin .info { width: 19em; }
#admin input[type="submit"] {
font-family: 'Lobster', cursive;
min-width: 10.5em;
}
#admin + fieldset table {
font-size: 0.9em;
}
#admin + fieldset td:first-child input[type="submit"] {
font-family: 'Lobster', cursive;
background: none;
padding: 0;
color: #000;
font-weight: bold;
border-bottom: 0;
}
#admin + fieldset td:first-child input[type="submit"]:hover,
#admin + fieldset td:first-child input[type="submit"]:focus {
font-family: 'Lobster', cursive;
text-decoration: underline;
}
/* ==========================================================================
8 = Download page
========================================================================== */
#self_destruct {
font-family: 'Lobster', cursive;
font-weight: bold;
color: red;
background-image: url('pixel_bomb.png');
background-size: 40px 40px;
background-repeat: no-repeat;
padding-left: 40px;
padding-top: 10px;
padding-bottom: 10px;
}
/* ==========================================================================
Elegantish Template for Jirafeau V1.1
Based on the standard Courgette template, re-styled by JordyV
JordyValentine.Com
---
Css moved from 'style.css.php', This makes editing things a little nicer, because the Atom editor's sytax highlighting works
better in a plain css file. This is a personal preference, you can move it back to 'style.css.php' and it will work fine.
Images moved to a seperate 'img' directory, this is also personal preference.
---
Provided under the same licence as Jirafeau, as this is originally the 'Courgette' stylesheet, just edited.
========================================================================== */
/* ==========================================================================
Summary
1 = Basic Style
2 = Copyright
3 = Options
4 = Upload
5 = Terms of service
6 = Install
7 = Admin
8 = Download page
========================================================================== */
/* ==========================================================================
1 = Basic Style
========================================================================== */
/* Call Google Fonts */
@import url(https://fonts.googleapis.com/css?family=Open+Sans|Lobster);
body {
background: ##050505;
background-image: url("bg1.png"), url("bg2.png");
background-repeat: repeat-x, repeat;
font-family: 'Lobster', cursive;
color: #ffffff;
margin: 0;
line-height: 1.5;
}
h1 a {
font-family: 'Lobster', cursive;
font-weight: 200;
display: block;
background: url(logo.png) no-repeat;
background-size: 100% 100%;
text-indent: -9999px;
width: 194px;
height: 185px;
margin: 1em auto;
position: relative;
left: 0.4em;
}
h2 {
font-family: 'Lobster', cursive;
text-align: center;
color: #ffffff;
}
fieldset {
border: 0;
padding: 1.5em;
margin: 0 auto;
border-radius: 8px;
width: 20em;
border: 7px dashed rgba(255, 255, 255, 0.7);
min-height: 15em;
min-width: 30em;
position: relative;
}
legend {
padding: 0.5em 1em;
background: #ffffff;
color: #040404;
font-size: 1.2em;
display: block;
min-width: 8em;
text-align: center;
}
table a {
color: #000;
}
table a:hover,
table a:focus {
text-decoration: none;
}
input[type="submit"] {
font-family: 'Lobster', cursive;
background: #157EFB;
border: 0;
padding: 0.4em 2.2em;
font-size: 1.1em;
color: #FFF;
border-bottom: 5px solid #085B69;
cursor: pointer;
margin: 10px;
}
select,
input[type="text"],
input[type="password"] {
font-family: 'Lobster', cursive;
border: 1;
padding: 5px 5px;
font-size: 1em;
}
select { width: 100%; }
input[type="submit"]:hover,
input[type="submit"]:focus {
font-family: 'Lobster', cursive;
border: 0;
position: relative;
top: 5px;
margin-bottom: 15px;
}
.inner {
margin-top: 3em;
}
#upload fieldset {
background: url(upload.png) no-repeat center;
-webkit-transition: all 0.5s ease;
-moz-transition: all 0.5s ease;
-ms-transition: all 0.5s ease;
-o-transition: all 0.5s ease;
transition: all 0.5s ease;
}
#upload fieldset:hover {
border-color: #ffffff;
}
#upload > form {
text-align: center;
}
#file_select {
position: relative;
width: 100%;
height: 16em;
cursor: pointer;
opacity: 0;
}
#upload.file-selected #file_select {
opacity: 1;
height: 2em;
}
#upload.file-selected fieldset {
background-image: none;
}
/* ==========================================================================
2 = Copyright
========================================================================== */
#copyright {
font-family: 'Open Sans', sans-serif;
text-align: center;
font-size: 0.7em;
color: #ffffff;
padding-left: 3em;
}
#copyright a {
font-family: 'Open Sans', sans-serif;
color: #ffffff;
text-decoration: none;
}
#copyright a:hover,
#copyright a:focus {
text-decoration: underline;
}
/* ==========================================================================
3 = Options
========================================================================== */
#options {
position: relative;
z-index: 10;
background: transparent;
width: 100%;
height: 90%;
}
#options tr { height: 2.7em; }
#option_table tr:first-child {
width: 100%;
height: 100%;
}
#option_table td:first-child {
}
#options input[type="submit"] {
position: relative;
left: 11.2em;
}
/* ==========================================================================
4 = Upload
========================================================================== */
#upload_finished,
#uploading,
.message,
.info,
.error {
font-family: 'Lobster', cursive;
text-align: center;
color: #ffffff;
padding-left: 3em;
}
#upload_finished > p:nth-child(1) {
font-family: 'Lobster', cursive;
color: #157EFB;
font-weight: bold;
}
#upload_finished div p:nth-child(1) {
font-family: 'Lobster', cursive;
font-weight: bold;
}
#upload_finished a {
font-family: 'Lobster', cursive;
text-decoration: none;
color: #ffffff;
}
#uploading a {
font-family: 'Lobster', cursive;
font-weight: bold;
text-decoration: none;
color: #ffffff;
}
#uploaded_percentage {
font-family: 'Lobster', cursive;
font-size: 2em;
font-weight: bold;
}
#upload_finished a:hover,
#uploading a:hover,
#upload_finished a:focus,
#uploading a:focus {
font-family: 'Lobster', cursive;
text-decoration: underline;
}
.message,
.error {
font-family: 'Lobster', cursive;
color: #f27a00;
font-style: italic;
font-weight: bold;
}
#upload_image_email {
padding-left: 20px;
margin-left: 10px;
background: url(email.png) no-repeat;
}
/* ==========================================================================
5 = Terms of service
========================================================================== */
textarea[readonly="readonly"] {
border: 0;
color: #ffffff;
font-family: 'Open Sans', sans-serif;
background: none;
margin: auto;
display: block;
}
textarea[readonly="readonly"] + p,
textarea[readonly="readonly"] + p + p {
font-family: 'Open Sans', sans-serif;
text-align: center;
color: #ffffff;
}
textarea[readonly="readonly"] + p a,
textarea[readonly="readonly"] + p + p a {
font-family: 'Open Sans', sans-serif;
font-weight: bold;
text-decoration: none;
color: #ffffff;
}
textarea[readonly="readonly"] + p a:hover,
textarea[readonly="readonly"] + p + p a:hover,
textarea[readonly="readonly"] + p a:focus,
textarea[readonly="readonly"] + p + p a:focus {
font-family: 'Open Sans', sans-serif;
text-decoration: underline;
}
/* ==========================================================================
6 = Install
========================================================================== */
#install fieldset,
#install + fieldset {
width: auto;
max-width: 50em;
border: 7px dashed #bcaaa4;
}
#install table,
#install + fieldset table {
width: 100%;
border-collapse: collapse;
}
#install td,
#install + fieldset td {
padding: 0.5em 1em;
border-bottom: 0;
}
#install td:empty {
width: 13.1em;
}
#install table form:nth-child(odd),
#install + fieldset tr:nth-child(odd) {
background: #bcaaa4;
}
#install fieldset > form {
margin-top: 2em;
text-align: center;
}
#install form {
display: table;
width: 100%;
}
#install td:last-child { text-align: left; }
#install .info { width: 19em; }
#install input[type="submit"] {
min-width: 10.5em;
}
#install + fieldset table {
font-size: 0.9em;
}
#install + fieldset td:first-child input[type="submit"] {
background: none;
padding: 0;
color: #000;
font-weight: bold;
border-bottom: 0;
}
#install + fieldset td:first-child input[type="submit"]:hover,
#install + fieldset td:first-child input[type="submit"]:focus {
text-decoration: underline;
}
/* ==========================================================================
7 = Admin
========================================================================== */
#admin fieldset,
#admin + fieldset {
width: auto;
max-width: 50em;
border: 7px dashed #ffffff;
}
#admin table,
#admin + fieldset table {
width: 100%;
border-collapse: collapse;
border-bottom: 2px solid #FFF;
}
#admin td,
#admin + fieldset td {
padding: 0.5em 1em;
border: 0px solid #FFF;
border-bottom: 2px solid #FFF;
}
#admin td:empty {
width: 13.1em;
}
#admin table form:nth-child(odd),
#admin + fieldset tr:nth-child(odd) {
background: transparent;
}
#admin fieldset > form {
margin-top: 2em;
text-align: center;
}
#admin form {
display: table;
width: 100%;
}
#admin td:last-child { text-align: left; }
#admin .info { width: 19em; }
#admin input[type="submit"] {
font-family: 'Lobster', cursive;
min-width: 10.5em;
}
#admin + fieldset table {
font-size: 0.9em;
}
#admin + fieldset td:first-child input[type="submit"] {
font-family: 'Lobster', cursive;
background: none;
padding: 0;
color: #000;
font-weight: bold;
border-bottom: 0;
}
#admin + fieldset td:first-child input[type="submit"]:hover,
#admin + fieldset td:first-child input[type="submit"]:focus {
font-family: 'Lobster', cursive;
text-decoration: underline;
}
/* ==========================================================================
8 = Download page
========================================================================== */
#self_destruct {
font-family: 'Lobster', cursive;
font-weight: bold;
color: red;
background-image: url('pixel_bomb.png');
background-size: 40px 40px;
background-repeat: no-repeat;
padding-left: 40px;
padding-top: 10px;
padding-bottom: 10px;
}

View File

@ -1,38 +1,38 @@
<?php
/*
* Jyraphe, your web file repository
* Copyright (C) 2013
* Jerome Jutteau <j.jutteau@gmail.com>
* Jimmy Beauvois <jimmy.beauvois@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
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* 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 <https://www.gnu.org/licenses/>.
*/
/*
* This stylesheet is the default stylesheet for Jyraphe.
* The content is dynamically generated for easier handling.
*/
$dark = '#8B4513';
header('Content-type: text/css');
?>
/* ==========================================================================
Elegantish Template - JordyV - http://jordyvalentine.com/
CSS Seperated from PHP
This is a preference of the template developer, feel free to move it back.
========================================================================== */
@import url(elegantish.css);
<?php
/*
* Jyraphe, your web file repository
* Copyright (C) 2013
* Jerome Jutteau <j.jutteau@gmail.com>
* Jimmy Beauvois <jimmy.beauvois@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
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* 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 <https://www.gnu.org/licenses/>.
*/
/*
* This stylesheet is the default stylesheet for Jyraphe.
* The content is dynamically generated for easier handling.
*/
$dark = '#8B4513';
header('Content-type: text/css');
?>
/* ==========================================================================
Elegantish Template - JordyV - http://jordyvalentine.com/
CSS Seperated from PHP
This is a preference of the template developer, feel free to move it back.
========================================================================== */
@import url(elegantish.css);

View File

@ -22,14 +22,14 @@
* If you don't want this feature, you can simply delete this file from your
* web directory.
*/
define ('JIRAFEAU_ROOT', dirname (__FILE__) . '/');
define('JIRAFEAU_ROOT', dirname(__FILE__) . '/');
require (JIRAFEAU_ROOT . 'lib/settings.php');
require (JIRAFEAU_ROOT . 'lib/functions.php');
require (JIRAFEAU_ROOT . 'lib/lang.php');
require(JIRAFEAU_ROOT . 'lib/settings.php');
require(JIRAFEAU_ROOT . 'lib/functions.php');
require(JIRAFEAU_ROOT . 'lib/lang.php');
global $script_langages;
$script_langages = array ('bash' => 'Bash');
$script_langages = array('bash' => 'Bash');
/* Operations may take a long time.
* Be sure PHP's safe mode is off.
@ -38,70 +38,61 @@ require (JIRAFEAU_ROOT . 'lib/lang.php');
/* Remove errors. */
@error_reporting(0);
if ($_SERVER['REQUEST_METHOD'] == "GET" && count ($_GET) == 0)
{
require (JIRAFEAU_ROOT . 'lib/template/header.php');
check_errors ($cfg);
if (has_error ())
{
show_errors ();
require (JIRAFEAU_ROOT . 'lib/template/footer.php');
if ($_SERVER['REQUEST_METHOD'] == "GET" && count($_GET) == 0) {
require(JIRAFEAU_ROOT . 'lib/template/header.php');
check_errors($cfg);
if (has_error()) {
show_errors();
require(JIRAFEAU_ROOT . 'lib/template/footer.php');
exit;
}
?>
} ?>
<div class="info">
<h2>Scripting interface</h2>
<p>This interface permits to script your uploads and downloads.</p>
<p>See <a href="https://gitlab.com/mojo42/Jirafeau/blob/master/script.php">source code</a> of this interface to get available calls :)</p>
<p>Alternatively, go to <a href="<?php echo $cfg['web_root'] . 'script.php?lang=bash'; ?>">this page</a> to download a bash script.</p>
<p>You may download a preconfigured <a href="<?php echo JIRAFEAU_ABSPREFIX . 'script.php?lang=bash'; ?>">Bash Script</a> to easily send to and get files from the API via command line.</p>
</div>
<br />
<?php
require (JIRAFEAU_ROOT . 'lib/template/footer.php');
require(JIRAFEAU_ROOT . 'lib/template/footer.php');
exit;
}
/* Lets use interface now. */
header('Content-Type: text/plain; charset=utf-8');
check_errors ($cfg);
if (has_error ())
{
check_errors($cfg);
if (has_error()) {
echo 'Error 1';
exit;
}
/* Upload file */
if (isset ($_FILES['file']) && is_writable (VAR_FILES)
&& is_writable (VAR_LINKS))
{
if (!jirafeau_challenge_upload_ip ($cfg, get_ip_address($cfg)))
{
echo 'Error 2';
exit;
if (isset($_FILES['file']) && is_writable(VAR_FILES)
&& is_writable(VAR_LINKS)) {
if (isset ($_POST['upload_password'])) {
if (!jirafeau_challenge_upload($cfg, get_ip_address($cfg), $_POST['upload_password'])) {
echo 'Error 3: Invalid password';
exit;
}
} else {
if (!jirafeau_challenge_upload($cfg, get_ip_address($cfg), null)) {
echo 'Error 2: No password nor allowed IP';
exit;
}
}
if (jirafeau_has_upload_password ($cfg) &&
(!isset ($_POST['upload_password']) ||
!jirafeau_challenge_upload_password ($cfg, $_POST['upload_password'])))
{
echo 'Error 3';
exit;
}
$key = '';
if (isset ($_POST['key']))
if (isset($_POST['key'])) {
$key = $_POST['key'];
}
$time = time ();
if (!isset ($_POST['time']) || !$cfg['availabilities'][$_POST['time']])
{
$time = time();
if (!isset($_POST['time']) || !$cfg['availabilities'][$_POST['time']]) {
echo 'Error 4: The parameter time is invalid.';
exit;
}
else
switch ($_POST['time'])
{
} else {
switch ($_POST['time']) {
case 'minute':
$time += JIRAFEAU_MINUTE;
break;
@ -127,22 +118,21 @@ if (isset ($_FILES['file']) && is_writable (VAR_FILES)
$time = JIRAFEAU_INFINITY;
break;
}
}
// Check file size
if ($cfg['maximal_upload_size'] > 0 &&
$_FILES['file']['size'] > $cfg['maximal_upload_size'] * 1024 * 1024)
{
$_FILES['file']['size'] > $cfg['maximal_upload_size'] * 1024 * 1024) {
echo 'Error 5: Your file exceeds the maximum authorized file size.';
exit;
}
$res = jirafeau_upload ($_FILES['file'],
isset ($_POST['one_time_download']),
$res = jirafeau_upload($_FILES['file'],
isset($_POST['one_time_download']),
$key, $time, get_ip_address($cfg),
$cfg['enable_crypt'], $cfg['link_name_length']);
if (empty($res) || $res['error']['has_error'])
{
if (empty($res) || $res['error']['has_error']) {
echo 'Error 6 ' . $res['error']['why'];
exit;
}
@ -154,91 +144,76 @@ if (isset ($_FILES['file']) && is_writable (VAR_FILES)
/* Print decrypt key. */
echo NL;
echo urlencode($res['crypt_key']);
}
elseif (isset ($_GET['h']))
{
} elseif (isset($_GET['h'])) {
$link_name = $_GET['h'];
$key = '';
if (isset ($_POST['key']))
if (isset($_POST['key'])) {
$key = $_POST['key'];
}
$d = '';
if (isset ($_GET['d']))
if (isset($_GET['d'])) {
$d = $_GET['d'];
}
if (!preg_match ('/[0-9a-zA-Z_-]+$/', $link_name))
{
if (!preg_match('/[0-9a-zA-Z_-]+$/', $link_name)) {
echo 'Error 7';
exit;
}
$link = jirafeau_get_link ($link_name);
if (count ($link) == 0)
{
$link = jirafeau_get_link($link_name);
if (count($link) == 0) {
echo 'Error 8';
exit;
}
if (strlen ($d) > 0 && $d == $link['link_code'])
{
jirafeau_delete_link ($link_name);
if (strlen($d) > 0 && $d == $link['link_code']) {
jirafeau_delete_link($link_name);
echo "Ok";
exit;
}
if ($link['time'] != JIRAFEAU_INFINITY && time () > $link['time'])
{
jirafeau_delete_link ($link_name);
if ($link['time'] != JIRAFEAU_INFINITY && time() > $link['time']) {
jirafeau_delete_link($link_name);
echo 'Error 9';
exit;
}
if (strlen ($link['key']) > 0 && md5 ($key) != $link['key'])
{
sleep (2);
if (strlen($link['key']) > 0 && md5($key) != $link['key']) {
sleep(2);
echo 'Error 10';
exit;
}
$p = s2p ($link['md5']);
if (!file_exists (VAR_FILES . $p . $link['md5']))
{
$p = s2p($link['md5']);
if (!file_exists(VAR_FILES . $p . $link['md5'])) {
echo 'Error 11';
exit;
}
/* Read file. */
header ('Content-Length: ' . $link['file_size']);
header ('Content-Type: ' . $link['mime_type']);
header ('Content-Disposition: attachment; filename="' .
header('Content-Length: ' . $link['file_size']);
header('Content-Type: ' . $link['mime_type']);
header('Content-Disposition: attachment; filename="' .
$link['file_name'] . '"');
$r = fopen (VAR_FILES . $p . $link['md5'], 'r');
while (!feof ($r))
{
print fread ($r, 1024);
$r = fopen(VAR_FILES . $p . $link['md5'], 'r');
while (!feof($r)) {
print fread($r, 1024);
ob_flush();
}
fclose ($r);
fclose($r);
if ($link['onetime'] == 'O')
jirafeau_delete_link ($link_name);
if ($link['onetime'] == 'O') {
jirafeau_delete_link($link_name);
}
exit;
}
elseif (isset ($_GET['get_capacity']))
{
echo min (jirafeau_ini_to_bytes (ini_get ('post_max_size')),
jirafeau_ini_to_bytes (ini_get ('upload_max_filesize')));
}
elseif (isset ($_GET['get_maximal_upload_size']))
{
} elseif (isset($_GET['get_capacity'])) {
echo min(jirafeau_ini_to_bytes(ini_get('post_max_size')),
jirafeau_ini_to_bytes(ini_get('upload_max_filesize')));
} elseif (isset($_GET['get_maximal_upload_size'])) {
echo $cfg['maximal_upload_size'];
}
elseif (isset ($_GET['get_version']))
{
} elseif (isset($_GET['get_version'])) {
echo JIRAFEAU_VERSION;
}
elseif (isset ($_GET['lang']))
{
} elseif (isset($_GET['lang'])) {
$l=$_GET['lang'];
if ($l == "bash")
{
?>
if ($l == "bash") {
?>
#!/bin/bash
# This script has been auto-generated by Jirafeau but you can still edit options below.
@ -382,129 +357,113 @@ elif [ "$1" == "delete" ]; then
$curl $proxy "$2"
fi
<?php
}
else
{
} else {
echo 'Error 12';
exit;
}
}
/* Create alias. */
elseif (isset ($_GET['alias_create']))
{
$ip = get_ip_address($cfg);
if (!jirafeau_challenge_upload_ip ($cfg, $ip))
{
echo 'Error 13';
exit;
elseif (isset($_GET['alias_create'])) {
if (isset($_POST['upload_password'])){
if (!jirafeau_challenge_upload($cfg, get_ip_address($cfg), $_POST['upload_password'])) {
echo 'Error 14: Invalid password';
exit;
}
} else {
if (!jirafeau_challenge_upload($cfg, get_ip_address($cfg), null)) {
echo 'Error 13: No password nor allowed IP';
exit;
}
}
if (jirafeau_has_upload_password ($cfg) &&
(!isset ($_POST['upload_password']) ||
!jirafeau_challenge_upload_password ($cfg, $_POST['upload_password'])))
{
echo 'Error 14';
exit;
}
if (!isset ($_POST['alias']) ||
!isset ($_POST['destination']) ||
!isset ($_POST['password']))
{
if (!isset($_POST['alias']) ||
!isset($_POST['destination']) ||
!isset($_POST['password'])) {
echo 'Error 15';
exit;
}
echo jirafeau_alias_create ($_POST['alias'],
echo jirafeau_alias_create($_POST['alias'],
$_POST['destination'],
$_POST['password'],
$ip);
}
/* Get alias. */
elseif (isset ($_GET['alias_get']))
{
if (!isset ($_POST['alias']))
{
elseif (isset($_GET['alias_get'])) {
if (!isset($_POST['alias'])) {
echo 'Error 16';
exit;
}
echo jirafeau_alias_get ($_POST['alias']);
echo jirafeau_alias_get($_POST['alias']);
}
/* Update alias. */
elseif (isset ($_GET['alias_update']))
{
if (!isset ($_POST['alias']) ||
!isset ($_POST['destination']) ||
!isset ($_POST['password']))
{
elseif (isset($_GET['alias_update'])) {
if (!isset($_POST['alias']) ||
!isset($_POST['destination']) ||
!isset($_POST['password'])) {
echo 'Error 17';
exit;
}
$new_password = '';
if (isset ($_POST['new_password']))
if (isset($_POST['new_password'])) {
$new_password = $_POST['new_password'];
}
echo jirafeau_alias_update ($_POST['alias'],
echo jirafeau_alias_update($_POST['alias'],
$_POST['destination'],
$_POST['password'],
$new_password,
get_ip_address($cfg));
}
/* Delete alias. */
elseif (isset ($_GET['alias_delete']))
{
if (!isset ($_POST['alias']) ||
!isset ($_POST['password']))
{
elseif (isset($_GET['alias_delete'])) {
if (!isset($_POST['alias']) ||
!isset($_POST['password'])) {
echo 'Error 18';
exit;
}
echo jirafeau_alias_delete ($_POST['alias'],
echo jirafeau_alias_delete($_POST['alias'],
$_POST['password']);
}
/* Initialize an asynchronous upload. */
elseif (isset ($_GET['init_async']))
{
if (!jirafeau_challenge_upload_ip ($cfg, get_ip_address($cfg)))
{
echo 'Error 19';
exit;
elseif (isset($_GET['init_async'])) {
if (isset($_POST['upload_password'])){
if (!jirafeau_challenge_upload($cfg, get_ip_address($cfg), $_POST['upload_password'])) {
echo 'Error 20: Invalid password';
exit;
}
} else {
if (!jirafeau_challenge_upload($cfg, get_ip_address($cfg), null)) {
echo 'Error 19: No password nor allowed IP';
exit;
}
}
if (jirafeau_has_upload_password ($cfg) &&
(!isset ($_POST['upload_password']) ||
!jirafeau_challenge_upload_password ($cfg, $_POST['upload_password'])))
{
echo 'Error 20';
exit;
}
if (!isset ($_POST['filename']))
{
if (!isset($_POST['filename'])) {
echo 'Error 21';
exit;
}
$type = '';
if (isset ($_POST['type']))
if (isset($_POST['type'])) {
$type = $_POST['type'];
}
$key = '';
if (isset ($_POST['key']))
if (isset($_POST['key'])) {
$key = $_POST['key'];
}
$time = time ();
if (!isset ($_POST['time']) || !$cfg['availabilities'][$_POST['time']])
{
$time = time();
if (!isset($_POST['time']) || !$cfg['availabilities'][$_POST['time']]) {
echo 'Error 22';
exit;
}
else
switch ($_POST['time'])
{
} else {
switch ($_POST['time']) {
case 'minute':
$time += JIRAFEAU_MINUTE;
break;
@ -530,38 +489,37 @@ elseif (isset ($_GET['init_async']))
$time = JIRAFEAU_INFINITY;
break;
}
echo jirafeau_async_init ($_POST['filename'],
}
echo jirafeau_async_init($_POST['filename'],
$type,
isset ($_POST['one_time_download']),
isset($_POST['one_time_download']),
$key,
$time,
get_ip_address($cfg));
}
/* Continue an asynchronous upload. */
elseif (isset ($_GET['push_async']))
{
if ((!isset ($_POST['ref']))
|| (!isset ($_FILES['data']))
|| (!isset ($_POST['code'])))
elseif (isset($_GET['push_async'])) {
if ((!isset($_POST['ref']))
|| (!isset($_FILES['data']))
|| (!isset($_POST['code']))) {
echo 'Error 23';
else
{
echo jirafeau_async_push ($_POST['ref'],
} else {
echo jirafeau_async_push($_POST['ref'],
$_FILES['data'],
$_POST['code'],
$cfg['maximal_upload_size']);
}
}
/* Finalize an asynchronous upload. */
elseif (isset ($_GET['end_async']))
{
if (!isset ($_POST['ref'])
|| !isset ($_POST['code']))
elseif (isset($_GET['end_async'])) {
if (!isset($_POST['ref'])
|| !isset($_POST['code'])) {
echo 'Error 24';
else
echo jirafeau_async_end ($_POST['ref'], $_POST['code'], $cfg['enable_crypt'], $cfg['link_name_length']);
}
else
} else {
echo jirafeau_async_end($_POST['ref'], $_POST['code'], $cfg['enable_crypt'], $cfg['link_name_length']);
}
} else {
echo 'Error 25';
}
exit;
?>

14
tos.php
View File

@ -16,11 +16,11 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
define ('JIRAFEAU_ROOT', dirname (__FILE__) . '/');
define('JIRAFEAU_ROOT', dirname(__FILE__) . '/');
require (JIRAFEAU_ROOT . 'lib/settings.php');
require (JIRAFEAU_ROOT . 'lib/functions.php');
require (JIRAFEAU_ROOT . 'lib/lang.php');
require(JIRAFEAU_ROOT . 'lib/settings.php');
require(JIRAFEAU_ROOT . 'lib/functions.php');
require(JIRAFEAU_ROOT . 'lib/lang.php');
// Read ToS template
if (is_readable(JIRAFEAU_ROOT . 'lib/tos.local.txt')) {
@ -30,11 +30,9 @@ if (is_readable(JIRAFEAU_ROOT . 'lib/tos.local.txt')) {
}
// Replace markers and print ToS
require (JIRAFEAU_ROOT . 'lib/template/header.php');
require(JIRAFEAU_ROOT . 'lib/template/header.php');
echo '<h2>Terms of Service</h2>';
echo '<div>' . jirafeau_replace_markers($content, true) . '</div>';
require (JIRAFEAU_ROOT . 'lib/template/footer.php');
?>
require(JIRAFEAU_ROOT . 'lib/template/footer.php');