/** * Run the application * * @throws InvalidTokenException * @throws HttpNotFoundException * @throws BadResponseTypeException */ public function run() { $router = Service::get('router'); try { $request = new Request(); $security = Service::get('security'); if ($request->isPost() && !$security->validateToken()) { throw new InvalidTokenException(); } $route = $router->parseRoute(); if (!empty($route)) { $security->clearToken(); $response = $this->getResponse($route['controller'], $route['action'], isset($route['params']) ? $route['params'] : array()); } else { throw new HttpNotFoundException('Route Not Found'); } if (!$response instanceof Response) { throw new BadResponseTypeException(); } } catch (HttpNotFoundException $e) { $response = $this->renderError($e); } catch (BadResponseTypeException $e) { $response = $this->renderError($e); } catch (InvalidTokenException $e) { $response = $this->renderError($e); } catch (NotAuthException $e) { Service::get('session')->returnUrl = $router->getCurrentRoute()['pattern']; $response = new ResponseRedirect($router->generateRoute($this->config['security']['login_route'])); } catch (Exception $e) { $response = $this->renderError($e); } $response->send(); }
/** * Edit post. * * @param $id * @return \Framework\Response\ResponseRedirect * @throws HttpNotFoundException * @throws \Framework\Exception\DatabaseException */ public function editAction($id) { $dirty_request = new Request(null, false); if ($this->getRequest()->isPost()) { try { $post = new Post(); $date = new \DateTime(); $post->id = $id; $post->title = $dirty_request->post('title'); $post->content = $dirty_request->post('content'); $post->date = $date->format('Y-m-d H:i:s'); $post->users_id = Service::get('session')->get('authenticated')->id; $validator = new Validator($post); if ($validator->isValid()) { $post->save($id); return $this->redirect($this->generateRoute('home'), 'success', 'The post has been edit successfully'); } else { $error = $validator->getErrors(); } } catch (DatabaseException $e) { $error = $e->getMessage(); } } $post = Post::find((int) $id); return $this->render('add.html', array('post' => $post, 'action' => '/posts/' . $id . '/edit', 'errors' => isset($error) ? $error : null)); }
/** * Validation token * * @throws Exception */ public function verifyCsrfToken() { $request = new Request(); if ($request->isPost() && $request->post('csrfToken')) { if ($request->post('csrfToken') !== Service::get('session')->csrfToken) { throw new CustomException('Invalid token'); } } }
/** * Check CSRF token identity * * @return bool */ public function validateToken() { $request = new Request(); $postToken = $request->post('_csrf'); $cookieToken = $request->cookie('_csrf'); $sessionToken = Service::get('session')->_csrf; if ($postToken == $sessionToken && $cookieToken == $sessionToken) { return true; } return false; }
/** * Renderer and return all content to Response Class * * @return string $resalt */ public function renderContent() { //get all controller input data extract($this->data); //include controller relust in content $include = function ($controllerName, $actionName, $data = array()) { $reflectionMethod = new \ReflectionMethod($controllerName, $actionName . 'Action'); $response = $reflectionMethod->invokeArgs(new $controllerName(), $data); echo '<h3>Include</h3>'; echo '<p>'; $response->getContent(); echo '</p>'; }; //generate CSRF token to hidden form element $generateToken = function () { $csrfToken = Service::get('security')->generateCsrfToken(); echo '<input type="hidden" value="' . $csrfToken . '" name="csrfToken">'; }; //get current route information $getRoute = function ($name) { $routes = Service::get('routes'); return $routes[$name]['pattern']; }; $route = Service::get('route'); $request = new Request(); if ($request->isPost() && empty($post)) { $post = new \stdClass(); $post->title = $request->post('title'); $post->content = $request->post('content'); } if (Session::get('auth')) { $user = Service::get('security')->getUser(); } if (isset(Service::get('session')->flash)) { $flush = array('info' => array(Service::get('session')->flash)); unset(Service::get('session')->flash); } else { $flush = array(); } //Render template ob_start(); include $this->templateUrl; $content = ob_get_contents(); ob_end_clean(); //Render main layout ob_start(); include $this->layoutUrl; $this->renderDevMode(); $result = ob_get_contents(); ob_end_clean(); return $result; }
public function editAction($id, Request $request) { $id = (int) $id; $errors = []; if ($request->isPost()) { try { $date = new \DateTime(); $id = Post::where(['id' => $id])->update(['title' => $request->post('title'), 'content' => $request->post('content'), 'date' => $date->format('Y-m-d H:i:s')]); return $this->redirect($this->generateRoute('home'), 'The data has been updated successfully'); } catch (DatabaseException $e) { $errors[] = $e->getMessage(); } } return $this->render('edit.html', ['post' => Post::find($id), 'action' => $this->generateRoute('edit_post', ['id' => $id]), 'errors' => $errors ?? null]); }
public function uploadImage($image, $alt) { try { $file = new File($image, 10000); $uploadDir = ASSETS . 'uploads/portfolio/gallery/'; $tmp = ASSETS . 'uploads/portfolio/tmp/'; $file->setUploadDir($tmp); $fileSaver = new FileSaver($file); if (!$file->isNormalSize()) { throw new \Exception('Very big file size'); } if (!$fileSaver->save()) { throw new \Exception('File not selected'); } if (!ImageHelper::isImage($fileSaver->uploadedFile, ['gif', 'png', 'jpg', 'jpeg'])) { throw new \Exception('File is not image'); } if (file_exists($uploadDir . $file->getName())) { $uniqName = FileHelper::getUniqFileName($uploadDir, FileHelper::getFileExtension($file->getName())); $file->setName($uniqName); } FileHelper::move($fileSaver->uploadedFile, $uploadDir . $file->getName()); $db = Service::get('db'); $query = 'INSERT INTO ' . self::getTable() . '(name, alt) VALUES (:name, :alt)'; $stmt = $db->prepare($query); if (!$stmt->execute([':name' => $file->getName(), ':alt' => $alt])) { throw new \Exception('File not saved into DB'); } Service::get('session')->setFlushMsg('success', 'File successfully downloaded'); } catch (\Exception $e) { Service::get('session')->setFlushMsg('error', $e->getMessage()); $response = new ResponseRedirect(Request::getHost() . '/admin'); $response->send(); } }
/** * @param bool $absolute * * @return string */ public function getBaseUrl($absolute = false) { if ($this->_baseUrl === NULL) { $this->_baseUrl = rtrim(dirname($this->getScriptUrl()), '\\/'); } return ($absolute ? $this->request->getUrl() : '') . $this->_baseUrl; }
/** * Функция выполняет роутинг, запуск нужного контроллера, отдает респонс */ public function run() { self::$logger->debug("Running application..."); $this->request = Request::create(); $route_answer = $this->router->route($this->request); $route = $route_answer["route"]; //если роут не найден по данному uri if (empty($route)) { self::$logger->warn("Router was not found"); $response = new Response("Route not found", ResponseType::NOT_FOUND); } else { $controller_class = $route["controller"]; $method_name = $route["action"] . "Action"; if (class_exists($controller_class) && method_exists($controller_class, $method_name)) { $request_params = $route_answer["params"]; $response = $this->getResponseFromController($controller_class, $method_name, $request_params); // TODO добавить оборачивание респонса в шаблон // if("text/html" === $response->getContentType()) { // $content = $response->getContent(); // $response = new Response( include (__DIR__.'/../../src/Blog/views/500.html.php')); // } // $response->setContent($response->getContent()) } else { self::$logger->error("Such controller and method does not exists: " . "{$controller_class} -> {$method_name}()"); $response = new Response("Such controller and method does not exists: " . "{$controller_class} -> {$method_name}()", ResponseType::NOT_FOUND); } } $this->pdo->closeConnection(); $response->send(); }
public function getRouteClosure() { return function ($name) { $routes = Service::getConfig('routes'); foreach ($routes as $routeName => $rContent) { if ($name == $routeName) { $result = Request::getHost() . $rContent['pattern']; return $result; } } return ''; }; }
public function addAction() { $dirty_request = new Request(null, false); if ($dirty_request->isPost()) { try { $post = new Post(); $date = new \DateTime(); $post->title = $dirty_request->post('title'); $post->content = trim($dirty_request->post('content')); $post->date = $date->format('Y-m-d H:i:s'); $post->users_id = Service::get('session')->get('authenticated')->id; $validator = new Validator($post); if ($validator->isValid()) { $post->save(); return $this->redirect($this->generateRoute('home'), 'The data has been saved successfully'); } else { $error = $validator->getErrors(); } } catch (DatabaseException $e) { $error = $e->getMessage(); } } return $this->render('add.html', array('action' => $this->generateRoute('add_post'), 'errors' => isset($error) ? $error : null)); }
/** * Parses URL * * @param string $url * @return array|null * @throws NotAuthException */ public function parseRoute($url = '') { $route_found = null; $request = new Request(); $url = empty($url) ? $request->getUri() : $url; // Don`t replace slash on route "/" if ($url != '/') { $url = preg_replace('~/$~', '', $url); } foreach (self::$map as $key => $route) { $pattern = $this->prepare($route); if (preg_match($pattern, $url, $params)) { $security = Service::get('security'); $this->current_route = $route; $this->current_route['_name'] = $key; if (isset($route['security'])) { $roles = $route['security']; $user_role = $security->isAuthenticated() ? Service::get('security')->getUser()->role : array(); if (array_search($user_role, $roles) === false) { throw new NotAuthException(); } } // Get assoc array of params: preg_match('~{([\\w\\d_]+)}~', $route['pattern'], $param_names); $params = array_map('urldecode', $params); if (!empty($param_names)) { $params = array_combine($param_names, $params); array_shift($params); // Get rid of 0 element $this->current_route['params'] = $params; } break; } } return $this->current_route; }
public function getRoute() { $url = Request::getURL(); foreach (self::$routes1 as $key => $value) { if (strpos($value['pattern'], '{')) { $pattern = $this->patternToRegexp($value); } else { $pattern = $value['pattern']; } if (preg_match('~^'.$pattern.'$~', $url)) { $routes = $value; } } return $routes; }
public function generateRoute($name) { $routes = Service::getConfig('routes'); return array_key_exists($name, $routes) ? Request::getHost() . $routes[$name]['pattern'] : NULL; }
public function run() { //print_r($_SERVER); $logger = Service::get('logger'); $router = Service::get('router'); $route = $router->attemptToFindRoute(); //Service::get('logger')->log(Password::hash('mirana1111')); //print_r($route); //Service::get('security')->clear(); //$size = ImageHelper::getImageSize('C:\xampp\htdocs\portfolio\web\uploads\portfolio\gallery\2.jpg'); //Service::get('logger')->log($size[1]); try { if (empty($route)) { throw new HttpNotFoundException(); } else { if (isset($route['security'])) { $user = Service::get('security')->getUser(); if (isset($route['security']['login_route'])) { Service::get('security')->loginRoute = $route['security']['login_route']; } if (is_null($user)) { $host = Request::getHost(); $redirect = new ResponseRedirect($host . Service::get('security')->loginRoute); $redirect->send(); } $role = $route['security']['role']; if ($role !== $user->role) { Service::get('session')->setFlushMsg('warning', '�� ���������� ����'); $host = Request::getHost(); $redirect = new ResponseRedirect($host); $redirect->send(); } /* $c = 0; for ( ; ; ) { if ($c > count($routeSecurity) - 1) { break; } switch($routeSecurity[$c]) { case 'ROLE_USER': $user = $security->getUser(); if(is_null($user)) { $host = Request::getHost(); $redirect = new ResponseRedirect($host.$security->loginRoute); $redirect->send(); break; } else { break; } //continue security } ++$c; } */ } $controllerClass = $route['controller']; if (!class_exists($controllerClass)) { $logger->log('Maybe it`s problem with incorrect routes', 'FATAL'); throw new ServerException('CrAsHeD!!!! SERVER ERROR', 500); } $controller = new $controllerClass(); $action = $route['action'] . 'Action'; if (!method_exists($controller, $action)) { $logger->log('Maybe it`s problem with incorrect routes', 'FATAL'); throw new ServerException('CrAsHeD!!!! SERVER ERROR', 500); } $reflMethod = new \ReflectionMethod($controllerClass, $action); $response = $reflMethod->invokeArgs($controller, isset($route['variables']) ? $route['variables'] : []); $response->send(); } } catch (HttpNotFoundException $e) { $e->show404page(); } catch (ServerException $e) { $e->crashed(); } catch (DatabaseException $e) { die('Database error: ' . $e->getMessage()); } catch (\Exception $e) { } // print_r(Post::find('all')); //$request = Service::get('request'); //echo $request->getFullUrl(); /* $htmlPurifierBuilder = new HtmlPurifierBuilder(); $purifier = $htmlPurifierBuilder->execute(); $purifier->delInvalidTags(true); echo $purifier->purify('<script> awdasfasfafa</script>'); */ //$logger = Service::get('logger'); //$logger->log('suck'); //print_r($route); // $test = new TestController(); // echo $test->generateRoute('add_post'); // $response = $test->render('ok.html'); // $response->send(); }
echo \Framework\Request\Request::getHost() . '/uploads/portfolio/gallery/' . $image->name; ?> "></td> <td> <span style="border: 1px black dotted; border-radius: 5px;"><?php echo $image->id; ?> </span></td> <td style="text-align: center"><?php echo $image->name; ?> </td> <td style="text-align: right"><a href="/delete/<?php echo $image->id; ?> "><img src="<?php echo \Framework\Request\Request::getHost() . '/images/glyphicons/glyphicons_remove.png'; ?> " alt="delete"></a></td> </tr> <?php } } ?> </table> </div> </div> </div>