Commit 243ae67a authored by Stephan Kreutzer's avatar Stephan Kreutzer

Initial commit. Based on...

Initial commit. Based on https://gitlab.com/publishing-systems/experimental/tree/master/one-time-downloader/.
parents
Stephan Kreutzer, Bahnhofstraße 71, 74321 Bietigheim-Bissingen, GERMANY (https://skreutzer.de, <skreutzer@fsfe.org>): Developer.
Christian Huke, Steinhalderstraße 12, 66999 Hinterweidenthal, GERMANY (<huke.97@ok.de>): Contributed installation page mechanism.
William Durand, GERMANY (https://williamdurand.fr, <will@drnd.me>): $/web/libraries/Negotiation/.
Terrill Dent (https://terrill.ca, <terrilldent@gmail.com>): $/web/tsorter.js
Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA (https://www.fsf.org, <licensing@fsf.org>): Text of the GNU Affero General Public License 3.
This diff is collapsed.
<?php
/* Copyright (C) 2014-2019 Stephan Kreutzer
*
* This file is part of resource-manager-1.
*
* resource-manager-1 is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License version 3 or any later version,
* as published by the Free Software Foundation.
*
* resource-manager-1 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 3 for more details.
*
* You should have received a copy of the GNU Affero General Public License 3
* along with resource-manager-1. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* @file $/web/file.php
* @brief Endpoint for downloading.
* @author Stephan Kreutzer
* @since 2019-06-22
*/
require_once("./libraries/https.inc.php");
if (isset($_GET['id']) !== true)
{
header("HTTP/1.0 400 Bad Request");
exit(0);
}
require_once("./libraries/file_management.inc.php");
$file = GetFileByHandle($_GET['id']);
if (is_array($file) !== true)
{
header("HTTP/1.0 404 Not Found");
exit(0);
}
$type = (int)$file['type'];
if ($type === FILESETTING_DOWNLOADTYPE_ONCE &&
$file['datetime_downloaded'] != null)
{
header("HTTP/1.0 404 Not Found");
exit(0);
}
if ($type === FILESETTING_DOWNLOADTYPE_ONCE)
{
// Do this first regardless if the download succeeds, so under no
// condition can a file be requested more than once.
if (SetFileDownloaded((int)$file['id']) !== 0)
{
header("HTTP/1.0 500 Internal Server Error");
exit(0);
}
}
$path = "./files/".$file['file'];
if (file_exists($path) !== true)
{
// Don't tell the client that the handle is valid,
// but just the actual file couldn't be found.
header("HTTP/1.0 404 Not Found");
exit(0);
}
//header("Content-type:application/zip");
/** @todo What about special characters in file names that need to be escaped here? */
header("Content-Disposition:attachment;filename=".$file['name']);
readfile($path);
if ($type === FILESETTING_DOWNLOADTYPE_ONCE)
{
require_once("./libraries/user_management.inc.php");
$user = GetUserById((int)$file['id_user']);
if (is_array($user) === true)
{
@mail($user['e_mail'],
"[Resource Manager] Download",
"Name: ".@htmlspecialchars($file['name'], ENT_COMPAT | ENT_XHTML, "UTF-8")."\n".
"Handle: ".@htmlspecialchars($_GET['id'], ENT_COMPAT | ENT_XHTML, "UTF-8")."\n".
"Creation: ".$file['datetime_created']."Z\n".
"Retrieval: ".gmdate("Y-m-d\TH:i:s")."Z\n",
"From: ".$user['e_mail']."\n".
"MIME-Version: 1.0\n".
"Content-type: text/plain; charset=UTF-8\n");
}
}
exit(0);
?>
<?php
/* Copyright (C) 2012-2019 Stephan Kreutzer
*
* This file is part of resource-manager-1.
*
* resource-manager-1 is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License version 3 or any later version,
* as published by the Free Software Foundation.
*
* resource-manager-1 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 3 for more details.
*
* You should have received a copy of the GNU Affero General Public License 3
* along with resource-manager-1. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* @file $/web/files.php
* @brief List of managed files.
* @author Stephan Kreutzer
* @since 2019-06-22
*/
require_once("./libraries/https.inc.php");
require_once("./libraries/session.inc.php");
require_once("./libraries/languagelib.inc.php");
require_once(getLanguageFile("files"));
require_once("./libraries/file_management.inc.php");
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n".
"<!DOCTYPE html\n".
" PUBLIC \"-//W3C//DTD XHTML 1.1//EN\"\n".
" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">\n".
"<html version=\"-//W3C//DTD XHTML 1.1//EN\" xmlns=\"http://www.w3.org/1999/xhtml\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:tsorter=\"http://www.terrill.ca/sorting\" xsi:schemaLocation=\"http://w3.org/MarkUp/SCHEMA/xhtml11.xsd\" xml:lang=\"".getCurrentLanguage()."\" lang=\"".getCurrentLanguage()."\">\n".
" <head>\n".
" <meta http-equiv=\"content-type\" content=\"application/xhtml+xml; charset=UTF-8\"/>\n".
" <title>".LANG_PAGETITLE."</title>\n".
" <link rel=\"stylesheet\" type=\"text/css\" href=\"mainstyle.css\"/>\n".
" <script type=\"text/javascript\" src=\"tsorter.js\"></script>\n".
" <script type=\"text/javascript\">\n".
" window.onload = function() {\n".
" tsorter.create('resources_table', 3);\n".
" };\n".
" </script>\n".
" </head>\n".
" <body>\n".
" <div class=\"mainbox\">\n".
" <div class=\"mainbox_header\">\n".
" <h1 class=\"mainbox_header_h1\">".LANG_HEADER."</h1>\n".
" </div>\n".
" <div class=\"mainbox_body\">\n".
" <table id=\"resources_table\">\n".
" <thead>\n".
" <tr>\n".
" <th tsorter:data-tsorter=\"default\">".LANG_TABLECOLUMNCAPTION_FILENAME."</th>\n".
" <th tsorter:data-tsorter=\"link\">".LANG_TABLECOLUMNCAPTION_URL."</th>\n".
" <th tsorter:data-tsorter=\"default\">".LANG_TABLECOLUMNCAPTION_DOWNLOADTYPE."</th>\n".
" <th tsorter:data-tsorter=\"date\">".LANG_TABLECOLUMNCAPTION_CREATED."</th>\n".
" <th tsorter:data-tsorter=\"date\">".LANG_TABLECOLUMNCAPTION_DOWNLOADED."</th>\n".
" </tr>\n".
" </thead>\n".
" <tbody>\n";
$files = GetFilesByUserId($_SESSION['user_id']);
if (is_array($files) === true)
{
foreach ($files as $file)
{
echo " <tr>\n".
" <td>".htmlspecialchars($file['name'], ENT_COMPAT | ENT_XHTML, "UTF-8")."</td>\n".
" <td>".(HTTPS_ENABLED === true ? "https" : "http")."://".dirname($_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']).DIRECTORY_SEPARATOR."file.php?id=".$file['handle']."</td>\n";
switch ((int)$file['type'])
{
case FILESETTING_DOWNLOADTYPE_ONCE:
echo " <td>".LANG_TEXT_DOWNLOADTYPEONCE."</td>\n";
break;
case FILESETTING_DOWNLOADTYPE_ALWAYS:
echo " <td>".LANG_TEXT_DOWNLOADTYPEALWAYS."</td>\n";
break;
default:
echo " <td>?</td>\n";
break;
}
echo " <td>".$file['datetime_created']."</td>\n".
" <td>".$file['datetime_downloaded']."</td>\n".
" </tr>\n";
}
}
echo " </tbody>\n".
" </table>\n".
" <a href=\"upload.php\">".LANG_LINKCAPTION_UPLOAD."</a>\n".
" </div>\n".
" </div>\n".
" </body>\n".
"</html>\n";
?>
<FilesMatch "(.*)" >
Deny from all
</FilesMatch>
\ No newline at end of file
<?php
/* Copyright (C) 2012-2019 Stephan Kreutzer
*
* This file is part of resource-manager-1.
*
* resource-manager-1 is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License version 3 or any later version,
* as published by the Free Software Foundation.
*
* resource-manager-1 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 3 for more details.
*
* You should have received a copy of the GNU Affero General Public License 3
* along with resource-manager-1. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* @file $/web/index.php
* @brief Start page.
* @author Stephan Kreutzer
* @since 2012-06-01
*/
require_once("./libraries/https.inc.php");
if (empty($_SESSION) === true)
{
@session_start();
}
if (isset($_POST['logout']) === true &&
isset($_SESSION['user_id']) === true)
{
$language = null;
if (isset($_SESSION['language']) === true)
{
$language = $_SESSION['language'];
}
$_SESSION = array();
if ($language != null)
{
$_SESSION['language'] = $language;
}
else
{
if (isset($_COOKIE[session_name()]) == true)
{
setcookie(session_name(), '', time()-42000, '/');
}
}
}
require_once("./libraries/languagelib.inc.php");
require_once(getLanguageFile("index"));
require_once("./language_selector.inc.php");
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n".
"<!DOCTYPE html\n".
" PUBLIC \"-//W3C//DTD XHTML 1.1//EN\"\n".
" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">\n".
"<html version=\"-//W3C//DTD XHTML 1.1//EN\" xmlns=\"http://www.w3.org/1999/xhtml\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://w3.org/MarkUp/SCHEMA/xhtml11.xsd\" xml:lang=\"".getCurrentLanguage()."\" lang=\"".getCurrentLanguage()."\">\n".
" <head>\n".
" <meta http-equiv=\"content-type\" content=\"application/xhtml+xml; charset=UTF-8\"/>\n".
" <title>".LANG_PAGETITLE."</title>\n".
" <link rel=\"stylesheet\" type=\"text/css\" href=\"mainstyle.css\"/>\n".
" </head>\n".
" <body>\n";
if (isset($_POST['name']) !== true ||
isset($_POST['password']) !== true)
{
require_once("./language_selector.inc.php");
echo getHTMLLanguageSelector("index.php");
echo " <div class=\"mainbox\">\n".
" <div class=\"mainbox_header\">\n".
" <h1 class=\"mainbox_header_h1\">".LANG_HEADER."</h1>\n".
" </div>\n".
" <div class=\"mainbox_body\">\n";
if (isset($_POST['install_done']) == true)
{
if (@unlink(dirname(__FILE__)."/install/install.php") === true)
{
clearstatcache();
}
else
{
echo " <p class=\"error\">\n".
" ".LANG_INSTALLDELETEFAILED."\n".
" </p>\n";
}
}
if (file_exists("./install/install.php") === true &&
isset($_GET['skipinstall']) != true)
{
echo " <form action=\"install/install.php\" method=\"post\" class=\"installbutton_form\">\n".
" <fieldset>\n".
" <input type=\"submit\" value=\"".LANG_INSTALLBUTTON."\"/><br/>\n".
" </fieldset>\n".
" </form>\n";
require_once("./license.inc.php");
echo getHTMLLicenseNotification("license");
}
else
{
require_once("./libraries/user_management.inc.php");
if (isset($_SESSION['user_id']) === true &&
isset($_SESSION['instance_path']) === true)
{
$lhs = str_replace("\\", "/", dirname(__FILE__));
if ($lhs === $_SESSION['instance_path'])
{
echo " <a href=\"files.php\">".LANG_LINKCAPTION_FILES."</a><br/>\n";
}
echo " <form action=\"index.php\" method=\"post\">\n".
" <fieldset>\n".
" <input type=\"submit\" name=\"logout\" value=\"".LANG_BUTTON_LOGOUT."\"/><br/>\n".
" </fieldset>\n".
" </form>\n";
}
else
{
echo " <p>\n".
" ".LANG_WELCOMETEXT."\n".
" </p>\n".
" <p>\n".
" ".LANG_LOGINDESCRIPTION."\n".
" </p>\n".
" <form action=\"index.php\" method=\"post\">\n".
" <fieldset>\n".
" <input name=\"name\" type=\"text\" size=\"20\" maxlength=\"60\"/> ".LANG_NAMEFIELD_CAPTION."<br />\n".
" <input name=\"password\" type=\"password\" size=\"20\" maxlength=\"60\"/> ".LANG_PASSWORDFIELD_CAPTION."<br />\n".
" <input type=\"submit\" value=\"".LANG_SUBMITBUTTON."\"/><br/>\n".
" </fieldset>\n".
" </form>\n";
require_once("./license.inc.php");
echo getHTMLLicenseNotification("license");
}
}
echo " </div>\n".
" </div>\n".
" <div class=\"footerbox\">\n".
" <a href=\"license.php\" class=\"footerbox_link\">".LANG_LICENSE."</a>\n".
" </div>\n".
" </body>\n".
"</html>\n".
"\n";
}
else
{
require_once("./libraries/user_management.inc.php");
$user = NULL;
$result = getUserByName($_POST['name']);
if (is_array($result) !== true)
{
echo " <div class=\"mainbox\">\n".
" <div class=\"mainbox_body\">\n".
" <p class=\"error\">\n".
" ".LANG_DBCONNECTFAILED."\n".
" </p>\n".
" </div>\n".
" </div>\n".
" <div class=\"footerbox\">\n".
" <a href=\"license.php\" class=\"footerbox_link\">".LANG_LICENSE."</a>\n".
" </div>\n".
" </body>\n".
"</html>\n";
exit(-1);
}
if (count($result) === 0)
{
echo " <div class=\"mainbox\">\n".
" <div class=\"mainbox_body\">\n".
" <p class=\"error\">\n".
" ".LANG_LOGINFAILED."\n".
" </p>\n".
" <a href=\"index.php\">".LANG_LINKCAPTION_RETRYLOGIN."</a>\n".
" </div>\n".
" </div>\n".
" <div class=\"footerbox\">\n".
" <a href=\"license.php\" class=\"footerbox_link\">".LANG_LICENSE."</a>\n".
" </div>\n".
" </body>\n".
"</html>\n";
exit(0);
}
else
{
// The user does exist, he wants to login.
if ($result[0]['password'] === hash('sha512', $result[0]['salt'].$_POST['password']))
{
$user = array("id" => (int)$result[0]['id']);
}
else
{
echo " <div class=\"mainbox\">\n".
" <div class=\"mainbox_body\">\n".
" <p class=\"error\">\n".
" ".LANG_LOGINFAILED."\n".
" </p>\n".
" <a href=\"index.php\">".LANG_LINKCAPTION_RETRYLOGIN."</a>\n".
" </div>\n".
" </div>\n".
" <div class=\"footerbox\">\n".
" <a href=\"license.php\" class=\"footerbox_link\">".LANG_LICENSE."</a>\n".
" </div>\n".
" </body>\n".
"</html>\n";
exit(0);
}
}
if (is_array($user) === true)
{
$language = null;
if (isset($_SESSION['language']) === true)
{
$language = $_SESSION['language'];
}
$_SESSION = array();
if ($language != null)
{
$_SESSION['language'] = $language;
}
$_SESSION['instance_path'] = str_replace("\\", "/", dirname(__FILE__));
$_SESSION['user_id'] = $user['id'];
$_SESSION['user_name'] = $_POST['name'];
echo " <div class=\"mainbox\">\n".
" <div class=\"mainbox_body\">\n".
" <p class=\"success\">\n".
" ".LANG_LOGINSUCCESS."\n".
" </p>\n".
" <a href=\"index.php\">".LANG_LINKCAPTION_CONTINUE."</a>\n".
" </div>\n".
" </div>\n".
" <div class=\"footerbox\">\n".
" <a href=\"license.php\" class=\"footerbox_link\">".LANG_LICENSE."</a>\n".
" </div>\n";
}
echo " </body>\n".
"</html>\n";
}
?>
/* Copyright (C) 2013-2019 Stephan Kreutzer
*
* This file is part of resource-manager-1.
*
* resource-manager-1 is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License version 3 or any later version,
* as published by the Free Software Foundation.
*
* resource-manager-1 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 3 for more details.
*
* You should have received a copy of the GNU Affero General Public License 3
* along with resource-manager-1. If not, see <http://www.gnu.org/licenses/>.
*/
.mainbox_proceed
{
margin: 20px;
}
.languageselector
{
/* Centering. */
width: 70%;
margin: 0 auto;
}
This diff is collapsed.
<?php
/* Copyright (C) 2013-2019 Stephan Kreutzer
*
* This file is part of resource-manager-1.
*
* resource-manager-1 is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License version 3 or any later version,
* as published by the Free Software Foundation.
*
* resource-manager-1 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 3 for more details.
*
* You should have received a copy of the GNU Affero General Public License 3
* along with resource-manager-1. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* @file $/web/install/lang/de/install.lang.php
* @author Stephan Kreutzer
* @since 2013-09-14
*/
define("LANG_PAGETITLE", "Installation");
// -- Step 0 -------------------------------------------------------------------
define("LANG_STEP0_HEADER", "Installation");
define("LANG_STEP0_INTROTEXT", "<p>Sie sind dabei, die resource-manager-1-Software zur Verwaltung von serverseitigen Online-Ressourcen zu installieren.
Infolge der Veröffentlichung der Software unter der GNU Affero General Public License 3 samt jeder späteren Version dieser Lizenz handelt es sich bei resource-manager-1 um <a href=\"http://de.wikipedia.org/wiki/Freie_Software\">freie Software</a> gemäß der <a href=\"http://www.gnu.org/philosophy/free-sw.de.html\">Definition</a> der <a href=\"http://www.fsf.org/\">Free Software Foundation</a> (übersetzt: „Freie-Software-Stiftung“, siehe auch die europäische <a href=\"http://www.fsfe.org\">Free Software Foundation Europe</a>). Im nächsten Schritt des Installationsvorgangs wird der vollständige Lizenztext angezeigt, welchem Sie zustimmen, sobald Sie die Software verwenden. Ein kurzer Überblick über die eingeräumten Nutzungsrechte:</p>".
"<ul>".
" <li>Es ist Ihnen gestattet, die Software zu jedem beliebigen Zweck auszuführen. Wenn die Software so ausgeführt wird, dass Teilnehmer eines Netzwerkes ihre Nutzung veranlassen können (z.B. in Form eines Dienstes), sind Sie verpflichtet, eine Möglichkeit zu schaffen, über welche Teilnehmer dieses Netzwerkes die Software, welche Sie ausführen, erhalten können (Sie müssen dabei die Bedingungen für die Weitergabe erfüllen).</li>".
" <li>Es ist Ihnen gestattet, die Software weiterzugeben, wenn Sie die Software unter GNU AGPL 3 oder einer späteren Version dieser Lizenz weitergeben.</li>".
" <li>Es ist Ihnen gestattet, die Software zu verändern. Sie sind verpflichtet, Ihre Veränderungen unter die GNU AGPL 3 oder einer späteren Version dieser Lizenz zu lizenzieren. Es ist Ihnen gestattet, die veränderte Software auszuführen und weiterzugeben (Sie müssen dabei die Bedingungen für das Ausführen und die Weitergabe erfüllen).</li>".
"</ul>".
"<p>Jedoch:</p>".
"<ul>".
" <li>Werte in der Datenbank müssen nicht mit dem Quellcode weitergegeben werden, solange sie durch Benutzer-Interaktion generiert wurden und nicht für die interne Funktionsweise der Software verantwortlich sind.</li>".
" <li>Es dürfen eigene Werke von der Software verlinken lassen, ohne diese Werke unter die GNU AGPL 3 oder einer späteren Version dieser Lizenz veröffentlichen zu müssen, solange diese Werke nicht in die Software integriert sind oder für die Ausführung einer Funktion der Software benötigt werden.</li>".
" <li>Wenn Sie Werte und Einstellungen in der Software ändern, die ausschließlich für die visuelle Darstellung verwendet werden (also nicht Teil eines Algorithmusses sind, und wenn Sie die Art und Weise, wie die Software auf diese Werte zugreift, nicht verändern), dann haben Sie lediglich die Konfiguration angepasst und keine eigentliche Veränderung vorgenommen. In diesem speziellen Fall sind Sie nicht dazu verpflichtet, die Anpassungen unter der GNU AGPL 3 oder einer späteren Version der Lizenz zu veröffentlichen, was es Ihnen gestattet, eigene individuelle Erscheinungsformen der Software zu gestalten.</li>".
" <li>Freie Software erlaubt beides, kommerzielle Nutzung und unentgeltliche Nutzung. Bei freier Software geht es in erster Linie um Freiheit und digitale Grundrechte, nicht um den Preis (Freiheit im Sinne von „Redefreiheit“ und nicht im Sinne von „Freibier“ – unentgeltliche Nutzung ist ein möglicher Seiteneffekt).</li>".
"</ul>".
"<p>Weitere Anmerkungen und Ratschläge:</p>".
"<ul>".
" <li>Wenn Sie die Software verändern, sind Sie dazu verpflichtet, Ihre Anpassungen deutlich zu kennzeichnen.</li>".
" <li>Wenn Sie die Software verändern, wäre es nett von Ihnen, das <a href=\"https://gitlab.com/publishing-systems/resource-manager-1/\">primäre Repository</a> des Projekts und die Autoren der Software (siehe die AUTHORS-Datei) über Ihre Aktivitäten zu informieren. Sie sind allerdings nicht dazu verpflichtet.</li>".
" <li>Diese Software wurde initial entwickelt, um Zusammenarbeit zu fördern. Sie sollten ebenfalls über eine ähnliche Ausrichtung Ihrer Aktivitäten nachdenken, anstatt Protektionismus zu betreiben. Die Lizenz für diese Software wurde gewählt, um uns daran zu hindern, Ihnen Schaden zuzufügen, und um Sie daran zu hindern, Anderen Schaden zuzufügen (insbesondere Ihren Benutzern und Lizenznehmern). Die Lizenz verhindert effektiv, dass Sie Anderen digitale Rechte vorenthalten, welche allen Computer-Benutzern naturgemäß zustehen, sowohl auf der technischen als auch auf der rechtlichen Ebene. Sie sollten nicht einmal versuchen, die Lizenzbestimmungen umgehen zu wollen, zumal selbige ohnehin für Sie die größtmöglichen Vorteile bewirken. Benutzen Sie diese Software nicht, wenn Ihnen die Lizenzbestimmungen nicht zusagen.</li>".
" <li>Wenn Sie einen Lizenzverstoß entdecken (oder einen Fall, bei dem es sich um einen Lizenzverstoß handeln könnte), kontaktieren Sie bitte die Autoren der Software. Freiheit kann nur geschüt