]> git.p6c8.net - jirafeau_project.git/commitdiff
Added a scripting interface.
authorJerome Jutteau <mojo@couak.net>
Tue, 29 Jan 2013 22:42:55 +0000 (23:42 +0100)
committerJerome Jutteau <mojo@couak.net>
Tue, 29 Jan 2013 22:42:55 +0000 (23:42 +0100)
lib/lang/fr.php
media/industrial/style.css.php
script.php [new file with mode: 0755]

index c8b3fe4accbd1458b3372f0c6c280579d8e34cf1..964c30796be3387539f3899fe0b798e7fd2265f6 100755 (executable)
@@ -127,5 +127,21 @@ $tr = array (
             'Del link' => 'Suppr lien',
             'Del file and links' => 'Suppr fichier et liens',
             'Deleted links' => 'Liens supprimés',
             'Del link' => 'Suppr lien',
             'Del file and links' => 'Suppr fichier et liens',
             'Deleted links' => 'Liens supprimés',
+            /* script.php */
+            'This interface permits to script your uploads and downloads.' => 'Cette interface permet de programmer vos envoie et téléversements.',
+            'The instructions above show how to query this interface.' => 'Les instructions ci-dessous montrent comment interroger cette interface.',
+            'Get server capacity' => 'Récupérer la capacité d\'envoie du serveur',
+            'Send a GET query to' => 'Envoyez une requette GET à',
+            'Required' => 'Requis',
+            'Optional' => 'Optionel',
+            'Parameters' => 'Paramètres',
+            'This will return brut text content.' => 'Retourne un texte brut.',
+            'First line is the server capacity (in Bytes).' => 'La première ligne correspond à la capacité du serveur (en octets).',
+            'Example' => 'Exemple',
+            'If a password has been set, send a POST request with it.' => 'Si un mot de passe a été définis, envoyer une requette POST avec.',
+            'Delete a file' => 'Supprimer un fichier',
+            'This will return "Ok" if succeded, "Error" otherwhise.' => 'Retourne "OK" en cas de succès, "Error" dans le cas contraire.',
+            'Get a generated scripts' => 'Récupérer un script généré',
+            'This will return brut text content of the code.' => 'Renvoie le code sous forme the texte brut.',
     );
  ?>
\ No newline at end of file
     );
  ?>
\ No newline at end of file
index b3204bffc8d85aa011aa5a39ae5291cccb0e1de3..cb037253050b6e92cbbfb2e7ae3a1f3bf6e81367 100755 (executable)
@@ -134,3 +134,26 @@ input:hover {
   content: url('ok.png');
   padding-right: 1ex;
 }
   content: url('ok.png');
   padding-right: 1ex;
 }
