Initial commit

Functional, without SSO
This commit is contained in:
Jimmy Monin
2016-09-18 11:03:26 +02:00
commit 57708e3169
253 changed files with 30787 additions and 0 deletions

View File

@ -0,0 +1,11 @@
<?php
if (is_file($config->getFilename()) && !isset($_GET["success"])) {
header("LOCATION: ?mod=install&a=upgrade");
exit;
}
if ($action == "upgrade" && $auth->getUsername() != "admin") {
header("HTTP/1.1 403 Forbidden");
exit;
}

View File

@ -0,0 +1,83 @@
<?php
$errors = array();
$formErrors = array();
$messages = array();
if (!is_writable(DOCUMENT_ROOT."/var")) {
$errors[] = "Il est nécessaire de pouvoir écrire dans le dossier 'var' (".DOCUMENT_ROOT."/var".").";
}
if (!$errors && $_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["password"])) {
$formErrors["password"] = "Ce champ est obligatoire";
} elseif (empty($_POST["confirmPassword"]) || $_POST["confirmPassword"] != $_POST["password"]) {
$formErrors["confirmPassword"] = "Les mots de passe ne sont pas identiques.";
}
if (!empty($_POST["db"]["user"]) || !empty($_POST["db"]["dbname"])) {
if (empty($_POST["db"]["host"])) {
$formErrors["db"]["host"] = "Nom d'hôte invalide.";
}
if (empty($_POST["db"]["user"])) {
$formErrors["db"]["user"] = "Spécifiez un nom d'utilisateur.";
}
if (empty($_POST["db"]["dbname"])) {
$formErrors["db"]["dbname"] = "Spécifiez une base de données.";
}
if (!empty($_POST["db"]["user"]) && !empty($_POST["db"]["dbname"])) {
// test de connexion
$dbConnection = new mysqli(
$_POST["db"]["host"], $_POST["db"]["user"],
$_POST["db"]["password"], $_POST["db"]["dbname"]);
if ($dbConnection->connect_error) {
$formErrors["db"]["host"] = "Connexion impossible à la base de données.";
}
}
}
if (!$formErrors) {
if (!is_dir(DOCUMENT_ROOT."/var/configs")) {
mkdir(DOCUMENT_ROOT."/var/configs");
}
if (!is_dir(DOCUMENT_ROOT."/var/feeds")) {
mkdir(DOCUMENT_ROOT."/var/feeds");
}
if (!is_dir(DOCUMENT_ROOT."/var/log")) {
mkdir(DOCUMENT_ROOT."/var/log");
}
$config->set("general", "version", APPLICATION_VERSION);
if (isset($dbConnection)) {
$config->set("storage", "type", "db");
$config->set("storage", "options", array(
"host" => $_POST["db"]["host"],
"user" => $_POST["db"]["user"],
"password" => $_POST["db"]["password"],
"dbname" => $_POST["db"]["dbname"],
));
} else {
$config->set("storage", "type", "files");
}
$config->save();
$storageType = $config->get("storage", "type", "files");
if ($storageType == "db") {
// installation de la base
require DOCUMENT_ROOT."/others/install/schema.php";
$userStorage = new \App\Storage\Db\User($dbConnection);
} else {
$userStorage = new \App\Storage\File\User(DOCUMENT_ROOT."/var/users.db");
}
// table utilisateurs
$user = new \App\User\User(array(
"username" => "admin",
"password" => sha1($_POST["password"])
));
$userStorage->save($user);
header("LOCATION: ?mod=install&success=true");
exit;
}
}

View File

@ -0,0 +1,17 @@
<?php
if (!is_file($config->getFilename())) {
header("LOCATION: ?mod=install");
exit;
}
if ($auth->getUsername() != "admin") {
header("HTTP/1.1 403 Forbidden");
exit;
}
$require_upgrade = false;
if (-1 == version_compare($config->get("general", "version"), APPLICATION_VERSION)) {
$require_upgrade = true;
}

View File

