]> git.p6c8.net - jirafeau_mojo42.git/commitdiff
Added admin interface
authorJerome Jutteau <mojo@couak.net>
Mon, 31 Dec 2012 00:22:14 +0000 (01:22 +0100)
committerJerome Jutteau <mojo@couak.net>
Mon, 31 Dec 2012 00:22:14 +0000 (01:22 +0100)
admin.php [new file with mode: 0755]
file.php
index.php
install.php
lib/config.php
lib/functions.php
lib/lang/fr.php

diff --git a/admin.php b/admin.php
new file mode 100755 (executable)
index 0000000..7aceff9
--- /dev/null
+++ b/admin.php
@@ -0,0 +1,236 @@
+<?php
+/*
+ *  Jirafeau, your web file repository
+ *  Copyright (C) 2012  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 <http://www.gnu.org/licenses/>.
+ */
+define ('JIRAFEAU_ROOT', dirname (__FILE__) . '/');
+
+require (JIRAFEAU_ROOT . 'lib/config.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'))
+{
+    header('Location: install.php'); 
+    exit;
+}
+
+/* Check if the install.php script is still in the directory. */
+if (file_exists (JIRAFEAU_ROOT . 'install.php'))
+{
+    require (JIRAFEAU_ROOT . 'lib/template/header.php');
+    echo '<div class="error"><p>'.
+         _('Installer script still present') .
+         '</p></div>';
+    require (JIRAFEAU_ROOT.'lib/template/footer.php');
+    exit;
+}
+
+/* Disable admin interface if we have a empty admin password. */
+if (!$cfg['admin_password'])
+{
+    require (JIRAFEAU_ROOT . 'lib/template/header.php');
+    echo '<div class="error"><p>'.
+         _('Sorry, the admin interface is not enabled.') .
+         '</p></div>';
+    require (JIRAFEAU_ROOT.'lib/template/footer.php');
+    exit;
+}
+
+/* Check session. */
+session_start();
+
+/* Unlog if asked. */
+if (isset ($_POST['action']) && (strcmp ($_POST['action'], 'logout') == 0))
+    $_SESSION['admin_auth'] = false;
+
+/* Check password. */
+if (isset ($_POST['admin_password']))
+{
+    if (strcmp ($cfg['admin_password'], $_POST['admin_password']) == 0)
+        $_SESSION['admin_auth'] = true;
+    else
+    {
+        $_SESSION['admin_auth'] = false;
+        require (JIRAFEAU_ROOT . 'lib/template/header.php');
+        echo '<div class="error"><p>'.
+             _('Wrong password.') . '</p></div>';
+        require (JIRAFEAU_ROOT.'lib/template/footer.php');
+        exit;
+    }
+}
+/* Ask for password. */
+elseif (!isset ($_SESSION['admin_auth']) || $_SESSION['admin_auth'] != true)
+{
+    require (JIRAFEAU_ROOT . 'lib/template/header.php'); ?>
+    <form action = "<?php echo basename(__FILE__); ?>" method = "post">
+    <fieldset>
+        <table>
+        <tr>
+            <td class = "label"><label for = "enter_password">
+            <?php echo _('Administration password') . ':';?></label>
+            </td>
+            <td class = "field"><input type = "password"
+            name = "admin_password" id = "admin_password"
+            size = "40" />
+            </td>
+        </tr>
+        <tr class = "nav">
+            <td></td>
+            <td class = "nav next">
+            <input type = "submit" name = "key" value =
+            "<?php echo _('Login'); ?>" />
+            </td>
+        </tr>
+        </table>
+    </fieldset>
+    </form>
+    <?php
+    require (JIRAFEAU_ROOT.'lib/template/footer.php');
+    exit;
+}
+
+/* Admin interface. */
+require (JIRAFEAU_ROOT . 'lib/template/header.php');
+?><h2><?php echo _('Admin interface'); ?></h2><?php
+
+/* Show admin interface. */
+{
+        ?><div id = "install">
+        <fieldset><legend><?php echo _('Actions');?></legend>
+        <table>
+        <form action = "<?php echo basename(__FILE__); ?>" method = "post">
+        <tr>
+            <input type = "hidden" name = "action" value = "clean"/>
+            <td class = "info">
+                <?php echo _('Clean expired files'); ?>
+            </td>
+            <td></td>
+            <td>
+                <input type = "submit" value = "<?php echo _('Clean'); ?>" />
+            </td>
+        </tr>
+        </form>
+        <form action = "<?php echo basename(__FILE__); ?>" method = "post">
+        <tr>
+            <input type = "hidden" name = "action" value = "list"/>
+            <td class = "info">
+                <?php echo _('List all files'); ?>
+            </td>
+            <td></td>
+            <td>
+                <input type = "submit" value = "<?php echo _('List'); ?>" />
+            </td>
+        </tr>
+        </form>
+        <form action = "<?php echo basename(__FILE__); ?>" method = "post">
+        <tr>
+            <input type = "hidden" name = "action" value = "search_by_name"/>
+            <td class = "info">
+                <?php echo _('Search files by name'); ?>
+            </td>
+            <td>
+                <input type = "text" name = "name" id = "name"/>
+            </td>
+            <td>
+                <input type = "submit" value = "<?php echo _('Search'); ?>" />
+            </td>
+        </tr>
+        </form>
+        <form action = "<?php echo basename(__FILE__); ?>" method = "post">
+        <tr>
+            <input type = "hidden" name = "action" value = "search_by_file_hash"/>
+            <td class = "info">
+                <?php echo _('Search files by file hash'); ?>
+            </td>
+            <td>
+                <input type = "text" name = "hash" id = "hash"/>
+            </td>
+            <td>
+                <input type = "submit" value = "<?php echo _('Search'); ?>" />
+            </td>
+        </tr>
+        </form>
+        <form action = "<?php echo basename(__FILE__); ?>" method = "post">
+        <tr>
+            <input type = "hidden" name = "action" value = "search_link"/>
+            <td class = "info">
+                <?php echo _('Search a specific link'); ?>
+            </td>
+            <td>
+                <input type = "text" name = "link" id = "link"/>
+            </td>
+            <td>
+                <input type = "submit" value = "<?php echo _('Search'); ?>" />
+            </td>
+        </tr>
+        </form>
+        </table>
+        <form action = "<?php echo basename(__FILE__); ?>" method = "post">
+        <input type = "hidden" name = "action" value = "logout"/>
+        <input type = "submit" value = "<?php echo _('Logout'); ?>" />
+        </form>
+        </fieldset></div><?php
+}
+
+/* Check for actions */
+if (isset ($_POST['action']))
+{
+    if (strcmp ($_POST['action'], 'clean') == 0)
+    {
+        $total = jirafeau_admin_clean ();
+        echo '<div class="message">' . NL;
+        echo '<p>';
+        echo _('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 ($_POST['link']);
+        echo '<div class="message">' . NL;
+        echo '<p>' . _('Link deleted') . '</p></div>';
+    }
+    elseif (strcmp ($_POST['action'], 'delete_file') == 0)
+    {
+        $count = jirafeau_delete_file ($_POST['md5']);
+        echo '<div class="message">' . NL;
+        echo '<p>' . _('Deleted links') . ' : ' . $count . '</p></div>';
+    }
+}
+
+require (JIRAFEAU_ROOT.'lib/template/footer.php');
+
+?>
\ No newline at end of file
index cc3f163c898820707dfab432fae5547b47e3ceca..8cd70005c1b8748c1200a7bdb88372ebcc8f0be7 100644 (file)
--- a/file.php
+++ b/file.php
@@ -34,118 +34,102 @@ if (isset ($_GET['h']) && !empty ($_GET['h']))
 
     if (!preg_match ('/[0-9a-f]{32}$/', $link_name))
     {
-        header ("HTTP/1.0 404 Not Found");
+        require (JIRAFEAU_ROOT.'lib/template/header.php');
+        echo '<div class="error"><p>' . _('Sorry, the requested file is not found') . '</p></div>';
+        require (JIRAFEAU_ROOT.'lib/template/footer.php');
+        exit;
+    }
 
+    $link = jirafeau_get_link ($link_name);
+    if (count ($link) == 0)
+    {
         require (JIRAFEAU_ROOT.'lib/template/header.php');
-        echo '<div class="error"><p>' . _('Error 404: Not Found') . '</p></div>';
+        echo '<div class="error"><p>' . _('Sorry, the requested file is not found') .
+        '</p></div>';
+        require (JIRAFEAU_ROOT.'lib/template/footer.php');
+        exit;
+    }
+    
+    if (!file_exists (VAR_FILES . $link['md5']))
+    {
+        jirafeau_delete ($link_name);
+        require (JIRAFEAU_ROOT.'lib/template/header.php');
+        echo '<div class="error"><p>'._('File not available.').
+        '</p></div>';
         require (JIRAFEAU_ROOT.'lib/template/footer.php');
         exit;
     }
 
-    $link_file = VAR_LINKS.$link_name;
-    if (file_exists ($link_file))
+    if (!empty ($delete_code) && $delete_code == $link['link_code'])
     {
-        $content = file ($link_file);
-        $file_name = trim ($content[0]);
-        $mime_type = trim ($content[1]);
-        $file_size = trim ($content[2]);
-        $key = trim ($content[3], NL);
-        $time = trim ($content[4]);
-        $md5 = trim ($content[5]);
-        $onetime = trim ($content[6]);
-        $link_code = trim ($content[9]);
+        jirafeau_delete ($link_name);
+        require (JIRAFEAU_ROOT.'lib/template/header.php');
+        echo '<div class="message"><p>'._('File has been deleted.').
+         '</p></div>';
+        require (JIRAFEAU_ROOT.'lib/template/footer.php');
+        exit;
+    }
 
-        if (!file_exists (VAR_FILES.$md5))
-        {
-            jirafeau_delete ($link_name);
-            require (JIRAFEAU_ROOT.'lib/template/header.php');
-            echo '<div class="error"><p>'._('File not available.').
-                '</p></div>';
-            require (JIRAFEAU_ROOT.'lib/template/footer.php');
-            exit;
-        }
+    if ($link['time'] != JIRAFEAU_INFINITY && time ()> $link['time'])
+    {
+        jirafeau_delete ($link_name);
+        require (JIRAFEAU_ROOT.'lib/template/header.php');
+        echo '<div class="error"><p>'.
+        _('The time limit of this file has expired.') . ' ' .
+        _('File has been deleted.') .
+        '</p></div>';
+        require (JIRAFEAU_ROOT.'lib/template/footer.php');
+        exit;
+    }
 
-        if (!empty ($delete_code) && $delete_code == $link_code)
+    if (!empty ($link['key']))
+    {
+        if (!isset ($_POST['key']))
         {
-            jirafeau_delete ($link_name);
-            require (JIRAFEAU_ROOT.'lib/template/header.php');
-            echo '<div class="message"><p>'._('File has been deleted.').
-                 '</p></div>';
-            require (JIRAFEAU_ROOT.'lib/template/footer.php');
-            exit;
+        require (JIRAFEAU_ROOT.'lib/template/header.php');
+        ?><div id = "upload">
+            <form action =
+            "<?php echo $_SERVER['REQUEST_URI']; ?>" method =
+            "post"> <input type = "hidden" name = "jirafeau" value =
+            "<?php echo JIRAFEAU_VERSION; ?>" /><fieldset>
+            <legend><?php echo _('Password protection');
+        ?></legend> <table> <tr>
+            <td><?php echo _('Give the password of this file:');
+        ?><input type = "password" name =
+            "key" /></td> </tr> <tr> <td><input type =
+            "submit" value =
+            "<?php echo _('I have the right to download this file'); ?>"
+            /></td> </tr> </table> </fieldset> </form> </div>
+            <?php require (JIRAFEAU_ROOT.'lib/template/footer.php');
+        exit;
         }
-
-        if ($time != JIRAFEAU_INFINITY && time ()> $time)
+        else
+        {
+        if ($link['key'] != md5 ($_POST['key']))
         {
-            jirafeau_delete ($link_name);
+            header ("Access denied");
+
             require (JIRAFEAU_ROOT.'lib/template/header.php');
-            echo '<div class="error"><p>'.
-                _('The time limit of this file has expired.') . ' ' .
-                _('File has been deleted.') .
-                '</p></div>';
+            echo '<div class="error"><p>' . _('Access denied') .
+            '</p></div>';
             require (JIRAFEAU_ROOT.'lib/template/footer.php');
             exit;
         }
-
-        if (!empty ($key))
-        {
-            if (!isset ($_POST['key']))
-            {
-                require (JIRAFEAU_ROOT.'lib/template/header.php');
-                ?><div id = "upload">
-                    <form action =
-                    "<?php echo $_SERVER['REQUEST_URI']; ?>" method =
-                    "post"> <input type = "hidden" name = "jirafeau" value =
-                    "<?php echo JIRAFEAU_VERSION; ?>" /><fieldset>
-                    <legend><?php echo _('Password protection');
-                ?></legend> <table> <tr>
-                    <td><?php echo _('Give the password of this file:');
-                ?><input type = "password" name =
-                    "key" /></td> </tr> <tr> <td><input type =
-                    "submit" value =
-                    "<?php echo _('I have the right to download this file'); ?>"
-                    /></td> </tr> </table> </fieldset> </form> </div>
-                    <?php require (JIRAFEAU_ROOT.'lib/template/footer.php');
-                exit;
-            }
-            else
-            {
-                if ($key != md5 ($_POST['key']))
-                {
-                    header ("HTTP/1.0 403 Forbidden");
-
-                    require (JIRAFEAU_ROOT.'lib/template/header.php');
-                    echo '<div class="error"><p>' . _('Error 403: Forbidden') .
-                    '</p></div>';
-                    require (JIRAFEAU_ROOT.'lib/template/footer.php');
-                    exit;
-                }
-            }
-        }
-
-        header ('Content-Length: ' . $file_size);
-        header ('Content-Type: ' . $mime_type);
-        if (!jirafeau_is_viewable ($mime_type))
-        {
-            header ('Content-Disposition: attachment; filename="' .
-                    $file_name . '"');
         }
-        readfile (VAR_FILES.$md5);
-
-        if ($onetime == 'O')
-            jirafeau_delete ($link_name);
-        exit;
     }
-    else
-    {
-        header ("HTTP/1.0 404 Not Found");
 
-        require (JIRAFEAU_ROOT.'lib/template/header.php');
-        echo '<div class="error"><p>' . _('Error 404: Not Found') .
-        '</p></div>';
-        require (JIRAFEAU_ROOT.'lib/template/footer.php');
-        exit;
+    header ('Content-Length: ' . $link['file_size']);
+    header ('Content-Type: ' . $link['mime_type']);
+    if (!jirafeau_is_viewable ($link['mime_type']))
+    {
+        header ('Content-Disposition: attachment; filename="' .
+            $link['file_name'] . '"');
     }
+    readfile (VAR_FILES . $link['md5']);
+
+    if ($link['onetime'] == 'O')
+        jirafeau_delete ($link_name);
+    exit;
 }
 else
 {
index 912b1ef76c2adf7c9b77ae68603a35e8a9f8e0aa..a32af36f0ff830556c031a69323c8dff360eea1a 100644 (file)
--- a/index.php
+++ b/index.php
  *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 define ('JIRAFEAU_ROOT', dirname (__FILE__) . '/');
-define ('DEBUG', true);
 
 require (JIRAFEAU_ROOT . 'lib/config.php');
 require (JIRAFEAU_ROOT . 'lib/settings.php');
 require (JIRAFEAU_ROOT . 'lib/functions.php');
 require (JIRAFEAU_ROOT . 'lib/lang.php');
 
+if (file_exists (JIRAFEAU_ROOT . 'install.php')
+    && !file_exists (JIRAFEAU_ROOT . 'lib/config.local.php'))
+{
+    header('Location: install.php'); 
+    exit;
+}
+
 /* check if the destination dirs are writable */
 $writable = is_writable (VAR_FILES) && is_writable (VAR_LINKS);
 
 $res = array ();
 if ($writable && isset ($_POST['jirafeau']))
 {
-
     $key = $_POST['key'];
 
     $time = time ();
@@ -62,13 +67,6 @@ if ($writable && isset ($_POST['jirafeau']))
                          $key, $time, $cfg, $_SERVER['REMOTE_ADDR']);
 }
 
-if (file_exists (JIRAFEAU_ROOT . 'install.php')
-    && !file_exists (JIRAFEAU_ROOT . 'lib/config.local.php'))
-{
-    header('Location: install.php'); 
-    exit;
-}
-
 require (JIRAFEAU_ROOT . 'lib/template/header.php');
 
 /* Checking for errors. */
index ff4f1e2e48493713a41a86a57355e701cfb55ac2..838d749446589f3b3faab1494c094ffe5d73dd15 100755 (executable)
@@ -155,6 +155,17 @@ if (isset ($_POST['step']) && isset ($_POST['next']))
         break;
 
     case 2:
+        $cfg['admin_password'] = $_POST['admin_password'];
+        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);
+        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);
@@ -178,122 +189,166 @@ else if (isset ($_POST['retry']))
 
 switch ($current)
 {
-case 3:
+case 1:
+default:
     ?><h2><?php printf (_('Installation of Jirafeau') . ' - ' . _('step') .
-    ' %d ' . _('out of') . ' %d', 3, 3);
+    ' %d ' . _('out of') . ' %d', 1, 4);
     ?></h2> <div id = "install"> <form action =
         "<?php echo basename(__FILE__); ?>" method = "post"> <input type =
         "hidden" name = "jirafeau" value =
         "<?php echo JIRAFEAU_VERSION; ?>" /><input type = "hidden" name =