+
+.info {
+  text-align: left;
+  width: 40em;
+  margin: auto;
+  background: #E2f5ff;
+  border: 2px solid #02233f;
+  -moz-border-radius: 10px;
+  -webkit-border-radius: 10px;
+}
+
+.info h2 {
+  text-align: center;
+}
+
+.info h3 {
+  text-align: center;
+}
+
+.info p {
+  margin-left: 5%;
+  margin-right: 5%;
+}
\ No newline at end of file
diff --git a/script.php b/script.php
new file mode 100755 (executable)
index 0000000..eda2cc9
--- /dev/null
@@ -0,0 +1,382 @@
+<?php\r
+/*\r
+ *  Jirafeau, your web file repository\r
+ *  Copyright (C) 2012  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 <http://www.gnu.org/licenses/>.\r
+ */\r
+\r
+/*\r
+ * This file permits to easyly script file sending, receiving, deleting, ...\r
+ * If you don't want this feature, you can simply delete this file from your\r
+ * web directory.\r
+ */\r
+\r
+define ('JIRAFEAU_ROOT', dirname (__FILE__) . '/');\r
+\r
+require (JIRAFEAU_ROOT . 'lib/config.php');\r
+require (JIRAFEAU_ROOT . 'lib/settings.php');\r
+require (JIRAFEAU_ROOT . 'lib/functions.php');\r
+require (JIRAFEAU_ROOT . 'lib/lang.php');\r
+\r
+if (file_exists (JIRAFEAU_ROOT . 'install.php'))\r
+{\r
+    header('Content-Type: text; charset=utf-8');\r
+    echo "Error";\r
+    exit;\r
+}\r
+\r
+ global $script_langages;\r
+ $script_langages = array ('bash' => 'Bash');\r
+\r
+if ($_SERVER['REQUEST_METHOD'] == "GET" && count ($_GET) == 0)\r
+{\r
+    require (JIRAFEAU_ROOT . 'lib/template/header.php');\r
+    echo '<div class="info">';\r
+    echo '<h2>' . t('Welcome to Jirafeau\'s query interface') . '</h2>';\r
+    echo '<p>';\r
+    echo t('This interface permits to script your uploads and downloads.') .\r
+            ' ' . t('The instructions above show how to query this interface.');\r
+    echo '</p>';\r
+    \r
+    echo '<h3>' . t('Get server capacity') . ':</h3>';\r
+    echo '<p>';\r
+    echo t('Send a GET query to') . ': <i>' . $web_root . 'script.php</i><br />';\r
+    echo '<br />';\r
+    echo t('Parameters') . ':<br />';\r
+    echo "<b>get_capacity=</b>1<i> (" . t('Required') . ")</i> <br />";\r
+    echo '</p>';\r
+    echo '<p>' . t('This will return brut text content.') . ' ' .\r
+            t('First line is the server capacity (in Bytes).') . '<br /></p>';\r
+    echo '<p>';\r
+    echo t('Example') . ": <a href=\"" . $web_root . "script.php?get_capacity=1\">" . $web_root . "script.php?get_capacity=1</a> ";\r
+    echo '</p>';\r
+    \r
+    echo '<h3>' . t('Upload a file') . ':</h3>';\r
+    echo '<p>';\r
+    echo t('Send a POST query to') . ': <i>' . $web_root . 'script.php</i><br />';\r
+    echo '<br />';\r
+    echo t('Parameters') . ':<br />';\r
+    echo "<b>file=</b>C:\\your\\file\\path<i> (" . t('Required') . ")</i> <br />";\r
+    echo "<b>time=</b>[minute|hour|day|week|month|none]<i> (" . t('Optional') . ', '. t('default: none') . ")</i> <br />";\r
+    echo "<b>password=</b>your_password<i> (" . t('Optional') . ")</i> <br />";\r
+    echo "<b>one_time_download=</b>1<i> (" . t('Optional') . ")</i> <br />";\r
+    echo '</p>';\r
+    echo '<p>' . t('This will return brut text content.') . ' ' .\r
+         t('First line is the download reference and the second line the delete code.') . '<br /></p>';\r
+    \r
+    echo '<h3>' . t('Get a file') . ':</h3>';\r
+    echo '<p>';\r
+    echo t('Send a GET query to') . ': <i>' . $web_root . 'script.php</i><br />';\r
+    echo '<br />';\r
+    echo t('Parameters') . ':<br />';\r
+    echo "<b>h=</b>your_download_reference<i> (" . t('Required') . ")</i> <br />";\r
+    echo '</p>';\r
+    echo '<p>';\r
+    echo t('If a password has been set, send a POST request with it.');\r
+    echo '<br />';\r
+    echo t('Parameters') . ':<br />';\r
+    echo "<b>password=</b>your_password<i> (" . t('Optional') . ")</i> <br />";\r
+    echo '</p>';\r
+    echo '<p>';\r
+    echo t('Example') . ": <a href=\"" . $web_root . "script.php?h=30ngy0hsDcpfrF8zR7x9iU\">" . $web_root . "script.php?h=30ngy0hsDcpfrF8zR7x9iU</a> ";\r
+    echo '</p>';\r
+    \r
+    echo '<h3>' . t('Delete a file') . ':</h3>';\r
+    echo '<p>';\r
+    echo t('Send a GET query to') . ': <i>' . $web_root . 'script.php</i><br />';\r
+    echo '<br />';\r
+    echo t('Parameters') . ':<br />';\r
+    echo "<b>h=</b>your_download_reference<i> (" . t('Required') . ")</i> <br />";\r
+    echo "<b>d=</b>yout_delete_code<i> (" . t('Required') . ")</i> <br />";\r
+    echo '</p>';\r
+    echo '<p>' . t('This will return "Ok" if succeded, "Error" otherwhise.') . '<br /></p>';\r
+    echo '<p>';\r
+    echo t('Example') . ": <a href=\"" . $web_root . "script.php?h=30ngy0hsDcpfrF8zR7x9iU&amp;d=0d210a952\">" . $web_root . "script.php?h=30ngy0hsDcpfrF8zR7x9iU&amp;d=0d210a952</a> ";\r
+    echo '</p>';\r
+    \r
+    echo '<h3>' . t('Get a generated scripts') . ':</h3>';\r
+    echo '<p>';\r
+    echo t('Send a GET query to') . ': <i>' . $web_root . 'script.php</i><br />';\r
+    echo '<br />';\r
+    echo t('Parameters') . ':<br />';\r
+    echo "<b>lang=</b>[";\r
+    foreach ($script_langages as $lang => $name)\r
+        echo $lang;\r
+    echo "]<i> (" . t('Required') . ")</i> <br />";\r
+    echo '</p>';\r
+    echo '<p>' . t('This will return brut text content of the code.') . '<br /></p>';\r
+    echo '<p>';\r
+    echo t('Example') . ": <br />";\r
+    foreach ($script_langages as $lang => $name)\r
+        echo "$name: <a href=\"" . $web_root . "script.php?lang=$lang\">" . $web_root . "script.php?lang=$lang</a> ";\r
+    echo '</p>';\r
+\r
+    echo '</div><br />';\r
+    require (JIRAFEAU_ROOT . 'lib/template/footer.php');\r
+    exit;\r
+}\r
+\r
+/* Lets use interface now. */\r
+header('Content-Type: text; charset=utf-8');\r
+\r
+/* Upload file */\r
+if (isset ($_FILES['file']) && is_writable (VAR_FILES)\r
+    && is_writable (VAR_LINKS))\r
+{\r
+    $key = '';\r
+    if (isset ($_POST['key']))\r
+        $key = $_POST['key'];\r
+\r
+    $time = time ();\r
+    if (!isset ($_POST['time']))\r
+        $time = JIRAFEAU_INFINITY;\r
+    else\r
+        switch ($_POST['time'])\r
+        {\r
+            case 'minute':\r
+                $time += JIRAFEAU_MINUTE;\r
+                break;\r
+            case 'hour':\r
+                $time += JIRAFEAU_HOUR;\r
+                break;\r
+            case 'day':\r
+                $time += JIRAFEAU_DAY;\r
+                break;\r
+            case 'week':\r
+                $time += JIRAFEAU_WEEK;\r
+                break;\r
+            case 'month':\r
+                $time += JIRAFEAU_MONTH;\r
+                break;\r
+            default:\r
+                $time = JIRAFEAU_INFINITY;\r
+                break;\r
+        }\r
+    $res = jirafeau_upload ($_FILES['file'],\r
+                            isset ($_POST['one_time_download']),\r
+                            $key, $time, $_SERVER['REMOTE_ADDR']);\r
+    \r
+    if (empty($res) || $res['error']['has_error'])\r
+    {\r
+        echo "Error";\r
+        exit;\r
+    }\r
+    /* Print direct link. */\r
+    echo $res['link'];\r
+    echo NL;\r
+    /* Print delete link. */\r
+    echo $res['delete_link'];\r
+}\r
+elseif (isset ($_GET['h']))\r
+{\r
+    $link_name = $_GET['h'];\r
+    $key = '';\r
+    if (isset ($_POST['key']))\r
+        $key = $_POST['key'];\r
+    $d = '';\r
+    if (isset ($_GET['d']))\r
+        $d = $_GET['d'];\r
+    \r
+    if (!preg_match ('/[0-9a-zA-Z_-]{22}$/', $link_name))\r
+    {\r
+        echo "Error";\r
+        exit;\r
+    }\r
+    \r
+    $link = jirafeau_get_link ($link_name);\r
+    if (count ($link) == 0)\r
+    {\r
+        echo "Error";\r
+        exit;\r
+    }\r
+    if (strlen ($d) > 0 && $d == $link['link_code'])\r
+    {\r
+        jirafeau_delete_link ($link_name);\r
+        echo "Ok";\r
+        exit;\r
+    }\r
+    if ($link['time'] != JIRAFEAU_INFINITY && time () > $link['time'])\r
+    {\r
+        jirafeau_delete_link ($link_name);\r
+        echo "Error";\r
+        exit;\r
+    }\r
+    if (strlen ($link['key']) > 0 && md5 ($key) != $link['key'])\r
+    {\r
+        echo "Error";\r
+        exit;\r
+    }\r
+    $p = s2p ($link['md5']);\r
+    if (!file_exists (VAR_FILES . $p . $link['md5']))\r
+    {\r
+        echo "Error";\r
+        exit;\r
+    }\r
+\r
+    header ('Content-Length: ' . $link['file_size']);\r
+    header ('Content-Type: ' . $link['mime_type']);\r
+    header ('Content-Disposition: attachment; filename="' .\r
+            $link['file_name'] . '"');\r
+    readfile (VAR_FILES . $p . $link['md5']);\r
+\r
+    if ($link['onetime'] == 'O')\r
+        jirafeau_delete_link ($link_name);\r
+    exit;\r
+}\r
+elseif (isset ($_GET['get_capacity']))\r
+{\r
+    echo min (jirafeau_ini_to_bytes (ini_get ('post_max_size')),\r
+              jirafeau_ini_to_bytes (ini_get ('upload_max_filesize')));\r
+}\r
+elseif (isset ($_GET['lang']))\r
+{\r
+    $l=$_GET['lang'];\r
+    if ($l == "bash")\r
+    {\r
+?>\r
+#!/bin/bash\r
+\r
+# This script has been auto-generated by Jirafeau but you can still edit \r
+# options below.\r
+\r
+# Config\r
+proxy='' # ex: proxy='proxysever.test.com:3128' or set JIRAFEAU_PROXY global variable\r
+url='<?php echo $cfg['web_root'] . 'script.php'; ?>' # or set JIRAFEAU_URL ex: url='http://mysite/jirafeau/script.php'\r
+time='none' # minute, hour, day, week, month or none. Or set JIRAFEAU_TIME.\r
+one_time='' # ex: one_time="1" or set JIRAFEAU_ONE_TIME.\r
+curl='' # curl path to download or set JIRAFEAU_CURL_PATH.\r
+# End of config\r
+\r
+if [ -n "$JIRAFEAU_PROXY" ]; then\r
+    proxy="$JIRAFEAU_PROXY"\r
+fi\r
+\r
+if [ -n "$JIRAFEAU_URL" ]; then\r
+    url="$JIRAFEAU_URL"\r
+fi\r
+\r
+if [ -z "$url" ]; then\r
+    echo "Please set url in script parameters or export JIRAFEAU_URL"\r
+fi\r
+\r
+if [ -n "$JIRAFEAU_TIME" ]; then\r
+    time="$JIRAFEAU_TIME"\r
+fi\r
+\r
+if [ -n "$JIRAFEAU_ONE_TIME" ]; then\r
+    one_time='1'\r
+fi\r
+\r
+if [ -z "$curl" ]; then\r
+    curl="$JIRAFEAU_CURL_PATH"\r
+fi\r
+\r
+if [ -z "$curl" ] && [ -e "/usr/bin/curl" ]; then\r
+    curl="/usr/bin/curl"\r
+fi\r
+\r
+if [ -z "$curl" ] && [ -e "/bin/curl.exe" ]; then\r
+    curl="/bin/curl.exe"\r
+fi\r
+\r
+if [ -z "$curl" ]; then\r
+    echo "Please set your curl binary path (by editing this script or export JIRAFEAU_CURL_PATH global variable)."\r
+    exit\r
+fi\r
+\r
+if [ -z "$2" ]; then\r
+    echo "man:"\r
+    echo "    $0 send PATH [PASSWORD]"\r
+    echo "    $0 get URL [PASSWORD]"\r
+    echo "    $0 delete URL"\r
+    echo ""\r
+    echo "Global variables to export:"\r
+    echo "    JIRAFEAU_PROXY : example: proxysever.test.com:3128"\r
+    echo "    JIRAFEAU_URL : example: http://mysite/jirafeau/script.php"\r
+    echo "    JIRAFEAU_TIME : minute, hour, day, week, month or none"\r
+    echo "    JIRAFEAU_ONE_TIME : set anything or set empty"\r
+    echo "    JIRAFEAU_CURL : path to your curl binary"\r
+\r
+    exit 0\r
+fi\r
+\r
+if [ -n "$proxy" ]; then\r
+    proxy="-x $proxy"\r
+fi\r
+\r
+options=''\r
+if [ -n "$one_time" ]; then\r
+    options="$options -F one_time_download=1"\r
+fi\r
+\r
+password=''\r
+if [ -n "$3" ]; then\r
+    password="$3"\r
+    options="$options -F key=$password"\r
+fi\r
+\r
+if [ "$1" == "send" ]; then\r
+    if [ ! -f "$2" ]; then\r
+        echo "File \"$2\" does not exists."\r
+        exit\r
+    fi\r
+\r
+    # Ret result\r
+    res=$($curl -X POST --http1.0 $proxy $options \\r
+                  -F "time=$time" \\r
+                  -F "file=@$2" \\r
+                  $url)\r
+\r
+    if [[ "$res" == "Error" ]]; then\r
+        echo "Error while uploading."\r
+        exit\r
+    fi\r
+\r
+    # Not using head or tail to minimise command dependencies\r
+    code=$(cnt=0; echo "$res" | while read l; do\r
+        if [[ "$cnt" == "0" ]]; then\r
+            echo "$l"\r
+        fi\r
+        cnt=$(( cnt + 1 ))\r
+        done)\r
+    del_code=$(cnt=0; echo "$res" | while read l; do\r
+        if [[ "$cnt" == "1" ]]; then\r
+            echo "$l"\r
+        fi\r
+        cnt=$(( cnt + 1 ))\r
+        done)\r
+    echo "${url}?h=$code"\r
+    echo "${url}?h=$code&d=$del_code"\r
+elif [ "$1" == "get" ]; then\r
+    if [ -z "$password" ]; then\r
+        $curl $proxy -OJ "$2"\r
+    else\r
+        $curl $proxy -OJ -X POST -F key=$password "$2"\r
+    fi\r
+elif [ "$1" == "delete" ]; then\r
+    $curl $proxy "$2"\r
+fi\r
+<?php\r
+    }\r
+    else\r
+    {\r
+        echo "Error";\r
+        exit;\r
+    }\r
+}\r
+else\r
+    echo "Error";\r
+exit;\r
+?>
\ No newline at end of file

patrick-canterino.de