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; } }