-        "step" value =
-        "3" /><fieldset> <legend><?php echo _('Finalisation');
+        "step" value = "1" /><fieldset> <legend><?php echo _('Language');
     ?></legend> <table> <tr> <td class = "info" colspan =
         "2"><?php echo
-        _ ('Jirafeau is setting the website according to the configuration ' .
-           'you provided.');
-    ?></td> </tr> <tr> <td class = "nav previous"><input type =
-        "submit" name = "previous" value =
-        "
-    <?php
-    echo _('Previous step');
-    ?>" /></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 =
-            "<?php echo JIRAFEAU_VERSION; ?>" /><input type = "hidden" name =
-            "step" value = "3" /><input type = "submit" name =
-            "retry" value =
-            "<?php echo _('Retry this step'); ?>" /></form>
-            <?php echo '</p></div>';
-    }
-    else
+        _
+        ('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 _('Choose the default language') . ':';
+    ?></label></td>
+        <td class = "field">
+        <select name = "lang" id = "select_lang">
+        <?php foreach ($languages_list as $key => $item)
     {
-        echo '<div class="message"><p>' .
-             _('Jirafeau is now fully operational') . ':' .
-             '<br /><a href="' . $cfg['web_root'] . '">' .
-             $cfg['web_root'].'</a></p></div>';
+        echo '<option value="'.$key.'"'.($key ==
+                      $cfg['lang'] ? ' selected="selected"'
+                      : '').'>'.$item.'</option>'.NL;
     }
-    break;
-
+    ?></select>
+        </td>
+        </tr>
+        <tr class = "nav">
+        <td></td>
+        <td class = "nav next"><input type = "submit" name = "next" value =
+        "<?php echo _('Next step'); ?>" /></td> </tr> </table>
+        </fieldset> </form> </div> <?php
+break;
+    
 case 2:
     ?><h2><?php printf (_('Installation of Jirafeau') . ' - ' . _('step') .
-    ' %d ' . _('out of') . ' %d', 2, 3);
+    ' %d ' . _('out of') . ' %d', 2, 4);
+    ?></h2> <div id = "install"> <form action =
+        "<?php echo basename(__FILE__); ?>" method = "post"> <input type =
+        "hidden" name = "jirafeau" value =
+        "<?php echo JIRAFEAU_VERSION; ?>" /><input type = "hidden" name =
+        "step" value = "2" /><fieldset> <legend><?php
+        echo _('Administration password');
+    ?></legend> <table> <tr> <td class = "info" colspan =
+        "2"><?php echo
+        _
+        ('Jirafeau has an administration interface (through admin.php). ' .
+        'You can set a password to access the intercace or let it be empty ' .
+        'to disable the interface.');
+    ?></td> </tr> <tr> <td class = "label"><label for = "select_password"
+       ><?php echo _('Administration password') . ':';
+    ?></label></td>
+        <td class = "field"><input type = "password" name = "admin_password"
+        id = "admin_password" size = "40" /></td>
+        </tr>
+        <tr class = "nav">
+        <td></td>
+        <td class = "nav next"><input type = "submit" name = "next" value =
+        "<?php echo _('Next step'); ?>" /></td> </tr> </table>
+        </fieldset> </form> </div> <?php
+break;
+
+case 3:
+    ?><h2><?php printf (_('Installation of Jirafeau') . ' - ' . _('step') .
+    ' %d ' . _('out of') . ' %d', 3, 4);
     ?></h2> <div id = "install"> <form action =
         "<?php echo basename(__FILE__); ?>" method = "post"> <input type =
         "hidden" name = "jirafeau" value =
         "<?php echo JIRAFEAU_VERSION; ?>" /><input type = "hidden" name =
         "step" value =