@ -0,0 +1,116 @@
<?php if (!empty($errors)) : ?>
<ul class="error"><li><?php echo implode("</li><li>", $errors); ?></li></ul>
<?php else: ?>
<form action="" method="post">
<fieldset>
<legend>Nouvelle installation</legend>
<?php if (!isset($_GET["success"]) || $_GET["success"] != "true") : ?>
<dl>
<dt>Mot de passe admin :</dt>
<dd>
<input type="password" name="password" />
<?php if (!empty($formErrors["password"])) : ?>
<p class="error"><?php echo $formErrors["password"]; ?></p>
<?php endif; ?>
</dd>
<dt>Confirmer le mot de passe :</dt>
<dd>
<input type="password" name="confirmPassword" />
<?php if (!empty($formErrors["confirmPassword"])) : ?>
<p class="error"><?php echo $formErrors["confirmPassword"]; ?></p>
<?php endif; ?>
</dd>
</dl>
<h2>Stockage des données</h2>
<p>
Par défaut, les données (utilisateurs, alertes, etc.)
sont stockées dans des fichiers. C'est l'installation la plus simple
et rapide ne nécessitant que peu de connaissance.</p>
<p>
Toutefois, si vous le souhaitez vous pouvez enregistrer les données
dans une base de données MySQL (plus adapté et plus fiable).
</p>
<dl>
<dt>Type de stockage :</dt>
<dd>
<label for="typefiles">
<input type="radio" id="typefiles" name="type" value="files"<?php
echo isset($_POST["type"]) && "files" == $_POST["type"] ? ' checked="checked"' : ""
?> />
fichiers
</label>
<label for="typedb" style="margin-left: 40px;">
<input type="radio" id="typedb" name="type" value="db"<?php
echo isset($_POST["type"]) && "db" == $_POST["type"] ? ' checked="checked"' : ""
?> />
base de données MySQL
</label>
<?php if (!empty($errors["type"])) : ?>
<p class="error"><?php echo $errors["type"]; ?></p>
<?php endif; ?>
</dd>
<dt class="storage-db-options">Hôte :</dt>
<dd class="storage-db-options">
<input type="text" name="db[host]" value="<?php
echo isset($_POST["db"]["host"]) ? htmlspecialchars($_POST["db"]["host"]) : "localhost"
?>" />
<?php if (!empty($formErrors["db"]["host"])) : ?>
<p class="error"><?php echo $formErrors["db"]["host"]; ?></p>
<?php endif; ?>
</dd>
<dt class="storage-db-options">Utilisateur :</dt>
<dd class="storage-db-options">
<input type="text" name="db[user]" value="<?php
echo isset($_POST["db"]["user"]) ? htmlspecialchars($_POST["db"]["user"]) : ""
?>" />
<?php if (!empty($formErrors["db"]["user"])) : ?>
<p class="error"><?php echo $formErrors["db"]["user"]; ?></p>
<?php endif; ?>
</dd>
<dt class="storage-db-options">Mot de passe :</dt>
<dd class="storage-db-options">
<input type="password" name="db[password]" value="<?php
echo isset($_POST["db"]["password"]) ? htmlspecialchars($_POST["db"]["password"]) : ""
?>" />
<?php if (!empty($formErrors["db"]["password"])) : ?>
<p class="error"><?php echo $formErrors["db"]["password"]; ?></p>
<?php endif; ?>
</dd>
<dt class="storage-db-options">Nom de la base de données :</dt>
<dd class="storage-db-options">
<input type="text" name="db[dbname]" value="<?php
echo isset($_POST["db"]["dbname"]) ? htmlspecialchars($_POST["db"]["dbname"]) : ""
?>" />
<?php if (!empty($formErrors["db"]["dbname"])) : ?>
<p class="error"><?php echo $formErrors["db"]["dbname"]; ?></p>
<?php endif; ?>
</dd>
<dt>Cliquez sur le bouton suivant pour lancer l'installation.</dt>
<dd><input type="submit" value="Installer" /></dd>
</dl>
<?php else: ?>
<p style="color: #001FA6;"><strong>Installation terminée.</strong></p>
<p>Vous pouvez vous connecter avec les identifiants suivants :<br />
<strong>Utilisateur:</strong> admin<br />
<strong>Mot de passe:</strong> spécifié lors de l'installation.</p>
<p><a href="./">continuer &gt;</a></p>
<?php endif; ?>
</fieldset>
</form>
<script type="text/javascript">
if (document.querySelectorAll) {
var elements = document.querySelectorAll(".storage-db-options");
var buttons = document.querySelectorAll("input[name=type]");
var fnCheck = function () {
var display = document.querySelector("input[value=db]").checked ? "block" : "none";
for (var i = 0; i < elements.length; i++) {
elements[i].style.display = display;
}
};
for (var j = 0; j < buttons.length; j++) {
buttons[j].addEventListener("change", fnCheck);
}
fnCheck();
}
</script>
<?php endif; ?>

View File

@ -0,0 +1,5 @@
<?php if ($require_upgrade) : ?>
<p>Mise à jour de l'application</p>
<?php else: ?>
<p>Application à jour</p>
<?php endif; ?>