]> git.p6c8.net - jirafeau.git/blobdiff - admin.php
Merge branch 'bug_content_length' into 'next-release'
[jirafeau.git] / admin.php
index cfdfe3010dc26a12fab2b644329aa33b585eb7a4..f8270a28d3bef505f8888b1de17483d8cf780f1c 100644 (file)
--- a/admin.php
+++ b/admin.php
@@ -1,7 +1,9 @@
 <?php
 /*
  *  Jirafeau, your web file repository
+ *  Copyright (C) 2008  Julien "axolotl" BERNARD <axolotl@magieeternelle.org>
  *  Copyright (C) 2015  Jerome Jutteau <jerome@jutteau.fr>
+ *  Copyright (C) 2024  Jirafeau project <https://gitlab.com/jirafeau> (see AUTHORS.md)
  *
  *  This program is free software: you can redistribute it and/or modify
  *  it under the terms of the GNU Affero General Public License as
@@ -14,7 +16,7 @@
  *  GNU Affero General Public License for more details.
  *
  *  You should have received a copy of the GNU Affero General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *  along with this program.  If not, see <https://www.gnu.org/licenses/>.
  */
 session_start();
 define('JIRAFEAU_ROOT', dirname(__FILE__) . '/');
@@ -32,16 +34,21 @@ if (file_exists(JIRAFEAU_ROOT . 'install.php')
 
 /* If called from CLI, no password or graphical interface */
 if (php_sapi_name() == "cli") {
-    if ((count($argv)>1) && $argv[1]=="clean_expired") {
+    if ($cfg['installation_done'] == false) {
+        die("Installation not completed yet.\n");
+    }
+    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") {
+        echo "$total expired files deleted.\n";
+    } elseif ((count($argv) > 1) && $argv[1] == 'clean_async') {
         $total = jirafeau_admin_clean_async();
-        echo "$total old unfinished transfers deleted.";
+        echo "$total old unfinished transfers deleted.\n";
     } else {
-        die("No command found. Should be admin.php <clean_expired|clean_async>.");
+        die("No command found. Should be admin.php <clean_expired|clean_async>.\n");
     }
-} else {
+}
+/* Second check: Challenge by IP */
+elseif (true === jirafeau_challenge_admin_ip($cfg, get_ip_address($cfg))) {
     /* 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');
@@ -52,18 +59,19 @@ if (php_sapi_name() == "cli") {
         exit;
     }
 
-    /* Unlog if asked. */
+    /* Logout if requested. */
     if (jirafeau_admin_session_logged() && isset($_POST['action']) && (strcmp($_POST['action'], 'logout') == 0)) {
-        jirafeau_admin_session_end();
+        jirafeau_session_end();
     }
 
     if (!jirafeau_admin_session_logged()) {
-        /* Test HTTP authentification. */
+        /* Test HTTP authentication. */
         if (!empty($cfg['admin_http_auth_user']) &&
-          $cfg['admin_http_auth_user'] == $_SERVER['PHP_AUTH_USER']) {
+          ((is_array($cfg['admin_http_auth_user']) && in_array($_SERVER['PHP_AUTH_USER'], $cfg['admin_http_auth_user'])) ||
+          (($cfg['admin_http_auth_user'] == $_SERVER['PHP_AUTH_USER'])))) {
             jirafeau_admin_session_start();
         }
-        /* Test web password authentification. */
+        /* Test web password authentication. */
         elseif (!empty($cfg['admin_password']) && isset($_POST['admin_password'])) {
             if ($cfg['admin_password'] === hash('sha256', $_POST['admin_password'])) {
                 jirafeau_admin_session_start();
@@ -88,7 +96,7 @@ if (php_sapi_name() == "cli") {
               <tr>
                   <td class = "field"><input type = "password"
                   name = "admin_password" id = "admin_password"
-                  size = "40" />
+                  size = "40" autocomplete = "current-password" />
                   </td>
               </tr>
               <tr class = "nav">
@@ -114,9 +122,13 @@ if (php_sapi_name() == "cli") {
     /* 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
-          ?><h2>(version <?php echo JIRAFEAU_VERSION ?>)</h2><?php
+        ?><h2>(version <?php echo JIRAFEAU_VERSION ?>)</h2><?php
+
+        if ($cfg['enable_crypt'] && !(extension_loaded('sodium'))) {
+            echo '<div class="error"><p>'.t('SODIUM_UNAVAILABLE').'</p></div>';
+        }
 
-          ?><div id = "admin">
+        ?><div id = "admin">
           <fieldset><legend><?php echo t('ACTIONS'); ?></legend>
           <table>
           <form method="post">
@@ -216,6 +228,19 @@ if (php_sapi_name() == "cli") {
               </td>
           </tr>
           </form>
+          <form method="post">
+          <tr>
+              <input type = "hidden" name = "action" value = "bug_report_info"/>
+              <?php echo jirafeau_admin_csrf_field() ?>
+              <td class = "info">
+                  <?php echo t('REPORTING_AN_ISSUE'); ?>
+              </td>
+              <td></td>
+              <td>
+                  <input type = "submit" value = "<?php echo t('INFO'); ?>" />
+              </td>
+          </tr>
+          </form>
           </table>
           <form method="post">
               <input type = "hidden" name = "action" value = "logout" />
@@ -279,9 +304,14 @@ if (php_sapi_name() == "cli") {
                 fclose($r);
             }
             exit;
+        } elseif (strcmp($_POST['action'], 'bug_report_info') == 0) {
+            echo jirafeau_admin_bug_report($cfg);
         }
     }
 
     require(JIRAFEAU_ROOT.'lib/template/footer.php');
+} else {
+    require(JIRAFEAU_ROOT . 'lib/template/header.php');
+    jirafeau_fatal_error(t('ACCESS_KO'), $cfg);
 }
 ?>

patrick-canterino.de