-        "2" /><fieldset> <legend><?php echo _('Information');
+        "3" /><fieldset> <legend><?php echo _('Information');
     ?></legend> <table> <tr> <td class = "info" colspan =
         "2"><?php echo
         _
-        ('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 ending slash!');
+        ('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 ending slash!');
     ?></td> </tr> <tr> <td class = "label"><label for = "input_web_root"
        ><?php echo _('Base address') . ':';
     ?></label></td>
-        <td class = "field"><input type = "text" name = "web_root" id = "input_web_root" value = "<?php
+        <td class = "field"><input type = "text" name = "web_root"
+        id = "input_web_root" value = "<?php
         echo (empty($cfg['web_root']) ?
-          'http://' . $_SERVER['HTTP_HOST'] . str_replace(basename(__FILE__), '', $_SERVER['REQUEST_URI']) :
-          $cfg['web_root']);
+          'http://' . $_SERVER['HTTP_HOST'] . str_replace(basename(__FILE__),
+          '', $_SERVER['REQUEST_URI']) : $cfg['web_root']);
       ?>" size = "40" /></td>
-        </tr> <tr> <td class = "info" colspan = "2"><?php echo _('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 of this directory. Do not forget the ending slash!');
+        </tr> <tr> <td class = "info" colspan = "2"><?php
+        echo _('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 of this directory. Do not ' .
+        'forget the ending slash!');
     ?></td> </tr> <tr> <td class = "label"><label for = "input_var_root"
        ><?php echo _('Data directory') . ':';
     ?></label></td>
