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"]; //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; } }