forked from projects/fipamo
f1850ce7f7
There was an error in the request to set up a fresh site on the front end and handling the respective object on the backend that was causing the process to error out. Also added the source map for the dash script because it's eventually going to be fully transparent anyway.
231 lines
8.6 KiB
PHP
231 lines
8.6 KiB
PHP
<?php
|
|
|
|
namespace brain\utility;
|
|
|
|
use Carbon\Carbon;
|
|
|
|
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 = Carbon::now();
|
|
//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!',
|
|
'imageList' => '/assets/images/global/default-bg.jpg',
|
|
'fileList' => '',
|
|
'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'];
|
|
//NOTE: If this fails check 'post_max_size' in php.ini
|
|
$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;
|
|
}
|
|
}
|