-        <td class = "field"><input type = "text" name = "var_root" id = "input_var_root" value = "<?php
+        <td class = "field"><input type = "text" name = "var_root"
+        id = "input_var_root" value = "<?php
         if(empty($cfg['var_root'])) {
-          $alphanum = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
+          $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 . '/';
-        } else {
+        }
+        else
           echo $cfg['var_root'];
-        } 
       ?>" size = "40" /></td>
-        </tr> <tr> <td colspan = "2"> <input type = "submit" class = "navright" name = "next" value = "<?php echo _('Next step'); ?>" /><input type = "submit" class = "navleft" name = "previous" value = "<?php echo _('Previous step'); ?>" /></td> </tr> </table> </fieldset> </form> </div> <?php break;
+        </tr> <tr> <td colspan = "2"> <input type = "submit"
+        class = "navright" name = "next" value = "
+        <?php echo _('Next step'); ?>" /><input type = "submit"
+        class = "navleft" name = "previous" value = "<?php
+        echo _('Previous step'); ?>" /></td> </tr> </table> </fieldset>
+        </form> </div> <?php
+break;
 
-case 1:
-default:
+case 4:
     ?><h2><?php printf (_('Installation of Jirafeau') . ' - ' . _('step') .
-    ' %d ' . _('out of') . ' %d', 1, 3);
+    ' %d ' . _('out of') . ' %d', 4, 4);
     ?></h2> <div id = "install"> <form action =
         "<?php echo basename(__FILE__); ?>" method = "post"> <input type =
         "hidden" name = "jirafeau" value =
         "<?php echo JIRAFEAU_VERSION; ?>" /><input type = "hidden" name =
