docs = $docService; } private static function validSecret($length) { $alphanum = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; $special = '*&!@%^#$'; $alphabet = $alphanum . $special; $random = openssl_random_pseudo_bytes($length); $alphabet_length = strlen($alphabet); $string = ''; for ($i = 0; $i < $length; ++$i) { $string .= $alphabet[ord($random[$i]) % $alphabet_length]; } //secret needs to be a valid token if ($length == 12) { try { $secret = Token::create(12, $string, time() + 3600, 'localhost'); return $string; } catch (BuildException $e) { //bad secret, so try agiain return self::validSecret(12); } if (Token::validate($key, $string)) { return $string; } else { return self::validSecret(12); } } } public function fresh($body) { //grab template files $newFolks = json_decode( file_get_contents('../content/config/init/folks-template.json'), true ); $newSettings = json_decode( file_get_contents('../content/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'] = self::validSecret(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 $index = [ 'id' => 1, 'uuid' => 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.", ]; //once all files created, write down $this->docs->writeSettings($newSettings, '../content/config/settings.json'); $this->docs->writeSettings($newFolks, '../content/config/folks.json'); $this->docs->writeSettings([], '../content/config/tags.json'); $object = (object) $index; $this->docs->writePages( 'create', 'start', '../content/pages/start/index.md', $this->docs::objectToMD($object) ); $result = ['type' => 'blogInitGood', 'message' => 'Site Created']; return $result; } }