Start work on a simpler first-run wizard, but it's not finished yet.

Hopefully this one will be more successful than the last attempt :P
This commit is contained in:
Starbeamrainbowlabs 2019-05-11 00:35:17 +01:00
parent 50efd4bb49
commit 1d6409128d
Signed by: sbrl
GPG Key ID: 1BE5172E637709C2
2 changed files with 117 additions and 8 deletions

View File

@ -29,8 +29,7 @@ if(file_exists("$settingsFilename.compromised")) {
$guiConfig = json_decode($guiConfig);
$settings = new stdClass();
if(!file_exists($settingsFilename))
{
if(!file_exists($settingsFilename)) {
// Copy the default settings over to the main settings array
foreach ($guiConfig as $key => $value)
$settings->$key = $value->default;
@ -41,18 +40,15 @@ if(!file_exists($settingsFilename))
else
$settings = json_decode(file_get_contents("peppermint.json"));
if($settings === null)
{
if($settings === null) {
header("content-type: text/plain");
exit("Error: Failed to decode the settings file! Does it contain a syntax error?");
}
// Fill in any missing properties
$settingsUpgraded = false;
foreach($guiConfig as $key => $propertyData)
{
if(!isset($settings->$key))
{
foreach($guiConfig as $key => $propertyData) {
if(!isset($settings->$key)) {
$settings->$key = $propertyData->default;
$settingsUpgraded = true;
}

View File

@ -0,0 +1,113 @@
<?php
register_module([
"name" => "First run wizard",
"version" => "0.1",
"author" => "Starbeamrainbowlabs",
"description" => "Displays a special page to aid in setting up a new wiki for the first time.",
"id" => "feature-firstrun",
"code" => function() {
return true; // Stop this module from actually being executed - it's not ready yet!
// TODO: Figure out how to detect pre-existing wikis here
// Perhaps this could be a setting instead? We'd need to update the settings logic a bit
$firstrun_complete = file_exists("._peppermint_installed");
/**
* @api {get} ?action=firstrun Display the firstrun page
* @apiName FirstRun
* @apiGroup Settings
* @apiPermission Anonymous
*
*/
/*
* ███████ ██ ██████ ███████ ████████ ██████ ██ ██ ███ ██
* ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ████ ██
* █████ ██ ██████ ███████ ██ ██████ ██ ██ ██ ██ ██
* ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
* ██ ██ ██ ██ ███████ ██ ██ ██ ██████ ██ ████
*/
add_action("firstrun", function() use($firstrun_complete) {
global $settings;
if($firstrun_complete) {
http_response_code(400);
exit(page_renderer::render_main("Setup complete - Error - $settings->sitename", "<p>Oops! Looks like $settings->sitename is already setup and ready to go! Go to the <a href='?action=$settings->defaultaction&page=".rawurlencode($settings->defaultpage)."'>" . htmlentities($settings->defaultpage)."</a> to get started!</p>"));
}
// TODO: Check the environment here first
// - Make sure peppermint.json isn't accessible
// - Check for required modules?
// TODO: Add a button to skip the firstrun wizard & do your own manual setup
$result = "<h1>Welcome!</h1>
<p>Welcome to Pepperminty Wiki.</p>
<p>Fill out the below form to get your wiki up and running!</p>
<form method='post' action='?action=firstrun-complete'>
<fieldset>
<legend>Admin account details</legend>
<label for='username'>Username:</label>
<input type='text' id='username' name='username' placeholder='e.g. bob, admin' required />
<br />
<p><em>Longer is better! Aim for at least 14 characters.</em></p>
<label for='username'>Password:</label>
<input type='text' id='password' name='password' required />
<br />
<label for='username'>Repeat Password:</label>
<input type='text' id='password-again' name='password-again' required />
</fieldset>
<fieldset>
<legend>Wiki Details</legend>
<label for='wiki-name'>Wiki Name:</label>
<input type='text' id='wiki-name' name='wiki-name' placeholder=\"e.g. Bob's Rockets Compendium\" required />
<!-- FUTURE: Have a logo url box here? -->
<p><em>The location on the server's disk to store the wiki data. Relative paths are ok - the default is <code>.</code> (i.e. the current directory).</em></p>
<label for='data-dir'>Data Storage Directory:</label>
<input type='text' id='data-dir' name='data-dir' value='.' required />
</fieldset>
<input type='submit' value='Create Wiki!' />
</form>";
});
add_action("firstrun-complete", function() {
global $version, $commit;
if($firstrun_complete) {
http_response_code(400);
exit(page_renderer::render_main("Setup complete - Error - $settings->sitename", "<p>Oops! Looks like $settings->sitename is already setup and ready to go! Go to the <a href='?action=$settings->defaultaction&page=".rawurlencode($settings->defaultpage)."'>" . htmlentities($settings->defaultpage)."</a> to get started!</p>"));
}
// $_POST: username, password, password-again, wiki-name, data-dir
if(empty($_POST["username"])) {
http_response_code(422);
exit(page_renderer::render_main("Missing information - Error - Pepperminty Wiki", "<p>Oops! Looks like you forgot to enter a username. Try going back in your browser and filling one in.</p>"));
}
if(empty($_POST["password"]) || empty($_POST["password-again"])) {
http_response_code(422);
exit(page_renderer::render_main("Missing information - Error - Pepperminty Wiki", "<p>Oops! Looks like you forgot to enter a password. Try going back in your browser and filling one in.</p>"));
}
if(empty($_POST["wiki-name"])) {
http_response_code(422);
exit(page_renderer::render_main("Missing information - Error - Pepperminty Wiki", "<p>Oops! Looks like you forgot to enter a name for your wiki. Try going back in your browser and filling one in.</p>"));
}
if(empty($_POST["data-dir"])) {
http_response_code(422);
exit(page_renderer::render_main("Missing information - Error - Pepperminty Wiki", "<p>Oops! Looks like you forgot to enter a directory on the server to store the wiki's data in. Try going back in your browser and filling one in. Relative paths are ok - the default is <code>.</code> (i.e. the current directory).</p>"));
}
// ----------------------------------------------------------------
file_put_contents("._peppermint_installed", "Install complete at " . date("c") . "with Pepperminty Wiki v$version-$commit");
});
}
]);