-        "step" value = "1" /><fieldset> <legend><?php echo _('Language');
+        "step" value =
+        "4" /><fieldset> <legend><?php echo _('Finalisation');
     ?></legend> <table> <tr> <td class = "info" colspan =
         "2"><?php echo
-        _
-        ('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 _('Choose the default language') . ':';
-    ?></label></td>
-        <td class = "field">
-        <select name = "lang" id = "select_lang">
-        <?php foreach ($languages_list as $key => $item)
+        _ ('Jirafeau is setting the website according to the configuration ' .
+           'you provided.');
+    ?></td> </tr> <tr> <td class = "nav previous"><input type =
+        "submit" name = "previous" value =
+        "
+    <?php
+    echo _('Previous step');
+    ?>" /></td> <td></td> </tr>
+        </table> </fieldset> </form> </div>
+    <?php
+    $err = jirafeau_check_var_dir ($cfg['var_root']);
+    if ($err['has_error'])
     {
-        echo '<option value="'.$key.'"'.($key ==
-                                         $cfg['lang'] ? ' selected="selected"'
-                                         : '').'>'.$item.'</option>'.NL;
+        echo '<div class="error"><p>'.$err['why'].'<br />'.NL;
+        ?><form action = "<?php echo basename(__FILE__); ?>" method =
+            "post"> <input type = "hidden" name = "jirafeau" value =
+            "<?php echo JIRAFEAU_VERSION; ?>" /><input type = "hidden" name =
+            "step" value = "3" /><input type = "submit" name =
+            "retry" value =
+            "<?php echo _('Retry this step'); ?>" /></form>
+            <?php echo '</p></div>';
     }
-    ?></select>
-        </td>
-        </tr>
-        <tr class = "nav">
-        <td></td>
-        <td class = "nav next"><input type = "submit" name = "next" value =
-        "<?php echo _('Next step'); ?>" /></td> </tr> </table>
-        </fieldset> </form> </div> <?php break;
+    else
+    {
+        echo '<div class="message"><p>' .
+             _('Jirafeau is now fully operational') . ':' .
+             '<br /><a href="' . $cfg['web_root'] . '">' .
+             $cfg['web_root'].'</a></p></div>';
+    }
+break;
 }
 
