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).
```
.
-├── 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
## 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
![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
## 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```
-
-Note that ```lib/config.local.php``` is auto-generated during the installation.
+System requirements:
+- PHP >= 5.6
+- Optional, but recommended: Git >= 2.7
+- No database required, no mail required
-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.
+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
-## Update
+## Upgrade
-### General
+### General procedure for all versions
-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.2.0 to 2.0.0
+
+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 2.0.0 to 3.0.0
-### From version 1.1 to 1.2.0
+1. No special change to upgrade to 3.0.0
-Nothing particular
+### Troubleshooting
-### from version 1.2.0 to 2.0.0.
+If you have some troubles, consider the following cases
-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
+- 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
## 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.
### 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?
## 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
-
* 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;
}
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"
</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.
@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">
</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">
</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">
</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">
</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">
</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">
</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');
}
?>
* 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;
}
$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
'<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 . '&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 . '&d=1';
+ if (!empty($crypt_key)) {
echo '&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 . '&p=1';
- if (!empty($crypt_key))
+ onclick="document.getElementById('submit_post').action='<?php
+ echo JIRAFEAU_ABSPREFIX . 'f.php?h=' . $link_name . '&p=1';
+ if (!empty($crypt_key)) {
echo '&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>' .
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 . '&d=1';
- if (!empty($crypt_key))
- echo '&k=' . urlencode($crypt_key);
-?>';
+ onclick="document.getElementById('submit_post').action='<?php
+ echo JIRAFEAU_ABSPREFIX . 'f.php?h=' . $link_name . '&d=1';
+ if (!empty($crypt_key)) {
+ echo '&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 . '&p=1';
- if (!empty($crypt_key))
- echo '&k=' . urlencode($crypt_key);
-?>';
+ onclick="document.getElementById('submit_post').action='<?php
+ echo JIRAFEAU_ABSPREFIX . 'f.php?h=' . $link_name . '&p=1';
+ if (!empty($crypt_key)) {
+ echo '&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;
?>
* 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 ();
+ /* 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'];
+ /* 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;
+ }
}
- else
- {
- $_SESSION['admin_auth'] = false;
- echo '<div class="error"><p>' . t('Wrong password.') . '</p></div>';
- require (JIRAFEAU_ROOT.'lib/template/footer.php');
+
+ /* 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;
- }
}
?>
<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>
<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>
</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">
)
);
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
+
}
?>
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'); ?>
* 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) . ';';
}
}
-function
-jirafeau_mkdir ($path)
+function jirafeau_mkdir($path)
{
- return !(!file_exists ($path) && !@mkdir ($path, 0755));
+ return !(!file_exists($path) && !@mkdir($path, 0755));
}
/**
* @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.');
'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;
}
// 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 ' .
}
// 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 ' .
* 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;
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"
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"
?></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>
?></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
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 =
?>" /></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'] . '">' .
break;
}
-require (JIRAFEAU_ROOT . 'lib/template/footer.php');
+require(JIRAFEAU_ROOT . 'lib/template/footer.php');
* 'year': file available for one year
* 'none': unlimited availability
*/
-$cfg['availabilities'] = array (
+$cfg['availabilities'] = array(
'minute' => true,
'hour' => true,
'day' => true,
* or needs to start the installation script
*/
$cfg['installation_done'] = false;
-
-?>
\ No newline at end of file
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
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 + '&d=' + delete_code;
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'))
}
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();
}
}
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);
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];
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;
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);
}
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();
+});
* Transform a string in a path by seperating each letters by a '/'.
* @return path finishing with a '/'
*/
-function
-s2p ($s)
+function s2p($s)
{
$p = '';
- for ($i = 0; $i < strlen ($s); $i++)
+ for ($i = 0; $i < strlen($s); $i++) {
$p .= $s{$i} . '/';
+ }
return $p;
}
* Convert base 16 to base 64
* @returns A string based on 64 characters (0-9, a-z, A-Z, "-" and "_")
*/
-function
-base_16_to_64 ($num)
+function base_16_to_64($num)
{
$m = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_';
- $hex2bin = array ('0000', # 0
+ $hex2bin = array('0000', # 0
'0001', # 1
'0010', # 2
'0011', # 3
$b = '';
$i = 0;
# Convert long hex string to bin.
- $size = strlen ($num);
- for ($i = 0; $i < $size; $i++)
- $b .= $hex2bin{hexdec ($num{$i})};
+ $size = strlen($num);
+ for ($i = 0; $i < $size; $i++) {
+ $b .= $hex2bin{hexdec($num{$i})};
+ }
# Convert long bin to base 64.
$size *= 4;
- for ($i = $size - 6; $i >= 0; $i -= 6)
- $o = $m{bindec (substr ($b, $i, 6))} . $o;
+ for ($i = $size - 6; $i >= 0; $i -= 6) {
+ $o = $m{bindec(substr($b, $i, 6))} . $o;
+ }
# Some few bits remaining ?
- if ($i < 0 && $i > -6)
- $o = $m{bindec (substr ($b, 0, $i + 6))} . $o;
+ if ($i < 0 && $i > -6) {
+ $o = $m{bindec(substr($b, 0, $i + 6))} . $o;
+ }
return $o;
}
* @param $l code length
* @return random code.
*/
-function
-jirafeau_gen_random ($l)
+function jirafeau_gen_random($l)
{
- if ($l <= 0)
+ if ($l <= 0) {
return 42;
+ }
$code="";
- for ($i = 0; $i < $l; $i++)
- $code .= dechex (rand (0, 15));
+ for ($i = 0; $i < $l; $i++) {
+ $code .= dechex(rand(0, 15));
+ }
return $code;
}
-function
-is_ssl() {
- if ( isset($_SERVER['HTTPS']) ) {
- if ( 'on' == strtolower($_SERVER['HTTPS']) ||
- '1' == $_SERVER['HTTPS'] )
+function is_ssl()
+{
+ if (isset($_SERVER['HTTPS'])) {
+ if ('on' == strtolower($_SERVER['HTTPS']) ||
+ '1' == $_SERVER['HTTPS']) {
return true;
- } elseif ( isset($_SERVER['SERVER_PORT']) && ( '443' == $_SERVER['SERVER_PORT'] ) ) {
+ }
+ } elseif (isset($_SERVER['SERVER_PORT']) && ('443' == $_SERVER['SERVER_PORT'])) {
return true;
} elseif (isset($_SERVER['HTTP_X_FORWARDED_PROTO'])) {
- if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
+ if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
return true;
+ }
}
return false;
}
-function
-jirafeau_human_size ($octets)
+function jirafeau_human_size($octets)
+{
+ $u = array('B', 'KB', 'MB', 'GB', 'TB');
+ $o = max($octets, 0);
+ $p = min(floor(($o ? log($o) : 0) / log(1024)), count($u) - 1);
+ $o /= pow(1024, $p);
+ return round($o, 1) . $u[$p];
+}
+
+// Convert UTC timestamp to a datetime field
+function jirafeau_get_datetimefield($timestamp)
{
- $u = array ('B', 'KB', 'MB', 'GB', 'TB');
- $o = max ($octets, 0);
- $p = min (floor (($o ? log ($o) : 0) / log (1024)), count ($u) - 1);
- $o /= pow (1024, $p);
- return round ($o, 1) . $u[$p];
+ $content = '<span class="datetime" data-datetime="' . strftime('%Y-%m-%d %H:%M', $timestamp) . '">'
+ . strftime('%Y-%m-%d %H:%M', $timestamp) . ' (GMT)</span>';
+ return $content;
}
-function
-jirafeau_clean_rm_link ($link)
+function jirafeau_clean_rm_link($link)
{
- $p = s2p ("$link");
- if (file_exists (VAR_LINKS . $p . $link))
- unlink (VAR_LINKS . $p . $link);
+ $p = s2p("$link");
+ if (file_exists(VAR_LINKS . $p . $link)) {
+ unlink(VAR_LINKS . $p . $link);
+ }
$parse = VAR_LINKS . $p;
$scan = array();
- while (file_exists ($parse)
- && ($scan = scandir ($parse))
- && count ($scan) == 2 // '.' and '..' folders => empty.
- && basename ($parse) != basename (VAR_LINKS))
- {
- rmdir ($parse);
- $parse = substr ($parse, 0, strlen($parse) - strlen(basename ($parse)) - 1);
+ while (file_exists($parse)
+ && ($scan = scandir($parse))
+ && count($scan) == 2 // '.' and '..' folders => empty.
+ && basename($parse) != basename(VAR_LINKS)) {
+ rmdir($parse);
+ $parse = substr($parse, 0, strlen($parse) - strlen(basename($parse)) - 1);
}
}
-function
-jirafeau_clean_rm_file ($md5)
+function jirafeau_clean_rm_file($md5)
{
- $p = s2p ("$md5");
+ $p = s2p("$md5");
$f = VAR_FILES . $p . $md5;
- if (file_exists ($f) && is_file ($f))
- unlink ($f);
- if (file_exists ($f . '_count') && is_file ($f . '_count'))
- unlink ($f . '_count');
+ if (file_exists($f) && is_file($f)) {
+ unlink($f);
+ }
+ if (file_exists($f . '_count') && is_file($f . '_count')) {
+ unlink($f . '_count');
+ }
$parse = VAR_FILES . $p;
$scan = array();
- while (file_exists ($parse)
- && ($scan = scandir ($parse))
- && count ($scan) == 2 // '.' and '..' folders => empty.
- && basename ($parse) != basename (VAR_FILES))
- {
- rmdir ($parse);
- $parse = substr ($parse, 0, strlen($parse) - strlen(basename ($parse)) - 1);
+ while (file_exists($parse)
+ && ($scan = scandir($parse))
+ && count($scan) == 2 // '.' and '..' folders => empty.
+ && basename($parse) != basename(VAR_FILES)) {
+ rmdir($parse);
+ $parse = substr($parse, 0, strlen($parse) - strlen(basename($parse)) - 1);
}
}
* @param $value the value from php.ini
* @returns an integer for this value
*/
-function
-jirafeau_ini_to_bytes ($value)
+function jirafeau_ini_to_bytes($value)
{
- $modifier = substr ($value, -1);
- $bytes = substr ($value, 0, -1);
- switch (strtoupper ($modifier))
- {
+ $modifier = substr($value, -1);
+ $bytes = substr($value, 0, -1);
+ switch (strtoupper($modifier)) {
case 'P':
$bytes *= 1024;
case 'T':
* gets the maximum upload size according to php.ini
* @returns the maximum upload size in bytes
*/
-function
-jirafeau_get_max_upload_size_bytes ()
+function jirafeau_get_max_upload_size_bytes()
{
- return min (jirafeau_ini_to_bytes (ini_get ('post_max_size')),
- jirafeau_ini_to_bytes (ini_get ('upload_max_filesize')));
+ return min(jirafeau_ini_to_bytes(ini_get('post_max_size')),
+ jirafeau_ini_to_bytes(ini_get('upload_max_filesize')));
}
/**
* gets the maximum upload size according to php.ini
* @returns the maximum upload size string
*/
-function
-jirafeau_get_max_upload_size ()
+function jirafeau_get_max_upload_size()
{
return jirafeau_human_size(
- min (jirafeau_ini_to_bytes (ini_get ('post_max_size')),
- jirafeau_ini_to_bytes (ini_get ('upload_max_filesize'))));
+ min(jirafeau_ini_to_bytes(ini_get('post_max_size')),
+ jirafeau_ini_to_bytes(ini_get('upload_max_filesize'))));
}
/**
* @param $code the error code
* @returns a string explaining the error
*/
-function
-jirafeau_upload_errstr ($code)
+function jirafeau_upload_errstr($code)
{
- switch ($code)
- {
+ switch ($code) {
case UPLOAD_ERR_INI_SIZE:
case UPLOAD_ERR_FORM_SIZE:
return t('Your file exceeds the maximum authorized file size. ');
* @param $link the link's name (hash)
*/
-function
-jirafeau_delete_link ($link)
+function jirafeau_delete_link($link)
{
- $l = jirafeau_get_link ($link);
- if (!count ($l))
+ $l = jirafeau_get_link($link);
+ if (!count($l)) {
return;
+ }
- jirafeau_clean_rm_link ($link);
+ jirafeau_clean_rm_link($link);
$md5 = $l['md5'];
- $p = s2p ("$md5");
+ $p = s2p("$md5");
$counter = 1;
- if (file_exists (VAR_FILES . $p . $md5. '_count'))
- {
- $content = file (VAR_FILES . $p . $md5. '_count');
- $counter = trim ($content[0]);
+ if (file_exists(VAR_FILES . $p . $md5. '_count')) {
+ $content = file(VAR_FILES . $p . $md5. '_count');
+ $counter = trim($content[0]);
}
$counter--;
- if ($counter >= 1)
- {
- $handle = fopen (VAR_FILES . $p . $md5. '_count', 'w');
- fwrite ($handle, $counter);
- fclose ($handle);
+ if ($counter >= 1) {
+ $handle = fopen(VAR_FILES . $p . $md5. '_count', 'w');
+ fwrite($handle, $counter);
+ fclose($handle);
}
- if ($counter == 0)
- jirafeau_clean_rm_file ($md5);
+ if ($counter == 0) {
+ jirafeau_clean_rm_file($md5);
+ }
}
/**
* Delete a file and it's links.
*/
-function
-jirafeau_delete_file ($md5)
+function jirafeau_delete_file($md5)
{
$count = 0;
/* Get all links files. */
- $stack = array (VAR_LINKS);
- while (($d = array_shift ($stack)) && $d != NULL)
- {
- $dir = scandir ($d);
+ $stack = array(VAR_LINKS);
+ while (($d = array_shift($stack)) && $d != null) {
+ $dir = scandir($d);
- foreach ($dir as $node)
- {
- if (strcmp ($node, '.') == 0 || strcmp ($node, '..') == 0 ||
- preg_match ('/\.tmp/i', "$node"))
+ foreach ($dir as $node) {
+ if (strcmp($node, '.') == 0 || strcmp($node, '..') == 0 ||
+ preg_match('/\.tmp/i', "$node")) {
continue;
+ }
- if (is_dir ($d . $node))
- {
+ if (is_dir($d . $node)) {
/* Push new found directory. */
$stack[] = $d . $node . '/';
- }
- elseif (is_file ($d . $node))
- {
+ } elseif (is_file($d . $node)) {
/* Read link informations. */
- $l = jirafeau_get_link (basename ($node));
- if (!count ($l))
+ $l = jirafeau_get_link(basename($node));
+ if (!count($l)) {
continue;
- if ($l['md5'] == $md5)
- {
+ }
+ if ($l['md5'] == $md5) {
$count++;
- jirafeau_delete_link ($node);
+ jirafeau_delete_link($node);
}
}
}
}
- jirafeau_clean_rm_file ($md5);
+ jirafeau_clean_rm_file($md5);
return $count;
}
* 'link' => the link name of the uploaded file
* 'delete_link' => the link code to delete file
*/
-function
-jirafeau_upload ($file, $one_time_download, $key, $time, $ip, $crypt, $link_name_length)
+function jirafeau_upload($file, $one_time_download, $key, $time, $ip, $crypt, $link_name_length)
{
- if (empty ($file['tmp_name']) || !is_uploaded_file ($file['tmp_name']))
- {
+ if (empty($file['tmp_name']) || !is_uploaded_file($file['tmp_name'])) {
return (array(
'error' =>
- array ('has_error' => true,
- 'why' => jirafeau_upload_errstr ($file['error'])),
+ array('has_error' => true,
+ 'why' => jirafeau_upload_errstr($file['error'])),
'link' => '',
'delete_link' => ''));
}
/* array representing no error */
- $noerr = array ('has_error' => false, 'why' => '');
+ $noerr = array('has_error' => false, 'why' => '');
/* Crypt file if option is enabled. */
$crypted = false;
$crypt_key = '';
- if ($crypt == true && !(extension_loaded('mcrypt') == true))
- error_log ("PHP extension mcrypt not loaded, won't encrypt in Jirafeau");
- if ($crypt == true && extension_loaded('mcrypt') == true)
- {
- $crypt_key = jirafeau_encrypt_file ($file['tmp_name'], $file['tmp_name']);
- if (strlen($crypt_key) > 0)
+ if ($crypt == true && !(extension_loaded('mcrypt') == true)) {
+ error_log("PHP extension mcrypt not loaded, won't encrypt in Jirafeau");
+ }
+ if ($crypt == true && extension_loaded('mcrypt') == true) {
+ $crypt_key = jirafeau_encrypt_file($file['tmp_name'], $file['tmp_name']);
+ if (strlen($crypt_key) > 0) {
$crypted = true;
+ }
}
/* file informations */
- $md5 = md5_file ($file['tmp_name']);
- $name = str_replace (NL, '', trim ($file['name']));
+ $md5 = md5_file($file['tmp_name']);
+ $name = str_replace(NL, '', trim($file['name']));
$mime_type = $file['type'];
$size = $file['size'];
/* does file already exist ? */
$rc = false;
- $p = s2p ("$md5");
- if (file_exists (VAR_FILES . $p . $md5))
- {
- $rc = unlink ($file['tmp_name']);
- }
- elseif ((file_exists (VAR_FILES . $p) || @mkdir (VAR_FILES . $p, 0755, true))
- && move_uploaded_file ($file['tmp_name'], VAR_FILES . $p . $md5))
- {
+ $p = s2p("$md5");
+ if (file_exists(VAR_FILES . $p . $md5)) {
+ $rc = unlink($file['tmp_name']);
+ } elseif ((file_exists(VAR_FILES . $p) || @mkdir(VAR_FILES . $p, 0755, true))
+ && move_uploaded_file($file['tmp_name'], VAR_FILES . $p . $md5)) {
$rc = true;
}
- if (!$rc)
- {
+ if (!$rc) {
return (array(
'error' =>
- array ('has_error' => true,
+ array('has_error' => true,
'why' => t('Internal error during file creation.')),
'link' =>'',
'delete_link' => ''));
/* Increment or create count file. */
$counter = 0;
- if (file_exists (VAR_FILES . $p . $md5 . '_count'))
- {
- $content = file (VAR_FILES . $p . $md5. '_count');
- $counter = trim ($content[0]);
+ if (file_exists(VAR_FILES . $p . $md5 . '_count')) {
+ $content = file(VAR_FILES . $p . $md5. '_count');
+ $counter = trim($content[0]);
}
$counter++;
- $handle = fopen (VAR_FILES . $p . $md5. '_count', 'w');
- fwrite ($handle, $counter);
- fclose ($handle);
+ $handle = fopen(VAR_FILES . $p . $md5. '_count', 'w');
+ fwrite($handle, $counter);
+ fclose($handle);
/* Create delete code. */
- $delete_link_code = jirafeau_gen_random (5);
+ $delete_link_code = jirafeau_gen_random(5);
/* md5 password or empty. */
$password = '';
- if (!empty ($key))
- $password = md5 ($key);
+ if (!empty($key)) {
+ $password = md5($key);
+ }
/* create link file */
- $link_tmp_name = VAR_LINKS . $md5 . rand (0, 10000) . '.tmp';
- $handle = fopen ($link_tmp_name, 'w');
- fwrite ($handle,
+ $link_tmp_name = VAR_LINKS . $md5 . rand(0, 10000) . '.tmp';
+ $handle = fopen($link_tmp_name, 'w');
+ fwrite($handle,
$name . NL. $mime_type . NL. $size . NL. $password . NL. $time .
- NL . $md5. NL . ($one_time_download ? 'O' : 'R') . NL . time () .
+ NL . $md5. NL . ($one_time_download ? 'O' : 'R') . NL . time() .
NL . $ip . NL. $delete_link_code . NL . ($crypted ? 'C' : 'O'));
- fclose ($handle);
- $md5_link = substr(base_16_to_64 (md5_file ($link_tmp_name)), 0, $link_name_length);
- $l = s2p ("$md5_link");
- if (!@mkdir (VAR_LINKS . $l, 0755, true) ||
- !rename ($link_tmp_name, VAR_LINKS . $l . $md5_link))
- {
- if (file_exists ($link_tmp_name))
- unlink ($link_tmp_name);
+ fclose($handle);
+ $md5_link = substr(base_16_to_64(md5_file($link_tmp_name)), 0, $link_name_length);
+ $l = s2p("$md5_link");
+ if (!@mkdir(VAR_LINKS . $l, 0755, true) ||
+ !rename($link_tmp_name, VAR_LINKS . $l . $md5_link)) {
+ if (file_exists($link_tmp_name)) {
+ unlink($link_tmp_name);
+ }
$counter--;
- if ($counter >= 1)
- {
- $handle = fopen (VAR_FILES . $p . $md5. '_count', 'w');
- fwrite ($handle, $counter);
- fclose ($handle);
- }
- else
- {
- jirafeau_clean_rm_file ($md5_link);
+ if ($counter >= 1) {
+ $handle = fopen(VAR_FILES . $p . $md5. '_count', 'w');
+ fwrite($handle, $counter);
+ fclose($handle);
+ } else {
+ jirafeau_clean_rm_file($md5_link);
}
return array(
'error' =>
- array ('has_error' => true,
+ array('has_error' => true,
'why' => t('Internal error during file creation. ')),
'link' =>'',
'delete_link' => '');
}
- return array ( 'error' => $noerr,
+ return array( 'error' => $noerr,
'link' => $md5_link,
'delete_link' => $delete_link_code,
'crypt_key' => $crypt_key);
* @param $mime the mime type
* @returns a boolean telling if a mime type is viewable
*/
-function
-jirafeau_is_viewable ($mime)
+function jirafeau_is_viewable($mime)
{
- if (!empty ($mime))
- {
+ if (!empty($mime)) {
/* Actually, verify if mime-type is an image or a text. */
- $viewable = array ('image', 'text', 'video', 'audio');
- $decomposed = explode ('/', $mime);
- return in_array ($decomposed[0], $viewable);
+ $viewable = array('image', 'text', 'video', 'audio');
+ $decomposed = explode('/', $mime);
+ return in_array($decomposed[0], $viewable);
}
return false;
}
// Error handling functions.
//! Global array that contains all registered errors.
-$error_list = array ();
+$error_list = array();
/**
* Adds an error to the list of errors.
* @param $title the error's title
* @param $description is a human-friendly description of the problem.
*/
-function
-add_error ($title, $description)
+function add_error($title, $description)
{
global $error_list;
$error_list[] = '<p>' . $title. '<br />' . $description. '</p>';
* Informs whether any error has been registered yet.
* @return true if there are errors.
*/
-function
-has_error ()
+function has_error()
{
global $error_list;
- return !empty ($error_list);
+ return !empty($error_list);
}
/**
* Displays all the errors.
*/
-function
-show_errors ()
+function show_errors()
{
- if (has_error ())
- {
+ if (has_error()) {
global $error_list;
echo '<div class="error">';
- foreach ($error_list as $error)
- {
+ foreach ($error_list as $error) {
echo $error;
}
echo '</div>';
}
}
-function check_errors ($cfg)
+function check_errors($cfg)
{
- if (file_exists (JIRAFEAU_ROOT . 'install.php')
- && !($cfg['installation_done'] === true))
- {
+ if (file_exists(JIRAFEAU_ROOT . 'install.php')
+ && !($cfg['installation_done'] === true)) {
header('Location: install.php');
exit;
}
/* check if the destination dirs are writable */
- $writable = is_writable (VAR_FILES) && is_writable (VAR_LINKS);
+ $writable = is_writable(VAR_FILES) && is_writable(VAR_LINKS);
/* Checking for errors. */
- if (!is_writable (VAR_FILES))
- add_error (t('The file directory is not writable!'), VAR_FILES);
+ if (!is_writable(VAR_FILES)) {
+ add_error(t('The file directory is not writable!'), VAR_FILES);
+ }
- if (!is_writable (VAR_LINKS))
- add_error (t('The link directory is not writable!'), VAR_LINKS);
+ if (!is_writable(VAR_LINKS)) {
+ add_error(t('The link directory is not writable!'), VAR_LINKS);
+ }
- if (!is_writable (VAR_ASYNC))
- add_error (t('The async directory is not writable!'), VAR_ASYNC);
+ if (!is_writable(VAR_ASYNC)) {
+ add_error(t('The async directory is not writable!'), VAR_ASYNC);
+ }
}
/**
* Read link informations
* @return array containing informations.
*/
-function
-jirafeau_get_link ($hash)
+function jirafeau_get_link($hash)
{
- $out = array ();
- $link = VAR_LINKS . s2p ("$hash") . $hash;
+ $out = array();
+ $link = VAR_LINKS . s2p("$hash") . $hash;
- if (!file_exists ($link))
+ if (!file_exists($link)) {
return $out;
+ }
- $c = file ($link);
- $out['file_name'] = trim ($c[0]);
- $out['mime_type'] = trim ($c[1]);
- $out['file_size'] = trim ($c[2]);
- $out['key'] = trim ($c[3], NL);
- $out['time'] = trim ($c[4]);
- $out['md5'] = trim ($c[5]);
- $out['onetime'] = trim ($c[6]);
- $out['upload_date'] = trim ($c[7]);
- $out['ip'] = trim ($c[8]);
- $out['link_code'] = trim ($c[9]);
- $out['crypted'] = trim ($c[10]) == 'C';
+ $c = file($link);
+ $out['file_name'] = trim($c[0]);
+ $out['mime_type'] = trim($c[1]);
+ $out['file_size'] = trim($c[2]);
+ $out['key'] = trim($c[3], NL);
+ $out['time'] = trim($c[4]);
+ $out['md5'] = trim($c[5]);
+ $out['onetime'] = trim($c[6]);
+ $out['upload_date'] = trim($c[7]);
+ $out['ip'] = trim($c[8]);
+ $out['link_code'] = trim($c[9]);
+ $out['crypted'] = trim($c[10]) == 'C';
return $out;
}
/**
* List files in admin interface.
*/
-function
-jirafeau_admin_list ($name, $file_hash, $link_hash)
+function jirafeau_admin_list($name, $file_hash, $link_hash)
{
echo '<fieldset><legend>';
- if (!empty ($name))
+ if (!empty($name)) {
echo t('Filename') . ": $name ";
- if (!empty ($file_hash))
+ }
+ if (!empty($file_hash)) {
echo t('file') . ": $file_hash ";
- if (!empty ($link_hash))
+ }
+ if (!empty($link_hash)) {
echo t('link') . ": $link_hash ";
- if (empty ($name) && empty ($file_hash) && empty ($link_hash))
+ }
+ if (empty($name) && empty($file_hash) && empty($link_hash)) {
echo t('List all files');
+ }
echo '</legend>';
echo '<table>';
echo '<tr>';
echo '</tr>';
/* Get all links files. */
- $stack = array (VAR_LINKS);
- while (($d = array_shift ($stack)) && $d != NULL)
- {
- $dir = scandir ($d);
- foreach ($dir as $node)
- {
- if (strcmp ($node, '.') == 0 || strcmp ($node, '..') == 0 ||
- preg_match ('/\.tmp/i', "$node"))
+ $stack = array(VAR_LINKS);
+ while (($d = array_shift($stack)) && $d != null) {
+ $dir = scandir($d);
+ foreach ($dir as $node) {
+ if (strcmp($node, '.') == 0 || strcmp($node, '..') == 0 ||
+ preg_match('/\.tmp/i', "$node")) {
continue;
- if (is_dir ($d . $node))
- {
+ }
+ if (is_dir($d . $node)) {
/* Push new found directory. */
$stack[] = $d . $node . '/';
- }
- elseif (is_file ($d . $node))
- {
+ } elseif (is_file($d . $node)) {
/* Read link informations. */
- $l = jirafeau_get_link ($node);
- if (!count ($l))
+ $l = jirafeau_get_link($node);
+ if (!count($l)) {
continue;
+ }
/* Filter. */
- if (!empty ($name) && !preg_match ("/$name/i", htmlspecialchars($l['file_name'])))
+ if (!empty($name) && !preg_match("/$name/i", htmlspecialchars($l['file_name']))) {
continue;
- if (!empty ($file_hash) && $file_hash != $l['md5'])
+ }
+ if (!empty($file_hash) && $file_hash != $l['md5']) {
continue;
- if (!empty ($link_hash) && $link_hash != $node)
+ }
+ if (!empty($link_hash) && $link_hash != $node) {
continue;
+ }
/* Print link informations. */
echo '<tr>';
echo '<td>' .
- '<strong><a id="upload_link" href="/f.php?h='. htmlspecialchars($node) .'" title="' .
+ '<strong><a id="upload_link" href="' . JIRAFEAU_ABSPREFIX . 'f.php?h='. htmlspecialchars($node) .'" title="' .
t('Download page') . '">' . htmlspecialchars($l['file_name']) . '</a></strong>';
echo '</td>';
echo '<td>' . $l['mime_type'] . '</td>';
- echo '<td>' . jirafeau_human_size ($l['file_size']) . '</td>';
- echo '<td>' . ($l['time'] == -1 ? '' : strftime ('%c', $l['time'])) .
- '</td>';
+ echo '<td>' . jirafeau_human_size($l['file_size']) . '</td>';
+ echo '<td>' . ($l['time'] == -1 ? '∞' : jirafeau_get_datetimefield($l['time'])) . '</td>';
echo '<td>';
- if ($l['onetime'] == 'O')
+ if ($l['onetime'] == 'O') {
echo 'Y';
- else
+ } else {
echo 'N';
+ }
echo '</td>';
- echo '<td>' . strftime ('%c', $l['upload_date']) . '</td>';
+ echo '<td>' . jirafeau_get_datetimefield($l['upload_date']) . '</td>';
echo '<td>' . $l['ip'] . '</td>';
echo '<td>' .
- '<form action = "admin.php" method = "post">' .
+ '<form method="post">' .
'<input type = "hidden" name = "action" value = "download"/>' .
'<input type = "hidden" name = "link" value = "' . $node . '"/>' .
'<input type = "submit" value = "' . t('Download') . '" />' .
'</form>' .
- '<form action = "admin.php" method = "post">' .
+ '<form method="post">' .
'<input type = "hidden" name = "action" value = "delete_link"/>' .
'<input type = "hidden" name = "link" value = "' . $node . '"/>' .
'<input type = "submit" value = "' . t('Del link') . '" />' .
'</form>' .
- '<form action = "admin.php" method = "post">' .
+ '<form method="post">' .
'<input type = "hidden" name = "action" value = "delete_file"/>' .
'<input type = "hidden" name = "md5" value = "' . $l['md5'] . '"/>' .
'<input type = "submit" value = "' . t('Del file and links') . '" />' .
* Clean expired files.
* @return number of cleaned files.
*/
-function
-jirafeau_admin_clean ()
+function jirafeau_admin_clean()
{
$count = 0;
/* Get all links files. */
- $stack = array (VAR_LINKS);
- while (($d = array_shift ($stack)) && $d != NULL)
- {
- $dir = scandir ($d);
+ $stack = array(VAR_LINKS);
+ while (($d = array_shift($stack)) && $d != null) {
+ $dir = scandir($d);
- foreach ($dir as $node)
- {
- if (strcmp ($node, '.') == 0 || strcmp ($node, '..') == 0 ||
- preg_match ('/\.tmp/i', "$node"))
+ foreach ($dir as $node) {
+ if (strcmp($node, '.') == 0 || strcmp($node, '..') == 0 ||
+ preg_match('/\.tmp/i', "$node")) {
continue;
+ }
- if (is_dir ($d . $node))
- {
+ if (is_dir($d . $node)) {
/* Push new found directory. */
$stack[] = $d . $node . '/';
- }
- elseif (is_file ($d . $node))
- {
+ } elseif (is_file($d . $node)) {
/* Read link informations. */
- $l = jirafeau_get_link (basename ($node));
- if (!count ($l))
+ $l = jirafeau_get_link(basename($node));
+ if (!count($l)) {
continue;
- $p = s2p ($l['md5']);
- if ($l['time'] > 0 && $l['time'] < time () || // expired
- !file_exists (VAR_FILES . $p . $l['md5']) || // invalid
- !file_exists (VAR_FILES . $p . $l['md5'] . '_count')) // invalid
- {
- jirafeau_delete_link ($node);
+ }
+ $p = s2p($l['md5']);
+ if ($l['time'] > 0 && $l['time'] < time() || // expired
+ !file_exists(VAR_FILES . $p . $l['md5']) || // invalid
+ !file_exists(VAR_FILES . $p . $l['md5'] . '_count')) { // invalid
+ jirafeau_delete_link($node);
$count++;
}
}
* Clean old async transferts.
* @return number of cleaned files.
*/
-function
-jirafeau_admin_clean_async ()
+function jirafeau_admin_clean_async()
{
$count = 0;
/* Get all links files. */
- $stack = array (VAR_ASYNC);
- while (($d = array_shift ($stack)) && $d != NULL)
- {
- $dir = scandir ($d);
+ $stack = array(VAR_ASYNC);
+ while (($d = array_shift($stack)) && $d != null) {
+ $dir = scandir($d);
- foreach ($dir as $node)
- {
- if (strcmp ($node, '.') == 0 || strcmp ($node, '..') == 0 ||
- preg_match ('/\.tmp/i', "$node"))
+ foreach ($dir as $node) {
+ if (strcmp($node, '.') == 0 || strcmp($node, '..') == 0 ||
+ preg_match('/\.tmp/i', "$node")) {
continue;
+ }
- if (is_dir ($d . $node))
- {
+ if (is_dir($d . $node)) {
/* Push new found directory. */
$stack[] = $d . $node . '/';
- }
- elseif (is_file ($d . $node))
- {
+ } elseif (is_file($d . $node)) {
/* Read async informations. */
- $a = jirafeau_get_async_ref (basename ($node));
- if (!count ($a))
+ $a = jirafeau_get_async_ref(basename($node));
+ if (!count($a)) {
continue;
+ }
/* Delete transferts older than 1 hour. */
- if (time () - $a['last_edited'] > 3600)
- {
- jirafeau_async_delete (basename ($node));
+ if (time() - $a['last_edited'] > 3600) {
+ jirafeau_async_delete(basename($node));
$count++;
}
}
* Read async transfert informations
* @return array containing informations.
*/
-function
-jirafeau_get_async_ref ($ref)
+function jirafeau_get_async_ref($ref)
{
- $out = array ();
- $refinfos = VAR_ASYNC . s2p ("$ref") . "$ref";
+ $out = array();
+ $refinfos = VAR_ASYNC . s2p("$ref") . "$ref";
- if (!file_exists ($refinfos))
+ if (!file_exists($refinfos)) {
return $out;
+ }
- $c = file ($refinfos);
- $out['file_name'] = trim ($c[0]);
- $out['mime_type'] = trim ($c[1]);
- $out['key'] = trim ($c[2], NL);
- $out['time'] = trim ($c[3]);
- $out['onetime'] = trim ($c[4]);
- $out['ip'] = trim ($c[5]);
- $out['last_edited'] = trim ($c[6]);
- $out['next_code'] = trim ($c[7]);
+ $c = file($refinfos);
+ $out['file_name'] = trim($c[0]);
+ $out['mime_type'] = trim($c[1]);
+ $out['key'] = trim($c[2], NL);
+ $out['time'] = trim($c[3]);
+ $out['onetime'] = trim($c[4]);
+ $out['ip'] = trim($c[5]);
+ $out['last_edited'] = trim($c[6]);
+ $out['next_code'] = trim($c[7]);
return $out;
}
/**
* Delete async transfert informations
*/
-function
-jirafeau_async_delete ($ref)
+function jirafeau_async_delete($ref)
{
- $p = s2p ("$ref");
- if (file_exists (VAR_ASYNC . $p . $ref))
- unlink (VAR_ASYNC . $p . $ref);
- if (file_exists (VAR_ASYNC . $p . $ref . '_data'))
- unlink (VAR_ASYNC . $p . $ref . '_data');
+ $p = s2p("$ref");
+ if (file_exists(VAR_ASYNC . $p . $ref)) {
+ unlink(VAR_ASYNC . $p . $ref);
+ }
+ if (file_exists(VAR_ASYNC . $p . $ref . '_data')) {
+ unlink(VAR_ASYNC . $p . $ref . '_data');
+ }
$parse = VAR_ASYNC . $p;
$scan = array();
- while (file_exists ($parse)
- && ($scan = scandir ($parse))
- && count ($scan) == 2 // '.' and '..' folders => empty.
- && basename ($parse) != basename (VAR_ASYNC))
- {
- rmdir ($parse);
- $parse = substr ($parse, 0, strlen($parse) - strlen(basename ($parse)) - 1);
+ while (file_exists($parse)
+ && ($scan = scandir($parse))
+ && count($scan) == 2 // '.' and '..' folders => empty.
+ && basename($parse) != basename(VAR_ASYNC)) {
+ rmdir($parse);
+ $parse = substr($parse, 0, strlen($parse) - strlen(basename($parse)) - 1);
}
}
* @param $ip ip address of the client
* @return a string containing a temporary reference followed by a code or the string 'Error'
*/
-function
-jirafeau_async_init ($filename, $type, $one_time, $key, $time, $ip)
+function jirafeau_async_init($filename, $type, $one_time, $key, $time, $ip)
{
$res = 'Error';
/* Create temporary folder. */
$ref;
$p;
- $code = jirafeau_gen_random (4);
- do
- {
- $ref = jirafeau_gen_random (32);
- $p = VAR_ASYNC . s2p ($ref);
- } while (file_exists ($p));
- @mkdir ($p, 0755, true);
- if (!file_exists ($p))
- {
+ $code = jirafeau_gen_random(4);
+ do {
+ $ref = jirafeau_gen_random(32);
+ $p = VAR_ASYNC . s2p($ref);
+ } while (file_exists($p));
+ @mkdir($p, 0755, true);
+ if (!file_exists($p)) {
echo 'Error';
return;
}
/* md5 password or empty */
$password = '';
- if (!empty ($key))
- $password = md5 ($key);
+ if (!empty($key)) {
+ $password = md5($key);
+ }
/* Store informations. */
$p .= $ref;
- $handle = fopen ($p, 'w');
- fwrite ($handle,
- str_replace (NL, '', trim ($filename)) . NL .
- str_replace (NL, '', trim ($type)) . NL . $password . NL .
+ $handle = fopen($p, 'w');
+ fwrite($handle,
+ str_replace(NL, '', trim($filename)) . NL .
+ str_replace(NL, '', trim($type)) . NL . $password . NL .
$time . NL . ($one_time ? 'O' : 'R') . NL . $ip . NL .
- time () . NL . $code . NL);
- fclose ($handle);
+ time() . NL . $code . NL);
+ fclose($handle);
return $ref . NL . $code ;
}
* @param $max_file_size maximum allowed file size
* @return a string containing a next code to use or the string "Error"
*/
-function
-jirafeau_async_push ($ref, $data, $code, $max_file_size)
+function jirafeau_async_push($ref, $data, $code, $max_file_size)
{
/* Get async infos. */
- $a = jirafeau_get_async_ref ($ref);
+ $a = jirafeau_get_async_ref($ref);
/* Check some errors. */
- if (count ($a) == 0
+ if (count($a) == 0
|| $a['next_code'] != "$code"
- || empty ($data['tmp_name'])
- || !is_uploaded_file ($data['tmp_name']))
+ || empty($data['tmp_name'])
+ || !is_uploaded_file($data['tmp_name'])) {
return 'Error';
+ }
- $p = s2p ($ref);
+ $p = s2p($ref);
/* File path. */
$r_path = $data['tmp_name'];
/* Check that file size is not above upload limit. */
if ($max_file_size > 0 &&
- filesize ($r_path) + filesize ($w_path) > $max_file_size * 1024 * 1024)
- {
- jirafeau_async_delete ($ref);
+ filesize($r_path) + filesize($w_path) > $max_file_size * 1024 * 1024) {
+ jirafeau_async_delete($ref);
return 'Error';
}
/* Concatenate data. */
- $r = fopen ($r_path, 'r');
- $w = fopen ($w_path, 'a');
- while (!feof ($r))
- {
- if (fwrite ($w, fread ($r, 1024)) === false)
- {
- fclose ($r);
- fclose ($w);
- jirafeau_async_delete ($ref);
+ $r = fopen($r_path, 'r');
+ $w = fopen($w_path, 'a');
+ while (!feof($r)) {
+ if (fwrite($w, fread($r, 1024)) === false) {
+ fclose($r);
+ fclose($w);
+ jirafeau_async_delete($ref);
return 'Error';
}
}
- fclose ($r);
- fclose ($w);
- unlink ($r_path);
+ fclose($r);
+ fclose($w);
+ unlink($r_path);
/* Update async file. */
- $code = jirafeau_gen_random (4);
- $handle = fopen (VAR_ASYNC . $p . $ref, 'w');
- fwrite ($handle,
+ $code = jirafeau_gen_random(4);
+ $handle = fopen(VAR_ASYNC . $p . $ref, 'w');
+ fwrite($handle,
$a['file_name'] . NL. $a['mime_type'] . NL. $a['key'] . NL .
$a['time'] . NL . $a['onetime'] . NL . $a['ip'] . NL .
- time () . NL . $code . NL);
- fclose ($handle);
+ time() . NL . $code . NL);
+ fclose($handle);
return $code;
}
* @param $link_name_length link name length
* @return a string containing the download reference followed by a delete code or the string 'Error'
*/
-function
-jirafeau_async_end ($ref, $code, $crypt, $link_name_length)
+function jirafeau_async_end($ref, $code, $crypt, $link_name_length)
{
/* Get async infos. */
- $a = jirafeau_get_async_ref ($ref);
- if (count ($a) == 0
- || $a['next_code'] != "$code")
+ $a = jirafeau_get_async_ref($ref);
+ if (count($a) == 0
+ || $a['next_code'] != "$code") {
return "Error";
+ }
/* Generate link infos. */
- $p = VAR_ASYNC . s2p ($ref) . $ref . "_data";
- if (!file_exists($p))
+ $p = VAR_ASYNC . s2p($ref) . $ref . "_data";
+ if (!file_exists($p)) {
return 'Error';
+ }
$crypted = false;
$crypt_key = '';
- if ($crypt == true && extension_loaded('mcrypt') == true)
- {
- $crypt_key = jirafeau_encrypt_file ($p, $p);
- if (strlen($crypt_key) > 0)
+ if ($crypt == true && extension_loaded('mcrypt') == true) {
+ $crypt_key = jirafeau_encrypt_file($p, $p);
+ if (strlen($crypt_key) > 0) {
$crypted = true;
+ }
}
- $md5 = md5_file ($p);
+ $md5 = md5_file($p);
$size = filesize($p);
- $np = s2p ($md5);
- $delete_link_code = jirafeau_gen_random (5);
+ $np = s2p($md5);
+ $delete_link_code = jirafeau_gen_random(5);
/* File already exist ? */
- if (!file_exists (VAR_FILES . $np))
- @mkdir (VAR_FILES . $np, 0755, true);
- if (!file_exists (VAR_FILES . $np . $md5))
- rename ($p, VAR_FILES . $np . $md5);
+ if (!file_exists(VAR_FILES . $np)) {
+ @mkdir(VAR_FILES . $np, 0755, true);
+ }
+ if (!file_exists(VAR_FILES . $np . $md5)) {
+ rename($p, VAR_FILES . $np . $md5);
+ }
/* Increment or create count file. */
$counter = 0;
- if (file_exists (VAR_FILES . $np . $md5 . '_count'))
- {
- $content = file (VAR_FILES . $np . $md5. '_count');
- $counter = trim ($content[0]);
+ if (file_exists(VAR_FILES . $np . $md5 . '_count')) {
+ $content = file(VAR_FILES . $np . $md5. '_count');
+ $counter = trim($content[0]);
}
$counter++;
- $handle = fopen (VAR_FILES . $np . $md5. '_count', 'w');
- fwrite ($handle, $counter);
- fclose ($handle);
+ $handle = fopen(VAR_FILES . $np . $md5. '_count', 'w');
+ fwrite($handle, $counter);
+ fclose($handle);
/* Create link. */
- $link_tmp_name = VAR_LINKS . $md5 . rand (0, 10000) . '.tmp';
- $handle = fopen ($link_tmp_name, 'w');
- fwrite ($handle,
+ $link_tmp_name = VAR_LINKS . $md5 . rand(0, 10000) . '.tmp';
+ $handle = fopen($link_tmp_name, 'w');
+ fwrite($handle,
$a['file_name'] . NL . $a['mime_type'] . NL . $size . NL .
$a['key'] . NL . $a['time'] . NL . $md5 . NL . $a['onetime'] . NL .
- time () . NL . $a['ip'] . NL . $delete_link_code . NL . ($crypted ? 'C' : 'O'));
- fclose ($handle);
- $md5_link = substr(base_16_to_64 (md5_file ($link_tmp_name)), 0, $link_name_length);
- $l = s2p ("$md5_link");
- if (!@mkdir (VAR_LINKS . $l, 0755, true) ||
- !rename ($link_tmp_name, VAR_LINKS . $l . $md5_link))
+ time() . NL . $a['ip'] . NL . $delete_link_code . NL . ($crypted ? 'C' : 'O'));
+ fclose($handle);
+ $md5_link = substr(base_16_to_64(md5_file($link_tmp_name)), 0, $link_name_length);
+ $l = s2p("$md5_link");
+ if (!@mkdir(VAR_LINKS . $l, 0755, true) ||
+ !rename($link_tmp_name, VAR_LINKS . $l . $md5_link)) {
echo "Error";
+ }
/* Clean async upload. */
- jirafeau_async_delete ($ref);
+ jirafeau_async_delete($ref);
return $md5_link . NL . $delete_link_code . NL . urlencode($crypt_key);
}
-function
-jirafeau_crypt_create_iv($base, $size)
+function jirafeau_crypt_create_iv($base, $size)
{
$iv = '';
- while (strlen ($iv) < $size)
+ while (strlen($iv) < $size) {
$iv = $iv . $base;
+ }
$iv = substr($iv, 0, $size);
return $iv;
}
* @param $fp_dst file path to the file to write crypted file (could be the same).
* @return decrypt key composed of the key and the iv separated by a point ('.')
*/
-function
-jirafeau_encrypt_file ($fp_src, $fp_dst)
+function jirafeau_encrypt_file($fp_src, $fp_dst)
{
- $fs = filesize ($fp_src);
- if ($fs === false || $fs == 0 || !(extension_loaded('mcrypt') == true))
+ $fs = filesize($fp_src);
+ if ($fs === false || $fs == 0 || !(extension_loaded('mcrypt') == true)) {
return '';
+ }
/* Prepare module. */
$m = mcrypt_module_open('rijndael-256', '', 'ofb', '');
/* Generate key. */
- $crypt_key = jirafeau_gen_random (10);
+ $crypt_key = jirafeau_gen_random(10);
$md5_key = md5($crypt_key);
- $iv = jirafeau_crypt_create_iv ($md5_key, mcrypt_enc_get_iv_size($m));
+ $iv = jirafeau_crypt_create_iv($md5_key, mcrypt_enc_get_iv_size($m));
/* Init module. */
mcrypt_generic_init($m, $md5_key, $iv);
/* Crypt file. */
- $r = fopen ($fp_src, 'r');
- $w = fopen ($fp_dst, 'c');
- while (!feof ($r))
- {
- $enc = mcrypt_generic($m, fread ($r, 1024));
- if (fwrite ($w, $enc) === false)
+ $r = fopen($fp_src, 'r');
+ $w = fopen($fp_dst, 'c');
+ while (!feof($r)) {
+ $enc = mcrypt_generic($m, fread($r, 1024));
+ if (fwrite($w, $enc) === false) {
return '';
+ }
}
- fclose ($r);
- fclose ($w);
+ fclose($r);
+ fclose($w);
/* Cleanup. */
mcrypt_generic_deinit($m);
mcrypt_module_close($m);
* @param $k string composed of the key and the iv separated by a point ('.')
* @return key used to decrypt. a string of length 0 is returned if failed.
*/
-function
-jirafeau_decrypt_file ($fp_src, $fp_dst, $k)
+function jirafeau_decrypt_file($fp_src, $fp_dst, $k)
{
- $fs = filesize ($fp_src);
- if ($fs === false || $fs == 0 || extension_loaded('mcrypt') == false)
+ $fs = filesize($fp_src);
+ if ($fs === false || $fs == 0 || extension_loaded('mcrypt') == false) {
return false;
+ }
/* Init module */
$m = mcrypt_module_open('rijndael-256', '', 'ofb', '');
/* Extract key and iv. */
$crypt_key = $k;
$md5_key = md5($crypt_key);
- $iv = jirafeau_crypt_create_iv ($md5_key, mcrypt_enc_get_iv_size($m));
+ $iv = jirafeau_crypt_create_iv($md5_key, mcrypt_enc_get_iv_size($m));
/* Decrypt file. */
- $r = fopen ($fp_src, 'r');
- $w = fopen ($fp_dst, 'c');
- while (!feof ($r))
- {
- $dec = mdecrypt_generic($m, fread ($r, 1024));
- if (fwrite ($w, $dec) === false)
+ $r = fopen($fp_src, 'r');
+ $w = fopen($fp_dst, 'c');
+ while (!feof($r)) {
+ $dec = mdecrypt_generic($m, fread($r, 1024));
+ if (fwrite($w, $dec) === false) {
return false;
+ }
}
- fclose ($r);
- fclose ($w);
+ fclose($r);
+ fclose($w);
/* Cleanup. */
mcrypt_generic_deinit($m);
mcrypt_module_close($m);
* Check if Jirafeau is password protected for visitors.
* @return true if Jirafeau is password protected, false otherwise.
*/
-function
-jirafeau_has_upload_password ($cfg)
+function jirafeau_has_upload_password($cfg)
{
- return count ($cfg['upload_password']) > 0;
+ return count($cfg['upload_password']) > 0;
}
/**
* @param $password password to be challenged
* @return true if password is valid, false otherwise.
*/
-function
-jirafeau_challenge_upload_password ($cfg, $password)
+function jirafeau_challenge_upload_password($cfg, $password)
{
- if (!jirafeau_has_upload_password($cfg))
+ if (!jirafeau_has_upload_password($cfg)) {
return false;
- forEach ($cfg['upload_password'] as $p)
- if ($password == $p)
+ }
+ foreach ($cfg['upload_password'] as $p) {
+ if ($password == $p) {
return true;
+ }
+ }
return false;
}
* @param $ip IP to be challenged
* @return true if IP is authorized, false otherwise.
*/
-function
-jirafeau_challenge_upload_ip ($cfg, $ip)
+function jirafeau_challenge_upload_ip($cfg, $ip)
{
- if (count ($cfg['upload_ip']) == 0)
+ if (count($cfg['upload_ip']) == 0) {
return true;
- forEach ($cfg['upload_ip'] as $i)
- {
- if ($i == $ip)
+ }
+ foreach ($cfg['upload_ip'] as $i) {
+ if ($i == $ip) {
return true;
+ }
+ // CIDR test for IPv4 only.
+ if (strpos($i, '/') !== false) {
+ list($subnet, $mask) = explode('/', $i);
+ if ((ip2long($ip) & ~((1 << (32 - $mask)) - 1)) == ip2long($subnet)) {
+ return true;
+ }
+ }
+ }
+ return false;
+}
+
+/**
+ * Test if visitor's IP is authorized or password is supplied and authorized
+ * @param $ip IP to be challenged
+ * @param $password password to be challenged
+ * @return true if access is valid, false otherwise.
+ */
+function jirafeau_challenge_upload ($cfg, $ip, $password)
+{
+ // Allow if no ip restrictaion and no password restriction
+ if ((count ($cfg['upload_ip']) == 0) and (count ($cfg['upload_password']) == 0)) {
+ return true;
+ }
+
+ // Allow if ip is in array
+ foreach ($cfg['upload_ip'] as $i) {
+ if ($i == $ip) {
+ return true;
+ }
// CIDR test for IPv4 only.
if (strpos ($i, '/') !== false)
{
list ($subnet, $mask) = explode('/', $i);
- if ((ip2long ($ip) & ~((1 << (32 - $mask)) - 1) ) == ip2long ($subnet))
+ if ((ip2long ($ip) & ~((1 << (32 - $mask)) - 1) ) == ip2long ($subnet)) {
return true;
+ }
+ }
+ }
+ if (!jirafeau_has_upload_password($cfg)) {
+ return false;
+ }
+
+ foreach ($cfg['upload_password'] as $p) {
+ if ($password == $p) {
+ return true;
}
}
return false;
}
/** Tell if we have some HTTP headers generated by a proxy */
-function
-has_http_forwarded()
+function has_http_forwarded()
{
return
- !empty ($_SERVER['HTTP_X_FORWARDED_FOR']) ||
- !empty ($_SERVER['http_X_forwarded_for']);
+ !empty($_SERVER['HTTP_X_FORWARDED_FOR']) ||
+ !empty($_SERVER['http_X_forwarded_for']);
}
/**
* Generate IP list from HTTP headers generated by a proxy
* @return array of IP strings
*/
-function
-get_ip_list_http_forwarded()
+function get_ip_list_http_forwarded()
{
$ip_list = array();
- if (!empty ($_SERVER['HTTP_X_FORWARDED_FOR']))
- {
- $l = explode (',', $_SERVER['HTTP_X_FORWARDED_FOR']);
- if ($l === FALSE)
+ if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
+ $l = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
+ if ($l === false) {
return array();
- foreach ($l as $ip)
- array_push ($ip_list, preg_replace ('/\s+/', '', $ip));
+ }
+ foreach ($l as $ip) {
+ array_push($ip_list, preg_replace('/\s+/', '', $ip));
+ }
}
- if (!empty ($_SERVER['http_X_forwarded_for']))
- {
- $l = explode (',', $_SERVER['http_X_forwarded_for']);
- foreach ($l as $ip)
- {
+ if (!empty($_SERVER['http_X_forwarded_for'])) {
+ $l = explode(',', $_SERVER['http_X_forwarded_for']);
+ foreach ($l as $ip) {
// Separate IP from port
- $ipa = explode (':', $ip);
- if ($ipa === FALSE)
+ $ipa = explode(':', $ip);
+ if ($ipa === false) {
continue;
+ }
$ip = $ipa[0];
- array_push ($ip_list, preg_replace ('/\s+/', '', $ip));
+ array_push($ip_list, preg_replace('/\s+/', '', $ip));
}
}
return $ip_list;
* or from HTTP_X_FORWARDED_FOR if behind a proxy
* @returns the client ip address
*/
-function
-get_ip_address($cfg)
+function get_ip_address($cfg)
{
$remote = $_SERVER['REMOTE_ADDR'];
- if (count ($cfg['proxy_ip']) == 0 || !has_http_forwarded ())
+ if (count($cfg['proxy_ip']) == 0 || !has_http_forwarded()) {
return $remote;
+ }
- $ip_list = get_ip_list_http_forwarded ();
- if (count ($ip_list) == 0)
+ $ip_list = get_ip_list_http_forwarded();
+ if (count($ip_list) == 0) {
return $remote;
+ }
- foreach ($cfg['proxy_ip'] as $proxy_ip)
- {
- if ($remote != $proxy_ip)
+ foreach ($cfg['proxy_ip'] as $proxy_ip) {
+ if ($remote != $proxy_ip) {
continue;
+ }
// Take the last IP (the one which has been set by the defined proxy).
- return end ($ip_list);
+ return end($ip_list);
}
return $remote;
}
function hex_to_base64($hex)
{
$b = '';
- foreach (str_split ($hex, 2) as $pair)
- $b .= chr (hexdec ($pair));
- return base64_encode ($b);
+ foreach (str_split($hex, 2) as $pair) {
+ $b .= chr(hexdec($pair));
+ }
+ return base64_encode($b);
}
/**
* Read alias informations
* @return array containing informations.
*/
-function
-jirafeau_get_alias ($hash)
+function jirafeau_get_alias($hash)
{
- $out = array ();
- $link = VAR_ALIAS . s2p ("$hash") . $hash;
+ $out = array();
+ $link = VAR_ALIAS . s2p("$hash") . $hash;
- if (!file_exists ($link))
+ if (!file_exists($link)) {
return $out;
+ }
- $c = file ($link);
- $out['md5_password'] = trim ($c[0]);
- $out['ip'] = trim ($c[1]);
- $out['update_date'] = trim ($c[2]);
- $out['destination'] = trim ($c[3], NL);
+ $c = file($link);
+ $out['md5_password'] = trim($c[0]);
+ $out['ip'] = trim($c[1]);
+ $out['update_date'] = trim($c[2]);
+ $out['destination'] = trim($c[3], NL);
return $out;
}
* @param $ip client's IP
* @return a string containing the edit code of the alias or the string "Error"
*/
-function
-jirafeau_alias_create ($alias, $destination, $password, $ip)
+function jirafeau_alias_create($alias, $destination, $password, $ip)
{
/* Check that alias and password are long enough. */
- if (strlen ($alias) < 8 ||
- strlen ($alias) > 32 ||
- strlen ($password) < 8 ||
- strlen ($password) > 32)
+ if (strlen($alias) < 8 ||
+ strlen($alias) > 32 ||
+ strlen($password) < 8 ||
+ strlen($password) > 32) {
return 'Error';
+ }
/* Check that destination exists. */
- $l = jirafeau_get_link ($destination);
- if (!count ($l))
+ $l = jirafeau_get_link($destination);
+ if (!count($l)) {
return 'Error';
+ }
/* Check that alias does not already exists. */
- $alias = md5 ($alias);
- $p = VAR_ALIAS . s2p ($alias);
- if (file_exists ($p))
+ $alias = md5($alias);
+ $p = VAR_ALIAS . s2p($alias);
+ if (file_exists($p)) {
return 'Error';
+ }
/* Create alias folder. */
- @mkdir ($p, 0755, true);
- if (!file_exists ($p))
+ @mkdir($p, 0755, true);
+ if (!file_exists($p)) {
return 'Error';
+ }
/* Generate password. */
- $md5_password = md5 ($password);
+ $md5_password = md5($password);
/* Store informations. */
$p .= $alias;
- $handle = fopen ($p, 'w');
- fwrite ($handle,
+ $handle = fopen($p, 'w');
+ fwrite($handle,
$md5_password . NL .
$ip . NL .
- time () . NL .
+ time() . NL .
$destination . NL);
- fclose ($handle);
+ fclose($handle);
return 'Ok';
}
* @param $ip client's IP
* @return "Ok" or "Error" string
*/
-function
-jirafeau_alias_update ($alias, $destination, $password,
+function jirafeau_alias_update($alias, $destination, $password,
$new_password, $ip)
{
- $alias = md5 ($alias);
+ $alias = md5($alias);
/* Check that alias exits. */
- $a = jirafeau_get_alias ($alias);
- if (!count ($a))
+ $a = jirafeau_get_alias($alias);
+ if (!count($a)) {
return 'Error';
+ }
/* Check that destination exists. */
- $l = jirafeau_get_link ($a["destination"]);
- if (!count ($l))
+ $l = jirafeau_get_link($a["destination"]);
+ if (!count($l)) {
return 'Error';
+ }
/* Check password. */
- if ($a["md5_password"] != md5 ($password))
+ if ($a["md5_password"] != md5($password)) {
return 'Error';
+ }
$p = $a['md5_password'];
- if (strlen ($new_password) >= 8 &&
- strlen ($new_password) <= 32)
- $p = md5 ($new_password);
- else if (strlen ($new_password) > 0)
+ if (strlen($new_password) >= 8 &&
+ strlen($new_password) <= 32) {
+ $p = md5($new_password);
+ } elseif (strlen($new_password) > 0) {
return 'Error';
+ }
/* Rewrite informations. */
- $p = VAR_ALIAS . s2p ($alias) . $alias;
- $handle = fopen ($p, 'w');
- fwrite ($handle,
+ $p = VAR_ALIAS . s2p($alias) . $alias;
+ $handle = fopen($p, 'w');
+ fwrite($handle,
$p . NL .
$ip . NL .
- time () . NL .
+ time() . NL .
$destination . NL);
- fclose ($handle);
+ fclose($handle);
return 'Ok';
}
* @param $alias alias to get
* @return alias destination or "Error" string
*/
-function
-jirafeau_alias_get ($alias)
+function jirafeau_alias_get($alias)
{
- $alias = md5 ($alias);
+ $alias = md5($alias);
/* Check that alias exits. */
- $a = jirafeau_get_alias ($alias);
- if (!count ($a))
+ $a = jirafeau_get_alias($alias);
+ if (!count($a)) {
return 'Error';
+ }
return $a['destination'];
}
-function
-jirafeau_clean_rm_alias ($alias)
+function jirafeau_clean_rm_alias($alias)
{
- $p = s2p ("$alias");
- if (file_exists (VAR_ALIAS . $p . $alias))
- unlink (VAR_ALIAS . $p . $alias);
+ $p = s2p("$alias");
+ if (file_exists(VAR_ALIAS . $p . $alias)) {
+ unlink(VAR_ALIAS . $p . $alias);
+ }
$parse = VAR_ALIAS . $p;
$scan = array();
- while (file_exists ($parse)
- && ($scan = scandir ($parse))
- && count ($scan) == 2 // '.' and '..' folders => empty.
- && basename ($parse) != basename (VAR_ALIAS))
- {
- rmdir ($parse);
- $parse = substr ($parse, 0, strlen($parse) - strlen(basename ($parse)) - 1);
+ while (file_exists($parse)
+ && ($scan = scandir($parse))
+ && count($scan) == 2 // '.' and '..' folders => empty.
+ && basename($parse) != basename(VAR_ALIAS)) {
+ rmdir($parse);
+ $parse = substr($parse, 0, strlen($parse) - strlen(basename($parse)) - 1);
}
}
* @param $password password to protect alias
* @return "Ok" or "Error" string
*/
-function
-jirafeau_alias_delete ($alias, $password)
+function jirafeau_alias_delete($alias, $password)
{
- $alias = md5 ($alias);
+ $alias = md5($alias);
/* Check that alias exits. */
- $a = jirafeau_get_alias ($alias);
- if (!count ($a))
+ $a = jirafeau_get_alias($alias);
+ if (!count($a)) {
return "Error";
+ }
/* Check password. */
- if ($a["md5_password"] != md5 ($password))
+ if ($a["md5_password"] != md5($password)) {
return 'Error';
+ }
- jirafeau_clean_rm_alias ($alias);
+ jirafeau_clean_rm_alias($alias);
return 'Ok';
}
* @param $htmllinebreaks boolean Convert linebreaks to BR-Tags
* @return Template with replaced markers
*/
-function
-jirafeau_replace_markers ($content, $htmllinebreaks = false)
+function jirafeau_replace_markers($content, $htmllinebreaks = false)
{
$patterns = array(
'/###ORGANISATION###/',
}
return $content;
-}
\ No newline at end of file
+}
-<?php\r
-/*\r
- * Jirafeau, your web file repository\r
- * Copyright (C) 2015 Jerome Jutteau <j.jutteau@gmail.com>\r
- *\r
- * This program is free software: you can redistribute it and/or modify\r
- * it under the terms of the GNU Affero General Public License as\r
- * published by the Free Software Foundation, either version 3 of the\r
- * License, or (at your option) any later version.\r
- *\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
- * GNU Affero General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU Affero General Public License\r
- * along with this program. If not, see <https://www.gnu.org/licenses/>.\r
- */\r
-\r
-global $languages_list;\r
-$languages_list = array ('auto' => 'Automatic',\r
- 'de' => 'Deutsch',\r
- 'en' => 'English',\r
- 'el' => 'Ελληνικά',\r
- 'es' => 'Español',\r
- 'hu' => 'Magyar',\r
- 'fi' => 'Suomi',\r
- 'fr' => 'Français',\r
- 'it' => 'Italiano',\r
- 'nl' => 'Nederlands',\r
- 'ro' => 'Limba română',\r
- 'ru' => 'ру́сский',\r
- 'sk' => 'Slovenčina',\r
- 'zh' => '汉语');\r
-\r
-/* Translation */\r
-function t ($text)\r
-{\r
- $cfg = $GLOBALS['cfg'];\r
- $languages_list = $GLOBALS['languages_list'];\r
-\r
- /* Detect user's langage if we are in automatic mode. */\r
- if (strcmp ($cfg['lang'], 'auto') == 0)\r
- {\r
- if (isset ($_SERVER['HTTP_ACCEPT_LANGUAGE']))\r
- $l = substr ($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);\r
- else\r
- $l = "en";\r
- }\r
- else\r
- $l = $cfg['lang'];\r
-\r
- /* Is the langage in the list ? */\r
- $found = false;\r
- foreach ($languages_list as $key => $v)\r
- if (strcmp ($l, $key) == 0)\r
- $found = true;\r
-\r
- /* Don't translate english. */\r
- if (!($found && strcmp ($l, "en")))\r
- return $text;\r
-\r
- /* Open translation file. */\r
- $trans_j = file_get_contents (JIRAFEAU_ROOT . "lib/locales/$l.json");\r
- if ($trans_j === FALSE)\r
- return $text;\r
-\r
- /* Decode JSON. */\r
- $trans = json_decode ($trans_j, true);\r
- if ($trans === NULL)\r
- return $text;\r
-\r
- /* Try to find translation. */\r
- if (!array_key_exists ($text, $trans))\r
- return $text;\r
-\r
- return $trans[$text];\r
-}\r
-\r
-function json_lang_generator ()\r
-{\r
- $cfg = $GLOBALS['cfg'];\r
- $languages_list = $GLOBALS['languages_list'];\r
-\r
- /* Detect user's langage if we are in automatic mode. */\r
- if (strcmp ($cfg['lang'], 'auto') == 0)\r
- {\r
- if (isset ($_SERVER['HTTP_ACCEPT_LANGUAGE']))\r
- $l = substr ($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);\r
- else\r
- $l = "en";\r
- }\r
- else\r
- $l = $cfg['lang'];\r
-\r
- /* Is the langage in the list ? */\r
- $found = false;\r
- foreach ($languages_list as $key => $v)\r
- if (strcmp ($l, $key) == 0)\r
- $found = true;\r
-\r
- /* Don't translate english. */\r
- if (!($found && strcmp ($l, "en")))\r
- return "{}";\r
-\r
- /* Open translation file. */\r
- $trans_j = file_get_contents (JIRAFEAU_ROOT . "lib/locales/$l.json");\r
- return $trans_j;\r
-}\r
-\r
-?>\r
+<?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;
+}
{
- "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": ""
}
\ No newline at end of file
{
- "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": ""
}
\ No newline at end of file
{
- "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": "",
{
- "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"
}
{
- "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"
}
\ No newline at end of file
{
- "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 d’envoi",
- "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 d’envoi",
+ "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",
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
-/* 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/');
+/* Jirafeau package */
+define('JIRAFEAU_PACKAGE', 'Jirafeau');
+define('JIRAFEAU_VERSION', '3.0.0');
-/* Useful constants. */
-if (!defined ('NL'))
- define ('NL', "\n");
+/* 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 ('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
+// 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('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
-?>
+// set UTC as default timezone for all date/time functions
+date_default_timezone_set ('UTC');
<?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>
<?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>
6 = Install
7 = Admin
8 = Download page
-
+
========================================================================== */
/* ==========================================================================
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;
+ }
/* ==========================================================================
#options {
position: relative;
z-index: 10;
- background: #efebe9;
width: 100%;
height: 90%;
}
#options input[type="submit"] {
position: relative;
- left: 11.2em;
+ margin: 1em auto;
}
/* ==========================================================================
#admin fieldset,
#admin + fieldset {
width: auto;
- max-width: 50em;
+ max-width: 60em;
border: 7px dashed #bcaaa4;
}
-/* ==========================================================================\r
- Elegantish Template for Jirafeau V1.1\r
- Based on the standard Courgette template, re-styled by JordyV\r
- JordyValentine.Com\r
- ---\r
-\r
- Css moved from 'style.css.php', This makes editing things a little nicer, because the Atom editor's sytax highlighting works\r
- 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.\r
-\r
- Images moved to a seperate 'img' directory, this is also personal preference.\r
- ---\r
-\r
- Provided under the same licence as Jirafeau, as this is originally the 'Courgette' stylesheet, just edited.\r
- ========================================================================== */\r
-\r
-\r
-/* ==========================================================================\r
- Summary\r
-\r
- 1 = Basic Style\r
- 2 = Copyright\r
- 3 = Options\r
- 4 = Upload\r
- 5 = Terms of service\r
- 6 = Install\r
- 7 = Admin\r
- 8 = Download page\r
-\r
- ========================================================================== */\r
-\r
-/* ==========================================================================\r
- 1 = Basic Style\r
- ========================================================================== */\r
-\r
-/* Call Google Fonts */\r
- @import url(https://fonts.googleapis.com/css?family=Open+Sans|Lobster);\r
-\r
-body {\r
- background: ##050505;\r
- background-image: url("bg1.png"), url("bg2.png");\r
- background-repeat: repeat-x, repeat;\r
- font-family: 'Lobster', cursive;\r
- color: #ffffff;\r
- margin: 0;\r
- line-height: 1.5;\r
-}\r
-\r
-h1 a {\r
- font-family: 'Lobster', cursive;\r
- font-weight: 200;\r
- display: block;\r
- background: url(logo.png) no-repeat;\r
- background-size: 100% 100%;\r
- text-indent: -9999px;\r
- width: 194px;\r
- height: 185px;\r
- margin: 1em auto;\r
- position: relative;\r
- left: 0.4em;\r
-}\r
-\r
-h2 {\r
- font-family: 'Lobster', cursive;\r
- text-align: center;\r
- color: #ffffff;\r
-}\r
-\r
-fieldset {\r
- border: 0;\r
- padding: 1.5em;\r
- margin: 0 auto;\r
- border-radius: 8px;\r
- width: 20em;\r
- border: 7px dashed rgba(255, 255, 255, 0.7);\r
- min-height: 15em;\r
- min-width: 30em;\r
- position: relative;\r
-}\r
-\r
-legend {\r
- padding: 0.5em 1em;\r
- background: #ffffff;\r
- color: #040404;\r
- font-size: 1.2em;\r
- display: block;\r
- min-width: 8em;\r
- text-align: center;\r
-}\r
-\r
-table a {\r
- color: #000;\r
-}\r
-\r
-table a:hover,\r
-table a:focus {\r
- text-decoration: none;\r
-}\r
-\r
-input[type="submit"] {\r
- font-family: 'Lobster', cursive;\r
- background: #157EFB;\r
- border: 0;\r
- padding: 0.4em 2.2em;\r
- font-size: 1.1em;\r
- color: #FFF;\r
- border-bottom: 5px solid #085B69;\r
- cursor: pointer;\r
- margin: 10px;\r
-}\r
-\r
-select,\r
-input[type="text"],\r
-input[type="password"] {\r
- font-family: 'Lobster', cursive;\r
- border: 1;\r
- padding: 5px 5px;\r
- font-size: 1em;\r
-}\r
-\r
-select { width: 100%; }\r
-\r
-input[type="submit"]:hover,\r
-input[type="submit"]:focus {\r
- font-family: 'Lobster', cursive;\r
- border: 0;\r
- position: relative;\r
- top: 5px;\r
- margin-bottom: 15px;\r
-}\r
-\r
-.inner {\r
- margin-top: 3em;\r
-}\r
-\r
-#upload fieldset {\r
- background: url(upload.png) no-repeat center;\r
- -webkit-transition: all 0.5s ease;\r
- -moz-transition: all 0.5s ease;\r
- -ms-transition: all 0.5s ease;\r
- -o-transition: all 0.5s ease;\r
- transition: all 0.5s ease;\r
-}\r
-\r
-#upload fieldset:hover {\r
- border-color: #ffffff;\r
-}\r
-\r
-#upload > form {\r
- text-align: center;\r
-}\r
-\r
-#file_select {\r
- position: absolute;\r
- top: 0;\r
- left: 0;\r
- width: 100%;\r
- height: 100%;\r
- cursor: pointer;\r
- opacity: 0;\r
-}\r
-\r
-\r
-\r
-/* ==========================================================================\r
- 2 = Copyright\r
- ========================================================================== */\r
-\r
-#copyright {\r
- font-family: 'Open Sans', sans-serif;\r
- text-align: center;\r
- font-size: 0.7em;\r
- color: #ffffff;\r
- padding-left: 3em;\r
-}\r
-\r
-#copyright a {\r
- font-family: 'Open Sans', sans-serif;\r
- color: #ffffff;\r
- text-decoration: none;\r
-}\r
-\r
-#copyright a:hover,\r
-#copyright a:focus {\r
- text-decoration: underline;\r
-}\r
-\r
-/* ==========================================================================\r
- 3 = Options\r
- ========================================================================== */\r
-\r
-#options {\r
- position: relative;\r
- z-index: 10;\r
- background: transparent;\r
- width: 100%;\r
- height: 90%;\r
-}\r
-\r
-#options tr { height: 2.7em; }\r
-\r
-#option_table tr:first-child {\r
- width: 100%;\r
- height: 100%;\r
-}\r
-\r
-#option_table td:first-child {\r
-}\r
-\r
-#options input[type="submit"] {\r
- position: relative;\r
- left: 11.2em;\r
-}\r
-\r
-/* ==========================================================================\r
- 4 = Upload\r
- ========================================================================== */\r
-\r
-#upload_finished,\r
-#uploading,\r
-.message,\r
-.info,\r
-.error {\r
- font-family: 'Lobster', cursive;\r
- text-align: center;\r
- color: #ffffff;\r
- padding-left: 3em;\r
-}\r
-\r
-#upload_finished > p:nth-child(1) {\r
- font-family: 'Lobster', cursive;\r
- color: #157EFB;\r
- font-weight: bold;\r
-}\r
-\r
-#upload_finished div p:nth-child(1) {\r
- font-family: 'Lobster', cursive;\r
- font-weight: bold;\r
-}\r
-\r
-#upload_finished a {\r
- font-family: 'Lobster', cursive;\r
- text-decoration: none;\r
- color: #ffffff;\r
-}\r
-\r
-#uploading a {\r
- font-family: 'Lobster', cursive;\r
- font-weight: bold;\r
- text-decoration: none;\r
- color: #ffffff;\r
-}\r
-\r
-#uploaded_percentage {\r
- font-family: 'Lobster', cursive;\r
- font-size: 2em;\r
- font-weight: bold;\r
-}\r
-\r
-#upload_finished a:hover,\r
-#uploading a:hover,\r
-#upload_finished a:focus,\r
-#uploading a:focus {\r
- font-family: 'Lobster', cursive;\r
- text-decoration: underline;\r
-}\r
-\r
-.message,\r
-.error {\r
- font-family: 'Lobster', cursive;\r
- color: #f27a00;\r
- font-style: italic;\r
- font-weight: bold;\r
-}\r
-\r
-#upload_image_email {\r
- padding-left: 20px;\r
- margin-left: 10px;\r
- background: url(email.png) no-repeat;\r
-}\r
-\r
-/* ==========================================================================\r
- 5 = Terms of service\r
- ========================================================================== */\r
-\r
-textarea[readonly="readonly"] {\r
- border: 0;\r
- color: #ffffff;\r
- font-family: 'Open Sans', sans-serif;\r
- background: none;\r
- margin: auto;\r
- display: block;\r
-}\r
-\r
-textarea[readonly="readonly"] + p,\r
-textarea[readonly="readonly"] + p + p {\r
- font-family: 'Open Sans', sans-serif;\r
- text-align: center;\r
- color: #ffffff;\r
-}\r
-\r
-textarea[readonly="readonly"] + p a,\r
-textarea[readonly="readonly"] + p + p a {\r
- font-family: 'Open Sans', sans-serif;\r
- font-weight: bold;\r
- text-decoration: none;\r
- color: #ffffff;\r
-}\r
-\r
-textarea[readonly="readonly"] + p a:hover,\r
-textarea[readonly="readonly"] + p + p a:hover,\r
-textarea[readonly="readonly"] + p a:focus,\r
-textarea[readonly="readonly"] + p + p a:focus {\r
- font-family: 'Open Sans', sans-serif;\r
- text-decoration: underline;\r
-}\r
-\r
-/* ==========================================================================\r
- 6 = Install\r
- ========================================================================== */\r
-\r
-#install fieldset,\r
-#install + fieldset {\r
- width: auto;\r
- max-width: 50em;\r
- border: 7px dashed #bcaaa4;\r
-}\r
-\r
-#install table,\r
-#install + fieldset table {\r
- width: 100%;\r
- border-collapse: collapse;\r
-}\r
-\r
-#install td,\r
-#install + fieldset td {\r
- padding: 0.5em 1em;\r
- border-bottom: 0;\r
-}\r
-\r
-#install td:empty {\r
- width: 13.1em;\r
-}\r
-\r
-#install table form:nth-child(odd),\r
-#install + fieldset tr:nth-child(odd) {\r
- background: #bcaaa4;\r
-}\r
-\r
-#install fieldset > form {\r
- margin-top: 2em;\r
- text-align: center;\r
-}\r
-\r
-#install form {\r
- display: table;\r
- width: 100%;\r
-}\r
-\r
-#install td:last-child { text-align: left; }\r
-\r
-#install .info { width: 19em; }\r
-\r
-#install input[type="submit"] {\r
- min-width: 10.5em;\r
-}\r
-\r
-#install + fieldset table {\r
- font-size: 0.9em;\r
-}\r
-\r
-#install + fieldset td:first-child input[type="submit"] {\r
- background: none;\r
- padding: 0;\r
- color: #000;\r
- font-weight: bold;\r
- border-bottom: 0;\r
-}\r
-\r
-#install + fieldset td:first-child input[type="submit"]:hover,\r
-#install + fieldset td:first-child input[type="submit"]:focus {\r
- text-decoration: underline;\r
-}\r
-\r
-/* ==========================================================================\r
- 7 = Admin\r
- ========================================================================== */\r
-\r
-#admin fieldset,\r
-#admin + fieldset {\r
- width: auto;\r
- max-width: 50em;\r
- border: 7px dashed #ffffff;\r
-}\r
-\r
-#admin table,\r
-#admin + fieldset table {\r
- width: 100%;\r
- border-collapse: collapse;\r
- border-bottom: 2px solid #FFF;\r
-}\r
-\r
-#admin td,\r
-#admin + fieldset td {\r
- padding: 0.5em 1em;\r
- border: 0px solid #FFF;\r
- border-bottom: 2px solid #FFF;\r
-}\r
-\r
-#admin td:empty {\r
- width: 13.1em;\r
-}\r
-\r
-#admin table form:nth-child(odd),\r
-#admin + fieldset tr:nth-child(odd) {\r
- background: transparent;\r
-}\r
-\r
-#admin fieldset > form {\r
- margin-top: 2em;\r
- text-align: center;\r
-}\r
-\r
-#admin form {\r
- display: table;\r
- width: 100%;\r
-}\r
-\r
-#admin td:last-child { text-align: left; }\r
-\r
-#admin .info { width: 19em; }\r
-\r
-#admin input[type="submit"] {\r
- font-family: 'Lobster', cursive;\r
- min-width: 10.5em;\r
-}\r
-\r
-#admin + fieldset table {\r
- font-size: 0.9em;\r
-}\r
-\r
-#admin + fieldset td:first-child input[type="submit"] {\r
- font-family: 'Lobster', cursive;\r
- background: none;\r
- padding: 0;\r
- color: #000;\r
- font-weight: bold;\r
- border-bottom: 0;\r
-}\r
-\r
-#admin + fieldset td:first-child input[type="submit"]:hover,\r
-#admin + fieldset td:first-child input[type="submit"]:focus {\r
- font-family: 'Lobster', cursive;\r
- text-decoration: underline;\r
-}\r
-\r
-/* ==========================================================================\r
- 8 = Download page\r
- ========================================================================== */\r
-\r
-#self_destruct {\r
- font-family: 'Lobster', cursive;\r
- font-weight: bold;\r
- color: red;\r
- background-image: url('pixel_bomb.png');\r
- background-size: 40px 40px;\r
- background-repeat: no-repeat;\r
- padding-left: 40px;\r
- padding-top: 10px;\r
- padding-bottom: 10px;\r
-}\r
+/* ==========================================================================
+ 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;
+}
-<?php\r
-/*\r
- * Jyraphe, your web file repository\r
- * Copyright (C) 2013\r
- * Jerome Jutteau <j.jutteau@gmail.com>\r
- * Jimmy Beauvois <jimmy.beauvois@gmail.com>\r
- *\r
- * This program is free software: you can redistribute it and/or modify\r
- * it under the terms of the GNU Affero General Public License as\r
- * published by the Free Software Foundation, either version 3 of the\r
- * License, or (at your option) any later version.\r
- *\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
- * GNU Affero General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU Affero General Public License\r
- * along with this program. If not, see <https://www.gnu.org/licenses/>.\r
- */\r
-\r
-/*\r
- * This stylesheet is the default stylesheet for Jyraphe.\r
- * The content is dynamically generated for easier handling.\r
- */\r
-\r
-$dark = '#8B4513';\r
-\r
-header('Content-type: text/css');\r
-\r
-?>\r
-\r
-/* ==========================================================================\r
- Elegantish Template - JordyV - http://jordyvalentine.com/\r
- CSS Seperated from PHP\r
- This is a preference of the template developer, feel free to move it back.\r
- ========================================================================== */\r
-@import url(elegantish.css);\r
+<?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);
* 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.
/* 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 (jirafeau_has_upload_password ($cfg) &&
- (!isset ($_POST['upload_password']) ||
- !jirafeau_challenge_upload_password ($cfg, $_POST['upload_password'])))
- {
- echo 'Error 3';
- 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;
+ }
}
-
+
$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;
$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;
}
/* 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.
$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;
- }
-
- if (jirafeau_has_upload_password ($cfg) &&
- (!isset ($_POST['upload_password']) ||
- !jirafeau_challenge_upload_password ($cfg, $_POST['upload_password'])))
- {
- echo 'Error 14';
- 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 (!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;
- }
-
- if (jirafeau_has_upload_password ($cfg) &&
- (!isset ($_POST['upload_password']) ||
- !jirafeau_challenge_upload_password ($cfg, $_POST['upload_password'])))
- {
- echo 'Error 20';
- 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 (!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;
$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;
?>
* 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')) {
}
// 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');
-
-?>
\ No newline at end of file
+require(JIRAFEAU_ROOT . 'lib/template/footer.php');