forked from projects/fipamo
229 lines
8.3 KiB
PHP
229 lines
8.3 KiB
PHP
<?php
|
|
|
|
namespace brain\utility;
|
|
|
|
use function _\find;
|
|
|
|
class SetUp
|
|
{
|
|
public static function status()
|
|
{
|
|
if (file_exists("../config/settings.json")) {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public static function init($body)
|
|
{
|
|
//grab template files
|
|
$newFolks = json_decode(
|
|
file_get_contents("../config/init/folks-template.json"),
|
|
true
|
|
);
|
|
$newSettings = json_decode(
|
|
file_get_contents("../config/init/settings-template.json"),
|
|
true
|
|
);
|
|
//get form values
|
|
//$body = $request->getParsedBody();
|
|
$handle = $body["new_member_handle"];
|
|
$email = $body["new_member_email"];
|
|
$pass = $body["new_member_pass"];
|
|
$title = $body["new_member_title"];
|
|
|
|
$now = new \Moment\Moment();
|
|
//setup folks config
|
|
$hash = password_hash($pass, PASSWORD_DEFAULT);
|
|
$newFolks[0]["id"] = 0;
|
|
$newFolks[0]["handle"] = $handle;
|
|
$newFolks[0]["email"] = $email;
|
|
$newFolks[0]["password"] = $hash;
|
|
$newFolks[0]["key"] = password_hash($email, PASSWORD_DEFAULT);
|
|
$newFolks[0]["secret"] = StringTools::randomString(12);
|
|
$newFolks[0]["role"] = "hnic";
|
|
$newFolks[0]["created"] = $now->format("Y-m-d\TH:i:sP");
|
|
$newFolks[0]["updated"] = $now->format("Y-m-d\TH:i:sP");
|
|
//set up settings config
|
|
$newSettings["global"]["title"] = $title;
|
|
|
|
//create index file
|
|
//$rightNow = $now->format("Y-m-d\TH:i:sP");
|
|
//var_dump($now->format("Y-m-d\TH:i:sP"));
|
|
$index = [
|
|
"id" => 1,
|
|
"uuid" => StringTools::createUUID(),
|
|
"title" => "FIRST!",
|
|
"feature" => "/assets/images/global/default-bg.jpg",
|
|
"files" => "",
|
|
"path" => "content/pages/start",
|
|
"layout" => "index",
|
|
"tags" => "start, welcome",
|
|
"author" => $handle,
|
|
"created" => $now->format("Y-m-d\TH:i:sP"),
|
|
"updated" => $now->format("Y-m-d\TH:i:sP"),
|
|
"deleted" => "false",
|
|
"slug" => "first",
|
|
"menu" => "false",
|
|
"featured" => "false",
|
|
"published" => "true",
|
|
"content" =>
|
|
"# F**k Yes \n\nIf you're seeing this, you're up and running. NICE WORK!\n\nFrom here, feel free to start dropping pages to your heart's content.\n\nFor some tips about using Fipamo, check out the ![docs](https://code.playvicio.us/Are0h/Fipamo/wiki/02-Usage)\n\nAll good? Feel free to edit this page to whatever you want!\n\nYOU'RE THE CAPTAIN NOW.",
|
|
];
|
|
|
|
$freshIndex = DocTools::objectToMD($index);
|
|
|
|
//once all files created, write down
|
|
|
|
DocTools::writeSettings("../config/settings.json", $newSettings);
|
|
DocTools::writeSettings("../config/folks.json", $newFolks);
|
|
DocTools::writeSettings("../config/tags.json", []);
|
|
DocTools::writePages(
|
|
"create",
|
|
"start",
|
|
"../content/pages/start/index.md",
|
|
$freshIndex
|
|
);
|
|
|
|
//if there is an older session file, get rid of it
|
|
if (is_file("../content/.session")) {
|
|
unlink("../content/.session");
|
|
}
|
|
|
|
$result = ["type" => "blogInitGood", "message" => "Site Created"];
|
|
|
|
return $result;
|
|
}
|
|
|
|
public static function restore($request)
|
|
{
|
|
$result = [
|
|
"type" => "requestLame",
|
|
"message" => "Still working on it.",
|
|
];
|
|
$body = $request->getParsedBody();
|
|
|
|
$backup = $request->getUploadedFiles();
|
|
$file = $backup["backup-upload"];
|
|
$size = $file->getSize();
|
|
$name = $file->getClientFileName();
|
|
|
|
//park it so it can be read
|
|
$file->moveTo("../content" . "/" . $name);
|
|
|
|
//open it and get files to verify user
|
|
$zip = new ZipArchive();
|
|
if ($zip->open("../content" . "/" . $name) === true) {
|
|
$folks = json_decode($zip->getFromName("settings/folks.json"), true);
|
|
$found = find($folks, ["handle" => $body["restore_member_handle"]]);
|
|
|
|
//if member is found in back up, check pass
|
|
if ($found) {
|
|
if (password_verify($body["restore_member_pass"], $found["password"])) {
|
|
//backup verified, restore site
|
|
|
|
//set new secret key for older folks configs
|
|
$newFolks = [];
|
|
if (!isset($found["secret"])) {
|
|
$found["secret"] = StringTools::randomString(12);
|
|
}
|
|
array_push($newFolks, $found);
|
|
//dump files in folder
|
|
$zip->extractTo("../content");
|
|
|
|
//move to appropriate spots
|
|
/*
|
|
rename(
|
|
"../content/settings/settings.json",
|
|
"../config/settings.json"
|
|
);
|
|
*/
|
|
|
|
//load up old config file
|
|
$newConfig = json_decode(
|
|
file_get_contents("../content/settings/settings.json"),
|
|
true
|
|
);
|
|
//check for key, add if not there
|
|
if (!isset($newConfig["global"]["externalAPI"])) {
|
|
$newConfig["global"]["externalAPI"] = "false";
|
|
}
|
|
//write new config file
|
|
DocTools::writeSettings("../config/settings.json", $newConfig);
|
|
|
|
//rename("../content/settings/folks.json", "../config/folks.json");
|
|
DocTools::writeSettings("../config/folks.json", $newFolks);
|
|
|
|
rename("../content/settings/tags.json", "../config/tags.json");
|
|
|
|
//images path for blog and user
|
|
$blogImagePath = "../public/assets/images/blog";
|
|
$userImagePath = "../public/assets/images/user";
|
|
|
|
//check to see if image dirs are empty, if not chill
|
|
if ($globs = glob($blogImagePath . "/*")) {
|
|
//directory not empty, relax
|
|
} else {
|
|
rename("../content/public/assets/images/blog", $blogImagePath);
|
|
}
|
|
|
|
if ($globs = glob($userImagePath . "/*")) {
|
|
//directory not empty, relax
|
|
} else {
|
|
rename("../content/public/assets/images/user", $userImagePath);
|
|
}
|
|
|
|
rename("../content/content/pages/", "../content/pages");
|
|
|
|
//legacy check for old file structure
|
|
if (is_file("../content/pages/index.md")) {
|
|
if (!is_dir("../content/pages/start")) {
|
|
//Directory does not exist, so lets create it.
|
|
mkdir("../content/pages/start", 0755, true);
|
|
//move start page to appropriate spot
|
|
rename(
|
|
"../content/pages/index.md",
|
|
"../content/pages/start/index.md"
|
|
);
|
|
}
|
|
} else {
|
|
//chill
|
|
}
|
|
|
|
//clean up
|
|
|
|
DocTools::deleteFolder("../content/settings");
|
|
DocTools::deleteFolder("../content/public");
|
|
DocTools::deleteFolder("../content/content");
|
|
$result = [
|
|
"type" => "requestGood",
|
|
"message" => "Site Restored! Redirecting",
|
|
];
|
|
} else {
|
|
$result = [
|
|
"type" => "requestLame",
|
|
"message" => "Check that password, champ.",
|
|
];
|
|
}
|
|
} else {
|
|
$result = [
|
|
"type" => "requestLame",
|
|
"message" => "No member found by that name, hoss",
|
|
];
|
|
}
|
|
|
|
$zip->close();
|
|
$zipPath = "../content/" . $name;
|
|
//trash zip when done
|
|
unlink($zipPath);
|
|
} else {
|
|
$result = [
|
|
"type" => "requestLame",
|
|
"message" => "Could not open backup. RATS!",
|
|
];
|
|
}
|
|
return $result;
|
|
}
|
|
}
|