-
 require (JIRAFEAU_ROOT . 'lib/template/footer.php');
 ?>
index 25b5620601a2072a45572718394c00eda57fb61c..23ed74c3d0a8170e2fc69f9e473f4bde28088962 100644 (file)
  *  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/>.
  */
 /*
  * default configuration
  * if you want to change this, overwrite in a config.local.php file
  */
+ global $cfg;
 /* don't forget the ending '/' */
-global $cfg;
 $cfg['web_root'] = '';
 $cfg['var_root'] = '';
+
+/* Lang choice between 'auto', 'en' and 'fr'.
+   'auto' mode will take the user's browser informations. Will take english if
+   user's langage is not available.
+ */
 $cfg['lang'] = 'auto';
 $cfg['style'] = 'default';
 $cfg['rewrite'] = false;
-$cfg['password'] = '';
+/* An empty admin password will disable the admin interface. */
+$cfg['admin_password'] = '';
 
 if ((basename (__FILE__) != 'config.local.php')
     && file_exists (JIRAFEAU_ROOT.'lib/config.local.php'))
index bb49079768081e381d53752722c5f911ea210620..10e98685c60f48a9ecd56caa27c6b5257f6c2ae1 100644 (file)
@@ -99,9 +99,9 @@ jirafeau_delete ($link)
     if (!file_exists ( VAR_LINKS . $link))
         return;
 
