Example #1
0
 /**
  * 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();
 }
Example #2
0
 /**
  * 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));
 }
Example #3
0
 /**
  * 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');
         }
     }
 }
Example #4
0
 /**
  * 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;
 }
Example #5
0
 /**
  * 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;
 }
Example #6
0
 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]);
 }
Example #7
0
 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();
     }
 }
Example #8
0
 /**
  * @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;
 }
Example #9
0
 /**
  * Функция выполняет роутинг, запуск нужного контроллера, отдает респонс
  */
 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();
 }
Example #10
0
 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 '';
     };
 }
Example #11
0
 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));
 }
Example #12
0
 /**
  * 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;
 }
Example #13
0
    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; 
    }
Example #14
0
 public function generateRoute($name)
 {
     $routes = Service::getConfig('routes');
     return array_key_exists($name, $routes) ? Request::getHost() . $routes[$name]['pattern'] : NULL;
 }
Example #15
0
 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();
 }
Example #16
0
        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>