mirror of
https://github.com/WerySkok/nativegallery.git
synced 2024-12-22 16:41:17 +03:00
194 lines
6.2 KiB
PHP
194 lines
6.2 KiB
PHP
|
<?php
|
|||
|
|
|||
|
namespace App\Services;
|
|||
|
|
|||
|
use \App\Core\Page;
|
|||
|
|
|||
|
class Router
|
|||
|
{
|
|||
|
|
|||
|
|
|||
|
|
|||
|
public static function get($route, $path_to_include)
|
|||
|
{
|
|||
|
if ($_SERVER['REQUEST_METHOD'] == 'GET') {
|
|||
|
self::route($route, $path_to_include);
|
|||
|
}
|
|||
|
}
|
|||
|
public static function post($route, $path_to_include)
|
|||
|
{
|
|||
|
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
|
|||
|
self::route($route, $path_to_include);
|
|||
|
}
|
|||
|
}
|
|||
|
public static function put($route, $path_to_include)
|
|||
|
{
|
|||
|
if ($_SERVER['REQUEST_METHOD'] == 'PUT') {
|
|||
|
self::route($route, $path_to_include);
|
|||
|
}
|
|||
|
}
|
|||
|
public static function patch($route, $path_to_include)
|
|||
|
{
|
|||
|
if ($_SERVER['REQUEST_METHOD'] == 'PATCH') {
|
|||
|
self::route($route, $path_to_include);
|
|||
|
}
|
|||
|
}
|
|||
|
public static function delete($route, $path_to_include)
|
|||
|
{
|
|||
|
if ($_SERVER['REQUEST_METHOD'] == 'DELETE') {
|
|||
|
self::route($route, $path_to_include);
|
|||
|
}
|
|||
|
}
|
|||
|
public static function any($route, $path_to_include)
|
|||
|
{
|
|||
|
self::route($route, $path_to_include);
|
|||
|
}
|
|||
|
public static function route($route, $path_to_include)
|
|||
|
{
|
|||
|
$root = $_SERVER['DOCUMENT_ROOT'];
|
|||
|
|
|||
|
// Обработка случая, когда маршрут - 404
|
|||
|
if ($route == "/404") {
|
|||
|
self::includeControllerMethod($path_to_include);
|
|||
|
exit();
|
|||
|
}
|
|||
|
|
|||
|
// Получение URL-адреса запроса и разделение его на части
|
|||
|
$request_url = strtok(filter_var($_SERVER['REQUEST_URI'], FILTER_SANITIZE_URL), '?');
|
|||
|
$request_url_parts = explode('/', rtrim($request_url, '/'));
|
|||
|
$route_parts = explode('/', $route);
|
|||
|
array_shift($route_parts);
|
|||
|
array_shift($request_url_parts);
|
|||
|
|
|||
|
// Обработка корневого маршрута
|
|||
|
if ($route_parts[0] == '' && count($request_url_parts) == 0) {
|
|||
|
self::includeControllerMethod($path_to_include);
|
|||
|
$file_path = $root . '/app/Controllers/' . $controller . '.php';
|
|||
|
$file_size = filesize($file_path);
|
|||
|
header("Content-Length: $file_size");
|
|||
|
exit();
|
|||
|
}
|
|||
|
|
|||
|
// Проверка соответствия количества частей маршрута и запроса
|
|||
|
if (count($route_parts) !== count($request_url_parts)) {
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
// Обработка параметров маршрута
|
|||
|
$parameters = [];
|
|||
|
foreach ($route_parts as $index => $route_part) {
|
|||
|
if (preg_match("/^[$]/", $route_part)) {
|
|||
|
$route_part = ltrim($route_part, '$');
|
|||
|
$parameters[] = $request_url_parts[$index];
|
|||
|
$$route_part = $request_url_parts[$index];
|
|||
|
global $$route_part;
|
|||
|
} elseif ($route_part !== $request_url_parts[$index]) {
|
|||
|
return;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// Включение контроллера и вызов метода
|
|||
|
self::includeControllerMethod($path_to_include);
|
|||
|
exit();
|
|||
|
}
|
|||
|
|
|||
|
// Функция для включения контроллера и вызова метода
|
|||
|
private static function includeControllerMethod($path_to_include)
|
|||
|
{
|
|||
|
list($controller, $method) = explode('@', $path_to_include);
|
|||
|
$controller = '\App\Controllers\\' . $controller;
|
|||
|
$objectController = new $controller;
|
|||
|
$objectController->$method();
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
private static function out($text)
|
|||
|
{
|
|||
|
echo htmlspecialchars($text);
|
|||
|
}
|
|||
|
private static function set_csrf()
|
|||
|
{
|
|||
|
if (!isset($_SESSION["csrf"])) {
|
|||
|
$_SESSION["csrf"] = bin2hex(random_bytes(50));
|
|||
|
}
|
|||
|
echo '<input type="hidden" name="csrf" value="' . $_SESSION["csrf"] . '">';
|
|||
|
}
|
|||
|
private static function is_csrf_valid()
|
|||
|
{
|
|||
|
if (!isset($_SESSION['csrf']) || !isset($_POST['csrf'])) {
|
|||
|
return false;
|
|||
|
}
|
|||
|
if ($_SESSION['csrf'] != $_POST['csrf']) {
|
|||
|
return false;
|
|||
|
}
|
|||
|
return true;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
private static function notfound()
|
|||
|
{
|
|||
|
Page::set('Errors/404');
|
|||
|
}
|
|||
|
|
|||
|
public static function redirect($page)
|
|||
|
{
|
|||
|
header("Location: {$page}");
|
|||
|
}
|
|||
|
|
|||
|
public static function method()
|
|||
|
{
|
|||
|
return $_SERVER['REQUEST_METHOD'];
|
|||
|
}
|
|||
|
|
|||
|
public static function ip()
|
|||
|
{
|
|||
|
$fields = array(
|
|||
|
'HTTP_CF_CONNECTING_IP',
|
|||
|
'HTTP_X_SUCURI_CLIENTIP',
|
|||
|
'HTTP_CLIENT_IP',
|
|||
|
'HTTP_X_FORWARDED_FOR',
|
|||
|
'HTTP_X_FORWARDED',
|
|||
|
'HTTP_FORWARDED_FOR',
|
|||
|
'HTTP_FORWARDED',
|
|||
|
'REMOTE_ADDR',
|
|||
|
// more custom fields
|
|||
|
);
|
|||
|
|
|||
|
foreach ($fields as $ip_field) {
|
|||
|
if (!empty($_SERVER[$ip_field])) {
|
|||
|
return $_SERVER[$ip_field];
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return null;
|
|||
|
}
|
|||
|
|
|||
|
public static function checkCurl($url)
|
|||
|
{
|
|||
|
$user_agent = 'Mozilla/5.0 (Windows NT 6.1; rv:8.0) Gecko/20100101 Firefox/8.0';
|
|||
|
$options = array(
|
|||
|
|
|||
|
CURLOPT_CUSTOMREQUEST => "GET", //set request type post or get
|
|||
|
CURLOPT_POST => false, //set to GET
|
|||
|
CURLOPT_USERAGENT => $user_agent, //set user agent
|
|||
|
CURLOPT_COOKIE => "BIRUXSESS_=1;KANDLESERVICETOKEN__779hfh908BNol8FHn7d9MNFOL8fjND8D9MNfdo=BIRUXSERVICE__TOKENYY", //set cookie file
|
|||
|
CURLOPT_RETURNTRANSFER => true, // return web page
|
|||
|
CURLOPT_HEADER => false, // don't return headers
|
|||
|
CURLOPT_FOLLOWLOCATION => true, // follow redirects
|
|||
|
CURLOPT_ENCODING => "", // handle all encodings
|
|||
|
CURLOPT_AUTOREFERER => true, // set referer on redirect
|
|||
|
CURLOPT_CONNECTTIMEOUT => 120, // timeout on connect
|
|||
|
CURLOPT_TIMEOUT => 120, // timeout on response
|
|||
|
CURLOPT_MAXREDIRS => 10, // stop after 10 redirects
|
|||
|
CURLOPT_RETURNTRANSFER => 1
|
|||
|
);
|
|||
|
|
|||
|
$ch = curl_init($url);
|
|||
|
curl_setopt_array($ch, $options);
|
|||
|
$output = curl_exec($ch);
|
|||
|
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
|||
|
curl_close($ch);
|
|||
|
|
|||
|
return $httpcode;
|
|||
|
}
|
|||
|
}
|