-    $content = file ( VAR_LINKS . $link);
+    $content = file (VAR_LINKS . $link);
     $md5 = trim ($content[5]);
-    unlink ( VAR_LINKS . $link);
+    unlink (VAR_LINKS . $link);
 
     $counter = 1;
     if (file_exists ( VAR_FILES . $md5. '_count'))
@@ -125,6 +125,36 @@ jirafeau_delete ($link)
     }
 }
 
+/**
+ * Delete a file and it's links.
+ */
+function
+jirafeau_delete_file ($md5)
+{
+    $count = 0;
+    $links_dir = scandir (VAR_LINKS);
+    
+    foreach ($links_dir as $link)
+    {
+        if (strcmp ($link, '.') == 0 || strcmp ($link, '..') == 0)
+            continue;
+        /* Read link informations. */
+        $l = jirafeau_get_link ($link);
+        if ($l['md5'] == $md5)
+        {
+            $count++;
+            jirafeau_delete ($link);
+        }
+    }
+
+    if (file_exists (VAR_FILES . $md5 . '_count'))
+        unlink (VAR_FILES . $md5. '_count');
+    if (file_exists (VAR_FILES . $md5))
+        unlink (VAR_FILES . $md5);
+
+    return $count;
+}
+
 /**
  * handles an uploaded file
  * @param $file the file struct given by $_FILE[]
@@ -302,4 +332,137 @@ show_errors ()
     }
 }
 
+/**
+ * Read link informations
+ * @return array containing informations.
+ */
+function
+jirafeau_get_link ($hash)
+{
+    $out = array ();
+    $link = VAR_LINKS . $hash;
+
+    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]);
+    
+    return $out;
+}
+
+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];
+} 
+
+/**
+ * List files in admin interface.
+ */
+function
+jirafeau_admin_list ($name, $file_hash, $link_hash)
+{
+    $links_dir = scandir (VAR_LINKS);
+    echo '<fieldset><legend>';
+    if (!empty ($name))
+        echo $name . ' ';
+    if (!empty ($file_hash))
+        echo $file_hash . ' ';
+    if (!empty ($link_hash))
+        echo $link_hash . ' ';
+    if (empty ($name) && empty ($file_hash) && empty ($link_hash))
+        echo _('List all files');
+    echo '</legend>';
+    echo '<table>';
+    echo '<tr>';
+    echo '<td>' . _('Filename') . '</td>';
+    echo '<td>' . _('Type') . '</td>';
+    echo '<td>' . _('Size') . '</td>';
+    echo '<td>' . _('Expire') . '</td>';
+    echo '<td>' . _('Onetime') . '</td>';
+    echo '<td>' . _('Upload date') . '</td>';
+    echo '<td>' . _('Origin') . '</td>';
+    echo '<td>' . _('Action') . '</td>';
+    echo '</tr>';
+    foreach ($links_dir as $link)
+    {
+        if (strcmp ($link, '.') == 0 || strcmp ($link, '..') == 0)
+            continue;
+        /* Read link informations. */
+        $l = jirafeau_get_link ($link);
+        
+        /* Filter. */
+        if (!empty ($name) && $name != $l['file_name'])
+            continue;
+        if (!empty ($file_hash) && $file_hash != $l['md5'])
+            continue;
+        if (!empty ($link_hash) && $link_hash != $link)
+            continue;
+        
+        /* Print link informations. */
+        echo '<tr>';
+        echo '<td>' . $l['file_name'] . '</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>' . $l['onetime'] . '</td>';
+        echo '<td>' . strftime ('%c', $l['upload_date']) . '</td>';
+        echo '<td>' . $l['ip'] . '</td>';
+        echo '<td>' .
+        '<form action = "admin.php" method = "post">' .
+        '<input type = "hidden" name = "action" value = "delete_link"/>' .
+        '<input type = "hidden" name = "link" value = "' . $link . '"/>' .
+        '<input type = "submit" value = "' . _('Del link') . '" />' .
+        '</form>' .
+        '<form action = "admin.php" method = "post">' .
+        '<input type = "hidden" name = "action" value = "delete_file"/>' .
+        '<input type = "hidden" name = "md5" value = "' . $l['md5'] . '"/>' .
+        '<input type = "submit" value = "' . _('Del file and links') . '" />' .
+        '</form>' .
+        '</td>';
+        echo '</tr>';
+    }
+    echo '</table></fieldset>';
+}
+
+/**
+ * Clean expired files.
+ * @return number of cleaned files.
+ */
+function
+jirafeau_admin_clean ()
+{
+    $c = 0;
+    $links_dir = scandir (VAR_LINKS);
+
+    foreach ($links_dir as $link)
+    {
+        if (strcmp ($link, '.') == 0 || strcmp ($link, '..') == 0)
+            continue;
+        /* Read link informations. */
+        $l = jirafeau_get_link ($link);
+        if ($l['time'] > 0 && $l['time'] < time ())
+        {
+            echo 'HAAAA' . $l['time'] . '-->' . time ();
+            jirafeau_delete ($link);
+            $c++;
+        }
+    }
+    return $c;
+}
 ?>
index e5dd12f2d9a64bfb74dbb1fe4f4574f844825066..2864fb6d7d4c388dfdfac02b421d9ccfe3259d59 100755 (executable)
@@ -42,14 +42,14 @@ $tr = array (
              'This file is valid until the following date' => 'Ce fichier est valable jusqu\'à la date suivante',
              'Keep the following URL to delete it at any moment' => 'Conservez le lien suivant pour le supprimer à n\'importe quel moment',
              /* file.php */
-             'Error 404: Not Found' => 'Erreur 404: La page que vous cherchez n\'existe pas ou n\'existe plus',
+             'Sorry, the requested file is not found' => 'Désolé, le fichier que vous demandez n\'existe pas ou n\'existe plus',
              'File not available.' => 'Fichier non disponible',
              'File has been deleted.' => 'Le fichier a été supprimé.',
              'The time limit of this file has expired.' => 'La limite de temps est dépassée.',
              'Password protection' => 'Protection par mot de passe',
              'Give the password of this file:' => 'Donnez le mot de passe pour ce fichier',
              'I have the right to download this file' => 'J\'ai le droit de télécharger ce fichier',
-             'Error 403: Forbidden' => 'Erreur 403: Accès interdit',
+             'Access denied' => 'Accès interdit',
              /* install.hpp */
              'This file was generated by the install process. You can edit it. Please see config.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.php pour comprendre les éléments de configuration.',
              'The following directory could not be created' => 'Le dossier suivant ne peut être créé',
@@ -68,6 +68,7 @@ $tr = array (
             'Installation of Jirafeau' => 'Installation de Jirafeau',
             'step' => 'étape',
             'out of' => 'sur',
+            'Administration password' => 'Mot de passe d\'administration',
             'Finalisation' => 'Finalisation',
             'Jirafeau is setting the website according to the configuration you provided.' => 'Jirafeau se configure selon les paramêtres donnés',
             'Previous step' => 'Etape précedente',
@@ -84,6 +85,38 @@ $tr = array (
                 => 'Jirafeau supporte plusieurs languages. Choisissez un langage spécific ou Automatic (la langue utilisée est alors fournie par le navigateur du visiteur).',
             'Choose the default language' => 'Choissiez la langue par defaut',
             'Next step' => 'Etape suivante',
-            );
-
+            'Jirafeau has an administration interface (through admin.php). ' .
+            'You can set a password to access the intercace or let it be empty ' .
+            'to disable the interface.' => 'Jirafeau a une interface d\'administration (accessible via admin.php). Vous pouvez saisir un mot de passe pour y acceder ou ne pas en mettre pour désactiver l\'accès à l\'interface.',
+            'Administration password' => 'Mot de passe d\'administration',
+            /* admin.php */
+            'Sorry, the admin interface is not enabled.' => 'Désolé, l\'interface d\'administration n\'est pas activée.',
+            'Login' => 'Connexion',
+            'Wrong password.' => 'Mot de passe invalide.',
+            'Admin interface' => 'Interface d\'adminitration',
+            'Clean expired files' => 'Nettoie les fichiers périmés',
+            'Clean' => 'Nettoyage',
+            'Search files by name' => 'Rechercher les fichiers par leur nom',
+            'Search' => 'Rechercher',
+            'List all files' => 'Lister tous les fichiers',
+            'List' => 'Lister',
+            'Actions' => 'Actions',
+            'Search files by file hash' => 'Rechercher par empreinte de fichier',
+            'Search a specific link' => 'Rechercher un lien particulier',
+            'Number of cleaned files' => 'Nombre de fichiers nettoyés',
+            'Logout' => 'Déconnection',
+            'You are now Logout' => 'Vous êtes maintenant déconnecté',
+            'Link deleted' => 'Lien supprimé',
+            'Filename' => 'Nom',
+            'Type' => 'Type',
+            'Size' => 'Taille',
+            'Expire' => 'Expiration',
+            'Onetime' => 'Une fois',
+            'Upload date' => 'Date d\'envoie',
+            'Origin' => 'Origine',
+            'Action' => 'Action',
+            'Del link' => 'Suppr lien',
+            'Del file and links' => 'Suppr fichier et liens',
+            'Deleted links' => 'Liens supprimés',
+    );
  ?>
\ No newline at end of file

patrick-canterino.de